Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала Auto Kit | BravoHVH (noad)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
3 Мар 2026
Сообщения
8
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
Сделал такую штуку что оно типо пишет /kit и название, потом /ec , складывает туда выбранные предметы чистит инв и берёт следующий кит, можно так надюпать чарок,силок 3, в общем норм функция
Java:
Expand Collapse Copy
package twixdlc.functions.impl.misc;

import twixdlc.events.EventTarget;
import twixdlc.events.EventUpdate;
import twixdlc.functions.api.Category;
import twixdlc.functions.api.Function;
import twixdlc.functions.api.FunctionRegister;
import twixdlc.functions.settings.Setting;
import twixdlc.functions.settings.impl.BooleanSetting;
import twixdlc.functions.settings.impl.ModeListSetting;
import twixdlc.functions.settings.impl.SliderSetting;
import twixdlc.utils.math.StopWatch;
import java.util.Locale;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;

@FunctionRegister(
        name = "Auto Kit",
        description = "Берет киты, складывает выбранные предметы в /ec и чистит инвентарь.",
        type = Category.Miscellaneous
)
public class AutoKit extends Function {
    private static final String[] KIT_COMMANDS = new String[]{
            "/kit free",
            "/kit hero",
            "/kit prince",
            "/kit killer",
            "/kit krushitel",
            "/kit kraken",
            "/kit alpha",
            "/kit rabbit",
            "/kit sponsor",
            "/kit pumpkin"
    };
    private static final String[] KIT_NAMES = new String[]{
            "free",
            "hero",
            "prince",
            "killer",
            "krushitel",
            "kraken",
            "alpha",
            "rabbit",
            "sponsor",
            "pumpkin"
    };

    private final ModeListSetting kitsMode = new ModeListSetting(
            "Киты",
            new BooleanSetting("free", true),
            new BooleanSetting("hero", true),
            new BooleanSetting("prince", true),
            new BooleanSetting("killer", true),
            new BooleanSetting("krushitel", true),
            new BooleanSetting("kraken", true),
            new BooleanSetting("alpha", true),
            new BooleanSetting("rabbit", true),
            new BooleanSetting("sponsor", true),
            new BooleanSetting("pumpkin", true)
    );

    private final ModeListSetting itemMode = new ModeListSetting(
            "Предметы в /ec",
            new BooleanSetting("Зелье Викинга", true),
            new BooleanSetting("Чарка", true),
            new BooleanSetting("Ангел Хранитель", true)
    );
    private final SliderSetting delayMs = new SliderSetting("Задержка (мс)", 700.0F, 250.0F, 3000.0F, 50.0F);

    private final StopWatch timer = new StopWatch();
    private int kitIndex;
    private Stage stage = Stage.KITS;
    private int ecReopenAttempts;
    private boolean firstTick;

    private enum Stage {
        KITS,
        OPEN_EC,
        MOVE_ITEMS_TO_EC,
        CI_1,
        CI_2,
        DONE
    }

    public AutoKit() {
        this.addSettings(new Setting[]{this.kitsMode, this.itemMode, this.delayMs});
    }

    @Override
    public void onEnable() {
        super.onEnable();
        this.kitIndex = 0;
        this.stage = Stage.KITS;
        this.ecReopenAttempts = 0;
        this.firstTick = true;
        this.timer.reset();
    }

    @EventTarget
    public void onUpdate(EventUpdate e) {
        if (mc.player == null || mc.world == null) return;

        if (this.firstTick) {
            this.firstTick = false;
            this.timer.setLastMS(-(long)this.delayMs.get().floatValue());
        }

        if (!this.timer.isReached((long)this.delayMs.get().floatValue())) return;
        this.timer.reset();

        switch (this.stage) {
            case KITS:
                String nextKitCommand = getNextSelectedKitCommand();
                if (nextKitCommand != null) {
                    mc.player.sendChatMessage(nextKitCommand);
                    this.stage = Stage.OPEN_EC;
                    this.ecReopenAttempts = 0;
                } else {
                    this.stage = Stage.DONE;
                }
                break;

            case OPEN_EC:
                mc.player.sendChatMessage("/ec");
                this.stage = Stage.MOVE_ITEMS_TO_EC;
                break;

            case MOVE_ITEMS_TO_EC:
                if (mc.player.openContainer == null || mc.player.openContainer.windowId == 0) {
                    if (this.ecReopenAttempts++ < 3) {
                        mc.player.sendChatMessage("/ec");
                    } else {
                        this.stage = Stage.CI_1;
                    }
                    break;
                }

                moveSelectedItemsToEc();
                mc.player.closeScreen();
                this.stage = Stage.CI_1;
                break;

            case CI_1:
                mc.player.sendChatMessage("/ci");
                this.stage = Stage.CI_2;
                break;

            case CI_2:
                mc.player.sendChatMessage("/ci");
                this.stage = Stage.KITS;
                break;

            case DONE:
                this.toggle();
                break;
        }
    }

    private void moveSelectedItemsToEc() {
        for (Slot slot : mc.player.openContainer.inventorySlots) {
            if (slot == null || slot.inventory != mc.player.inventory || !slot.getHasStack()) continue;
            ItemStack stack = slot.getStack();
            if (stack == null || stack.isEmpty()) continue;

            String name = stack.getDisplayName().getString().toLowerCase(Locale.ROOT);
            if (!shouldMoveByMode(stack, name)) continue;

            mc.playerController.windowClick(
                    mc.player.openContainer.windowId,
                    slot.slotNumber,
                    0,
                    ClickType.QUICK_MOVE,
                    mc.player
            );
        }
    }

    private boolean shouldMoveByMode(ItemStack stack, String lowerName) {
        boolean isViking = lowerName.contains("зелье викинга");
        boolean isChar = stack.getItem() == Items.ENCHANTED_GOLDEN_APPLE;
        boolean isTotem = lowerName.contains("ангел хранитель");

        boolean pickViking = this.itemMode.getValueByName("Зелье Викинга") != null && this.itemMode.getValueByName("Зелье Викинга").get();
        boolean pickChar = this.itemMode.getValueByName("Чарка") != null && this.itemMode.getValueByName("Чарка").get();
        boolean pickTotem = this.itemMode.getValueByName("Ангел Хранитель") != null && this.itemMode.getValueByName("Ангел Хранитель").get();

        if (pickViking && isViking) return true;
        if (pickChar && isChar) return true;
        if (pickTotem && isTotem) return true;
        return false;
    }

    private String getNextSelectedKitCommand() {
        while (this.kitIndex < KIT_COMMANDS.length) {
            int idx = this.kitIndex++;
            BooleanSetting enabled = this.kitsMode.getValueByName(KIT_NAMES[idx]);
            if (enabled != null && enabled.get()) {
                return KIT_COMMANDS[idx];
            }
        }
        return null;
    }
}
 
Назад
Сверху Снизу