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

OJIEKCAHDP

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
OJIEKCAHDP
Нужно сделать, чтобы печка плавила в два раза допустим быстрее, сделал через Burn и Smelt ивенты, Burn - это не ускорение, а просто заполняет полоску готовности, в Smelt, после того, как установил setCookTime - откатывает печку назад, переплавленную вещь не выдаёт, делал через шедуллер, вещь даёт и сразу же забирает обратно, короче будто откат. Я уже даже не знаю чо делать. Хотелось бы просто в печке увеличить скорость тиков
 
Попробуй setCookSpeedMultiplier
 
Код:
    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));
    }
}
 
Код:
    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));
    }
}
Что за FurnaceInfo, если не секрет?
 
Код:
    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));
    }
}
Где увидеть эти исходники, плагин обфуцирован
 
Чего не сделаешь, что ты не обновляться :D
к сожалению пока что обновления не приносят нам ничего кроме кучи контента, через лет 5 майнкрафт можно будет запустить разве что на компе NASA
 
к сожалению пока что обновления не приносят нам ничего кроме кучи контента, через лет 5 майнкрафт можно будет запустить разве что на компе NASA
Здесь есть доля истины - черт знает, что только будет в 1.18 без кубических чанков или введения мультипотока в работу мира - но не стоит забывать, что и процессоры не стоят на месте.
 
Здесь есть доля истины - черт знает, что только будет в 1.18 без кубических чанков или введения мультипотока в работу мира - но не стоит забывать, что и процессоры не стоят на месте.
учитывая, что макс. количество онлайна для одного сервера только падает со временем при топ. конфигурации, процессоры явно проигрывают ))
 
учитывая, что макс. количество онлайна для одного сервера только падает со временем при топ. конфигурации, процессоры явно проигрывают ))
Так беда не в версии, а в том что виавершен с виабацкварс все больше проц ипет) Говнокодинг накапливается. А его все ставят, хз зачем.
 
Назад
Верх