не бейте я первый раз на джаве кодил умный режим чест стилера работает на основе рандома делал для своей пасты package wtf.expensive.modules.impl.player; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.container.ChestContainer; import net.minecraft.inventory.container.ClickType; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.util.text.TextFormatting; import wtf.expensive.events.Event; import wtf.expensive.events.impl.player.EventUpdate; import wtf.expensive.managment.Managment; import wtf.expensive.modules.Function; import wtf.expensive.modules.FunctionAnnotation; import wtf.expensive.modules.Type; import wtf.expensive.modules.settings.imp.BooleanOption; import wtf.expensive.modules.settings.imp.ModeSetting; import wtf.expensive.modules.settings.imp.MultiBoxSetting; import wtf.expensive.modules.settings.imp.SliderSetting; import wtf.expensive.util.misc.TimerUtil; import java.util.Random; @FunctionAnnotation(name = "ChestStealer", type = Type.Player) public class ChestStealer extends Function { boolean doClick = false; private final ModeSetting mode = new ModeSetting("Режим", "Обычный", "Обычный", "Умный" ); private final BooleanOption msgs = new BooleanOption("Уведомления", true); private final BooleanOption chestClose = new BooleanOption("Закрывать сундук если пустой", true); private final SliderSetting stealDelay = new SliderSetting("Задержка лутания предмета (ms)", 100, 0, 1000, 1); private final BooleanOption filterLootToggle = new BooleanOption("Фильтр лута", false).setVisible(() -> mode.is("Умный")); private final MultiBoxSetting filterLoot = new MultiBoxSetting("Лутать", new BooleanOption("Руду", true), new BooleanOption("Сферы", false), new BooleanOption("Незер слитки", false), new BooleanOption("Чар книги", false), new BooleanOption("Тотемы", false), new BooleanOption("Зелья", false) ).setVisible(() -> mode.is("Умный") && filterLootToggle.get()); private final SliderSetting itemLimit = new SliderSetting("Лимит кол-ва предмета", 12, 1, 64, 1).setVisible(() -> mode.is("Умный")); private final BooleanOption miss = new BooleanOption("Промахиваться", true).setVisible(() -> mode.is("Умный")); private final SliderSetting missPercent = new SliderSetting("Шанс на промах", 50, 0, 100, 1).setVisible(() -> mode.is("Умный") && miss.get()); private final TimerUtil timerUtil = new TimerUtil(); public ChestStealer() { addSettings(mode, chestClose, stealDelay, filterLootToggle, filterLoot, itemLimit, miss, missPercent, msgs); } private boolean FilterItem(Item item){ if(!filterLootToggle.get()) { return true; } boolean b = true; if(filterLoot.get(0)){ if(item == Items.DIAMOND_ORE || item == Items.EMERALD_ORE || item == Items.IRON_ORE || item == Items.GOLD_ORE || item == Items.COAL_ORE){ return true; } else { b = false; } } else if(filterLoot.get(1)){ if(item == Items.PLAYER_HEAD){ return true; } else { b = false; } } else if(filterLoot.get(2)){ if(item == Items.NETHERITE_INGOT){ return true; } else { b = false; } } else if(filterLoot.get(3)){ if(item == Items.ENCHANTED_BOOK){ return true; } else { b = false; } } else if(filterLoot.get(4)){ if(item == Items.TOTEM_OF_UNDYING){ return true; } else { b = false; } } else if(filterLoot.get(5)){ if(item == Items.POTION || item == Items.SPLASH_POTION){ return true; } else { b = false; } } else { b = false; } return b; } @Override public void onEvent(final Event event) { if(mode.is("Обычный")) { if (event instanceof EventUpdate) { if (mc.player.openContainer instanceof ChestContainer) { ChestContainer container = (ChestContainer) mc.player.openContainer; for (int index = 0; index < container.inventorySlots.size(); ++index) { if (container.getLowerChestInventory().getStackInSlot(index).getItem() != Item.getItemById(0) && timerUtil.hasTimeElapsed(stealDelay.getValue().longValue())) { mc.playerController.windowClick(container.windowId, index, 0, ClickType.QUICK_MOVE, mc.player); timerUtil.reset(); continue; } if (container.getLowerChestInventory().isEmpty() && chestClose.get()) { mc.player.closeScreen(); } } } } } else if(mode.is("Умный")){ if (event instanceof EventUpdate) { if (mc.player.openContainer instanceof ChestContainer) { ChestContainer container = (ChestContainer) mc.player.openContainer; for (int r = 0; r < container.inventorySlots.size()/1.3; ++r) { IInventory p = container.getLowerChestInventory(); int index = new Random().nextInt(0, container.inventorySlots.size()); if (index <= container.inventorySlots.size()) { if(timerUtil.hasTimeElapsed(stealDelay.getValue().longValue())) { if (p.getStackInSlot(index).getItem() != Item.getItemById(0)) { if (p.getStackInSlot(index).getCount() <= itemLimit.getValue().intValue()) { if (FilterItem(p.getStackInSlot(index).getItem())) { if (miss.get()) { if (new Random().nextInt(0, 100) >= missPercent.getValue().intValue()) { doClick = true; } else { doClick = false; if(msgs.get()) { Managment.NOTIFICATION_MANAGER.add(TextFormatting.RED + "Мисснул" + TextFormatting.WHITE + " по предмету!", "ChestStealer", 2); } timerUtil.reset(); continue; } } else { doClick = true; } if (doClick) { mc.playerController.windowClick(container.windowId, index, 0, ClickType.QUICK_MOVE, mc.player); } else { timerUtil.reset(); continue; } timerUtil.reset(); continue; } else { if(msgs.get()) { Managment.NOTIFICATION_MANAGER.add(TextFormatting.WHITE + "Предмет " + TextFormatting.RED + "не подошёл" + TextFormatting.WHITE + " по фильтру!", "ChestStealer", 2); } timerUtil.reset(); continue; } } } if (container.getLowerChestInventory().isEmpty() && chestClose.get()) { mc.player.closeScreen(); } } } } } } } } }