Начинающий
- Статус
- Оффлайн
- Регистрация
- 20 Апр 2023
- Сообщения
- 157
- Реакции
- 0
- package im.expensive.functions.impl.player;
- import com.google.common.eventbus.Subscribe;
- import im.expensive.events.EventUpdate;
- import im.expensive.functions.api.Category;
- import im.expensive.functions.api.Function;
- import im.expensive.functions.api.FunctionRegister;
- import im.expensive.functions.settings.impl.BooleanSetting;
- import im.expensive.functions.settings.impl.ModeListSetting;
- import im.expensive.functions.settings.impl.ModeSetting;
- import im.expensive.functions.settings.impl.SliderSetting;
- import im.expensive.utils.math.StopWatch;
- import lombok.AccessLevel;
- import lombok.experimental.FieldDefaults;
- 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 java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- @FieldDefaults(level = AccessLevel.PRIVATE)
- @FunctionRegister(name = "ChestStealer", type = Category.Miscellaneous)
- public class ChestStealer extends Function {
- private final BooleanSetting noEntity = new BooleanSetting("NoEntity", true);
- private final ModeSetting mode = new ModeSetting("Мод", "Умный", "Умный", "Тихий", "Полный лут");
- private final BooleanSetting chestClose = new BooleanSetting("Закрывать при пустом", true);
- private final SliderSetting minStealDelay = new SliderSetting("Мин. задержка", 100, 0, 1000, 1);
- private final SliderSetting maxStealDelay = new SliderSetting("Макс. задержка", 300, 0, 2000, 1);
- private final BooleanSetting filterLootToggle = new BooleanSetting("Фильтр лута", false).setVisible(() -> mode.is("Умный"));
- private final ModeListSetting filterLoot = new ModeListSetting("Лут",
- new BooleanSetting("Руды", true),
- new BooleanSetting("Головы", false),
- new BooleanSetting("Незеритовый слиток", false),
- new BooleanSetting("Зачарованная книга", false),
- new BooleanSetting("Тотемы", false),
- new BooleanSetting("Зелья", false),
- new BooleanSetting("Еда", true)
- ).setVisible(() -> mode.is("Умный") && filterLootToggle.get());
- private final SliderSetting itemLimit = new SliderSetting("Лимит кол.", 12, 1, 64, 1).setVisible(() -> mode.is("Умный"));
- private final SliderSetting missPercent = new SliderSetting("Миссать", 50, 0, 100, 1).setVisible(() -> mode.is("Умный"));
- private final StopWatch timerUtil = new StopWatch();
- private final Random random = new Random();
- public ChestStealer() {
- addSettings(mode, chestClose, minStealDelay, maxStealDelay, filterLootToggle, filterLoot, itemLimit, missPercent, noEntity);
- }
- private boolean filterItem(Item item) {
- if (!filterLootToggle.get()) {
- return true;
- }
- boolean filterOres = filterLoot.get(0).get();
- boolean filterHeads = filterLoot.get(1).get();
- boolean filterNetherite = filterLoot.get(2).get();
- boolean filterBooks = filterLoot.get(3).get();
- boolean filterTotems = filterLoot.get(4).get();
- boolean filterPotions = filterLoot.get(5).get();
- boolean filterFood = filterLoot.get(6).get();
- if (filterOres && (item == Items.DIAMOND_ORE || item == Items.IRON_ORE)) return true;
- if (filterHeads && item == Items.PLAYER_HEAD) return true;
- if (filterNetherite && item == Items.NETHERITE_INGOT) return true;
- if (filterBooks && item == Items.ENCHANTED_BOOK) return true;
- if (filterTotems && item == Items.TOTEM_OF_UNDYING) return true;
- if (filterPotions && (item == Items.POTION || item == Items.SPLASH_POTION)) return true;
- if (filterFood && (item == Items.BREAD || item == Items.APPLE)) return true;
- return false;
- }
- @Subscribe
- public void onEvent(final EventUpdate event) {
- if (mode.is("Умный") || mode.is("Тихий") || mode.is("Полный лут")) {
- if (mc.player.openContainer instanceof ChestContainer) {
- ChestContainer container = (ChestContainer) mc.player.openContainer;
- IInventory inventory = container.getLowerChestInventory();
- if (inventory == null) return;
- List<Integer> validSlots = new ArrayList<>();
- for (int i = 0; i < inventory.getSizeInventory(); i++) {
- if (!inventory.getStackInSlot(i).isEmpty()
- && inventory.getStackInSlot(i).getCount() <= itemLimit.get()
- && (mode.is("Полный лут") || filterItem(inventory.getStackInSlot(i).getItem()))) {
- validSlots.add(i);
- }
- }
- if (!validSlots.isEmpty() && timerUtil.isReached(getRandomDelay())) {
- int slotToSteal = validSlots.get(random.nextInt(validSlots.size()));
- if (random.nextInt(100) >= missPercent.get()) {
- mc.playerController.windowClick(container.windowId, slotToSteal, 0, ClickType.QUICK_MOVE, mc.player);
- }
- timerUtil.reset();
- }
- if (chestClose.get() && validSlots.isEmpty()) {
- mc.player.closeScreen();
- }
- }
- }
- }
- private long getRandomDelay() {
- return (long) (minStealDelay.get() + random.nextInt((int) (maxStealDelay.get() - minStealDelay.get())));
- }
- }
Пастите