1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Ускоренное переплавление в печке

Тема в разделе "Разработка плагинов для новичков", создана пользователем OJIEKCAHDP, 12 авг 2021.

  1. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Нужно сделать, чтобы печка плавила в два раза допустим быстрее, сделал через Burn и Smelt ивенты, Burn - это не ускорение, а просто заполняет полоску готовности, в Smelt, после того, как установил setCookTime - откатывает печку назад, переплавленную вещь не выдаёт, делал через шедуллер, вещь даёт и сразу же забирает обратно, короче будто откат. Я уже даже не знаю чо делать. Хотелось бы просто в печке увеличить скорость тиков
     
  2. Bezobrazie

    Bezobrazie Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Попробуй setCookSpeedMultiplier
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    furnace.setCookSpeedMultiplier в помощь.
     
  4. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Paper 1.12.2, нет такого
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну тогда обновляйся.
     
  6. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Спс за совет, но это не то, что мне нужно
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как хочешь
     
  8. Witenin

    Witenin Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    Ну тогда пакеты в помощь.
     
  9. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Какие имеено?
     
  10. Witenin

    Witenin Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    В паблике есть сурсы плагина винлокера - wFurnace, там можешь посмотреть)
     
  11. Witenin

    Witenin Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    Код:
        public static void startCookTime(Block block, FurnaceInfo info) {
            Furnace furnace = (Furnace)block.getState();
            if (info.getCooktime() != 0) {
                new BukkitRunnable(){
    
                    public void run() {
                        if (furnace.getInventory().getSmelting() == null) {
                            this.cancel();
                            return;
                        }
                        if (furnace.getCookTime() < 0) {
                            furnace.setCookTime((short)0);
                            furnace.update();
                        }
                        Furnaces.setCookTime(block, Furnaces.getCappedTicks(200, info.getCooktime(), 0.5));
                    }
                }.runTask(Main.getInstance());
            }
        }
    
        public static void setCookTime(Block block, int duration) {
            try {
                String version = Main.getInstance().getServer().getClass().getPackage().getName().split("\\.")[3];
                Class<?> CraftFurnace = Class.forName("org.bukkit.craftbukkit." + version + ".block.CraftFurnace");
                Method CraftFurnaceGetTileEntity = null;
                Class<?> TileEntityFurnace = Class.forName("net.minecraft.server." + version + ".TileEntityFurnace");
                Field TileEntityFurnace_cook_time_total = TileEntityFurnace.getDeclaredField("cookTimeTotal");
                TileEntityFurnace_cook_time_total.setAccessible(true);
                for (Class<?> clazz = CraftFurnace; clazz != null; clazz = clazz.getSuperclass()) {
                    for (Method method : clazz.getDeclaredMethods()) {
                        if (!method.getName().equals("getTileEntity") || method.getParameterTypes().length != 0) continue;
                        CraftFurnaceGetTileEntity = method;
                        CraftFurnaceGetTileEntity.setAccessible(true);
                    }
                }
                if (!CraftFurnace.isAssignableFrom(block.getState().getClass())) {
                    return;
                }
                Object tileEntityFurnace = CraftFurnaceGetTileEntity.invoke(block.getState());
                if (tileEntityFurnace == null || !TileEntityFurnace.isAssignableFrom(tileEntityFurnace.getClass())) {
                    return;
                }
                TileEntityFurnace_cook_time_total.set(tileEntityFurnace, Math.max(0, duration));
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static int getCappedTicks(int baseTicks, int baseModifier, double fractionModifier) {
            return Math.max(1, Math.min(32767, Furnaces.getModifiedTicks(baseTicks, baseModifier, fractionModifier)));
        }
    
        public static int getModifiedTicks(int baseTicks, int baseModifier, double fractionModifier) {
            if (baseModifier == 0) {
                return baseTicks;
            }
            if (baseModifier > 0) {
                return (int)((double)baseTicks / (1.0 + (double)baseModifier * fractionModifier));
            }
            return (int)((double)baseTicks * (1.0 + (double)(-baseModifier) * fractionModifier));
        }
    }
     
  12. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Что за FurnaceInfo, если не секрет?
     
  13. Автор темы
    OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Где увидеть эти исходники, плагин обфуцирован
     
  14. Witenin

    Witenin Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Witenin
    В одной из телег слили src) В принципе можешь в вк отписать - покажу где. (Айди как имя на рубакките)
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Чего не сделаешь, что ты не обновляться :D
     
  16. Zuif

    Zuif Активный участник Пользователь

    Баллы:
    76
    к сожалению пока что обновления не приносят нам ничего кроме кучи контента, через лет 5 майнкрафт можно будет запустить разве что на компе NASA
     
  17. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Здесь есть доля истины - черт знает, что только будет в 1.18 без кубических чанков или введения мультипотока в работу мира - но не стоит забывать, что и процессоры не стоят на месте.
     
  18. Zuif

    Zuif Активный участник Пользователь

    Баллы:
    76
    учитывая, что макс. количество онлайна для одного сервера только падает со временем при топ. конфигурации, процессоры явно проигрывают ))
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Так беда не в версии, а в том что виавершен с виабацкварс все больше проц ипет) Говнокодинг накапливается. А его все ставят, хз зачем.
     

Поделиться этой страницей