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

Часть функционала AutoEventLoot | 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Ноя 2025
Сообщения
39
Реакции
0
Выберите загрузчик игры
  1. OptiFine
  2. Прочие моды
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
Нюансов много, а так круто
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
ахуеть корм, я токо хотел начинать делать)
Епать + рип
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
блять меня теперь крашит когда с ах выхожу
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
1767180063330.png
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
песня в 1.21.4 добну
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
задумка прикольная но сделал хуйню
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
бля я так переделал просто канфетка еще на 1.21.4
 
Салам югеймовцы сливаю вам AutoEventLoot
Сам ищет ивенты летает лутает и т.д все автоматизировано
Имеются недороботки кому нужно тот доработает
Взял идею у BritvaClient (noad)
Bypass Funtime на SpookyTime не тестил
ВНИМАНИЕ: Включаем в ElytraHelper автопрыжок, биндом свап элитр на h , ChestStealer биндим на k
Когда бот летает не трогайте нечего! а то будет как у меня и у меня феерверков было мало поэтому так быстро тепнулся назад
Не кидайте какашки в меня делал за пару часов еще это только вторая тема
Вам нужно: алмазка з5, 2 стака феерверков, 16 перек, золотая морковь, тотем, и обязательно ботинки на невесомость 4 да и все
И еще у вас должен быть донат игрок иначе не будет работать!
Как пользоваться: настраиваем фунцию: Высота полёта: в какой высоте он будет летать к ивенту, Высота на ивенте: в какой высоте ставить хом в ивенте, Макс. ожидание: ставим 5 мин
Одобрите тему пж <3
Пожалуйста, авторизуйтесь для просмотра ссылки.

code:
Код:
Expand Collapse Copy
///  Zalupa3001
@FunctionRegister(name = "AutoEventLoot", type = Category.Player)
public class AutoEventLoot extends Function {


    private final SliderSetting travelHeightSetting = new SliderSetting("Высота полета (RT)", 400f, 200f, 1000f, 10f);
    private final SliderSetting eventHeightSetting = new SliderSetting("Высота на ивенте", 150f, 100f, 300f, 5f);
    private final SliderSetting maxWaitTimeSetting = new SliderSetting("Макс. ожидание (мин)", 4f, 1f, 30f, 1f);
    private final BooleanSetting elytraHelper = new BooleanSetting("ElytraHelper", true);

    private final List<String> ANARCHY_COMMANDS = Arrays.asList(
            "/an102", "/an103", "/an104", "/an105", "/an106", "/an107",
            "/an203", "/an204", "/an205", "/an206", "/an207", "/an208", "/an209", "/an210", "/an211", "/an212", "/an213", "/an214", "/an215", "/an216", "/an217", "/an218", "/an219", "/an220",
            "/an302", "/an303", "/an304", "/an305", "/an306", "/an307", "/an308", "/an309", "/an310", "/an311",
            "/an502", "/an503", "/an504", "/an505", "/an506", "/an507",
            "/an602", "/an603"
    );

    private final List<String> IGNORED_EVENTS = Arrays.asList(
            "Сундук смерти", "Адская резня", "Вулкан", "Загадочный маяк"
    );

    private enum State {
        SEARCHING, WAITING_EVENT, FOUND_EVENT_WAIT, PRE_TRAVEL_RP, PREPARING_FLIGHT,
        TAKING_OFF, TRAVELING, SETTING_HOME,
        WAITING_OPEN,
        EXECUTING_RTP,
        RTP_WAIT,
        HOME_AND_FLY,
        OPENING_CHEST,
        LOOTING, ESCAPING
    }

    private State state = State.SEARCHING;
    private final StopWatch timer = new StopWatch();
    private final StopWatch fireworkTimer = new StopWatch();
    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch afkTimer = new StopWatch();

    private int anarchyIndex = 0;
    private BlockPos eventPos = null;
    private long openTimeMillis = 0;
    private boolean isHomeSet = false;
    private boolean chestStealerToggled = false;
    private boolean pearlThrown = false;
    private boolean armorSwappedAfterPearl = false;

    private boolean currentServerIsBad = false;
    private boolean sentDelayCommand = false;
    private boolean spawnCommandSent = false;
    private boolean forceSkip = false;

    private final Pattern COORD_PATTERN = Pattern.compile("(?:\\[|:)\\s*(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)\\s*]?");
    private final Pattern TIME_MIN = Pattern.compile("(\\d+)\\s*мин");
    private final Pattern TIME_SEC = Pattern.compile("(\\d+)\\s*сек");

    private final int KEY_K = GLFW.GLFW_KEY_K;

    public AutoEventLoot() {
        addSettings(travelHeightSetting, eventHeightSetting, maxWaitTimeSetting, elytraHelper);
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        log(TextFormatting.GREEN + "Начинаю поиск ивентов...");
        reset();
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        if (chestStealerToggled) {
            pressKey(KEY_K);
            chestStealerToggled = false;
        }
        mc.gameSettings.keyBindUseItem.setPressed(false);
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
    }

    private void reset() {
        state = State.SEARCHING;
        anarchyIndex = 0;
        eventPos = null;
        openTimeMillis = 0;
        isHomeSet = false;
        chestStealerToggled = false;
        pearlThrown = false;
        armorSwappedAfterPearl = false;
        currentServerIsBad = false;
        sentDelayCommand = false;
        spawnCommandSent = false;
        forceSkip = false;
        timer.reset();
    }

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

        if (mc.player.getHeldItemMainhand().isEmpty() || mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
            ensureFireworks();
        }

        switch (state) {
            case SEARCHING -> {
                if (timer.isReached(2500) && !sentDelayCommand && !forceSkip) {
                    mc.player.sendChatMessage("/event delay");
                    sentDelayCommand = true;
                }
                if (timer.isReached(4500) || forceSkip) {
                    if (anarchyIndex >= ANARCHY_COMMANDS.size()) anarchyIndex = 0;
                    String cmd = ANARCHY_COMMANDS.get(anarchyIndex);
                    mc.player.sendChatMessage(cmd);
                    currentServerIsBad = false; sentDelayCommand = false; eventPos = null; forceSkip = false;
                    anarchyIndex++;
                    timer.reset();
                }
            }

            case WAITING_EVENT -> {
                if (timer.isReached(10000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }
            }

            case FOUND_EVENT_WAIT -> {
                if (timer.isReached(2000)) {
                    log("Появился ивент, летаю!");
                    mc.player.sendChatMessage("/rp");
                    state = State.PRE_TRAVEL_RP;
                    timer.reset();
                }
            }

            case PRE_TRAVEL_RP -> {
                if (timer.isReached(7500)) {
                    state = State.PREPARING_FLIGHT;
                    timer.reset();
                }
            }

            case PREPARING_FLIGHT -> {
                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                } else {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                        return;
                    }
                }

                ensureFireworks();
                if (mc.player.getHeldItemMainhand().getItem() != Items.FIREWORK_ROCKET) {
                    log("Нет фейерверков! Отключаюсь.");
                    toggle();
                    return;
                }

                state = State.TAKING_OFF;
                timer.reset();
            }

            case TAKING_OFF -> {
                mc.player.rotationPitch = -20;
                if (elytraHelper.get()) {
                    if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    } else {
                        if (mc.player.isOnGround()) mc.player.jump();
                    }
                } else {
                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                        timer.reset();
                    } else if (mc.player.fallDistance > 0 && !mc.player.isElytraFlying()) {
                        if (timer.isReached(200)) {
                            mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                            timer.reset();
                        }
                    } else if (mc.player.isElytraFlying()) {
                        if (fireworkTimer.isReached(500)) {
                            useFirework();
                            fireworkTimer.reset();
                            state = State.TRAVELING;
                        }
                    }
                }
            }

            case TRAVELING -> {
                if (eventPos == null) {
                    state = State.WAITING_EVENT;
                    return;
                }

                if (!mc.player.isElytraFlying() && mc.player.isOnGround()) {
                    state = State.TAKING_OFF;
                    return;
                }

                if (mc.player.isElytraFlying() && fireworkTimer.isReached(7000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                double dist = Math.sqrt(mc.player.getDistanceSq(eventPos.getX(), mc.player.getPosY(), eventPos.getZ()));
                float travelY = travelHeightSetting.get().floatValue();
                float eventY = eventHeightSetting.get().floatValue();

                lookAtPos(eventPos.getX(), eventPos.getZ());

                if (dist > 100) {
                    if (mc.player.getPosY() < travelY) {
                        mc.player.rotationPitch = -15;
                    } else {
                        mc.player.rotationPitch = 0;
                    }
                } else {
                    if (mc.player.getPosY() > eventY + 5) {
                        mc.player.rotationPitch = 20;
                    } else {
                        mc.player.sendChatMessage("/sethome Zalupa3001");
                        isHomeSet = true;
                        state = State.SETTING_HOME;
                        spawnCommandSent = false;
                        timer.reset();
                    }
                }
            }

            case SETTING_HOME -> {
                mc.player.rotationPitch = -90;
                if (!mc.player.isElytraFlying() && !mc.player.isOnGround()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                }
                if (fireworkTimer.isReached(1000)) {
                    useFirework();
                    fireworkTimer.reset();
                }

                if (!spawnCommandSent) {
                    if (timer.isReached(500)) {
                        mc.player.sendChatMessage("/spawn");
                        spawnCommandSent = true;
                        timer.reset();
                    }
                }
                else {
                    if (timer.isReached(7500)) {
                        state = State.WAITING_OPEN;
                        mc.player.sendChatMessage("/event delay");
                        afkTimer.reset();
                        timer.reset();
                    }
                }
            }

            case WAITING_OPEN -> {
                handleAntiAFK();

                if (timer.isReached(5000)) {
                    mc.player.sendChatMessage("/event delay");
                    timer.reset();
                }

                if (openTimeMillis > 0) {
                    long timeLeft = openTimeMillis - System.currentTimeMillis();

                    if (timeLeft <= 20000) {
                        state = State.EXECUTING_RTP;

                        mc.gameSettings.keyBindForward.setPressed(false);
                        mc.gameSettings.keyBindBack.setPressed(false);
                        timer.reset();
                    }
                }
            }

            case EXECUTING_RTP -> {
                mc.player.sendChatMessage("/rtp");
                state = State.RTP_WAIT;
                timer.reset();
            }

            case RTP_WAIT -> {

                if (timer.isReached(8000)) {
                    mc.player.sendChatMessage("/home Zalupa3001");
                    state = State.HOME_AND_FLY;
                    pearlThrown = false;
                    armorSwappedAfterPearl = false;
                    timer.reset();
                }


                if (mc.player.inventory.armorItemInSlot(2).getItem() != Items.ELYTRA) {
                    if (swapTimer.isReached(500)) {
                        equipItem(Items.ELYTRA, 6);
                        swapTimer.reset();
                    }
                }
            }

            case HOME_AND_FLY -> {
                mc.player.rotationPitch = -90;


                if (mc.player.isElytraFlying()) {
                    if (fireworkTimer.isReached(300)) {
                        useFirework();
                        fireworkTimer.reset();
                    }
                } else {

                    if (mc.player.isOnGround()) {
                        mc.player.jump();
                    } else {

                        mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.START_FALL_FLYING));
                        useFirework();
                    }
                }


                if (timer.isReached(6000) && !pearlThrown) {
                    throwPearlUp();
                    pearlThrown = true;
                }


                if (timer.isReached(6200) && pearlThrown && !armorSwappedAfterPearl) {
                    if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                            armorSwappedAfterPearl = true;
                        }
                    }
                }


                if (timer.isReached(7500)) {
                    state = State.OPENING_CHEST;
                    swapTimer.reset();
                }
            }

            case OPENING_CHEST -> {

                if (mc.player.inventory.armorItemInSlot(2).getItem() == Items.ELYTRA) {
                    if (swapTimer.isReached(200)) {
                        int chestSlot = findArmor();
                        if (chestSlot != -1) {
                            equipItem(mc.player.inventory.getStackInSlot(chestSlot).getItem(), 6);
                        }
                        swapTimer.reset();
                    }
                }


                if (!chestStealerToggled) {
                    pressKey(KEY_K);
                    chestStealerToggled = true;
                }

                BlockPos ec = findNearestBlock(Blocks.ENDER_CHEST, 5);
                if (ec != null) {
                    lookAtPos(ec.getX() + 0.5, ec.getZ() + 0.5);
                    mc.player.rotationPitch = 50;

                    if (swapTimer.isReached(200)) {
                        BlockRayTraceResult ray = new BlockRayTraceResult(new Vector3d(ec.getX() + 0.5, ec.getY() + 0.5, ec.getZ() + 0.5), net.minecraft.util.Direction.UP, ec, false);
                        mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, ray);
                        mc.player.swingArm(Hand.MAIN_HAND);
                        swapTimer.reset();
                    }
                }

                if (mc.currentScreen != null) {
                    state = State.LOOTING;
                    timer.reset();
                }
            }

            case LOOTING -> {
                if (timer.isReached(10000)) {
                    if (!isPvpBossbarActive()) {
                        state = State.ESCAPING;
                    }
                }
            }

            case ESCAPING -> {
                mc.player.sendChatMessage("/delhome Zalupa3001");
                mc.player.sendChatMessage("/hub");
                log("Ивент окончен.");
                pressKey(KEY_K);
                chestStealerToggled = false;
                toggle();
            }
        }
    }


    private void handleAntiAFK() {
        if (afkTimer.isReached(30000)) {
            if (!afkTimer.isReached(30500)) {
                mc.gameSettings.keyBindForward.setPressed(true);
                mc.gameSettings.keyBindBack.setPressed(false);
            }
            else if (!afkTimer.isReached(31000)) {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(true);
            }
            else {
                mc.gameSettings.keyBindForward.setPressed(false);
                mc.gameSettings.keyBindBack.setPressed(false);
                afkTimer.reset();
            }
        } else {
            mc.gameSettings.keyBindForward.setPressed(false);
            mc.gameSettings.keyBindBack.setPressed(false);
        }
    }

    private void ensureFireworks() {
        int rocketSlot = findItem(Items.FIREWORK_ROCKET);
        if (rocketSlot != -1) {
            if (rocketSlot < 9) {
                mc.player.inventory.currentItem = rocketSlot;
            } else {
                mc.playerController.windowClick(0, rocketSlot, mc.player.inventory.currentItem, 2, mc.player);
            }
        }
    }

    private void equipItem(net.minecraft.item.Item item, int armorSlot) {
        int slot = findItem(item);
        if (slot != -1) {
            if (slot < 9) slot += 36;
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, armorSlot, 0, ClickType.PICKUP, mc.player);
            mc.playerController.windowClick(0, slot, 0, ClickType.PICKUP, mc.player);
        }
    }

    private int findArmor() {
        for (int i = 0; i < 36; i++) {
            net.minecraft.item.ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == Items.NETHERITE_CHESTPLATE || stack.getItem() == Items.DIAMOND_CHESTPLATE) {
                return i < 9 ? i + 36 : i;
            }
        }
        return -1;
    }

    private void useFirework() {
        ensureFireworks();
        if (mc.player.getHeldItemMainhand().getItem() == Items.FIREWORK_ROCKET) {
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
        }
    }

    private void pressKey(int keyCode) {
        InputMappings.Input input = InputMappings.getInputByCode(keyCode, 0);
        KeyBinding.setKeyBindState(input, true);
        KeyBinding.onTick(input);
        KeyBinding.setKeyBindState(input, false);
    }

    @Subscribe
    public void onPacket(EventPacket e) {
        if (e.getType() == EventPacket.Type.RECEIVE) {
            IPacket<?> packet = e.getPacket();

            if (packet instanceof SChatPacket) {
                String text = ((SChatPacket) packet).getChatComponent().getString();
                String rawText = TextFormatting.getTextWithoutFormattingCodes(text);
                String cleanText = rawText.toLowerCase().replace("ё", "е");

                if (currentServerIsBad && state == State.SEARCHING) return;

                for (String badEvent : IGNORED_EVENTS) {
                    if (rawText.contains(badEvent)) {
                        log("Плохой ивент (" + badEvent + "), скипаю сервер.");
                        triggerSkip();
                        return;
                    }
                }

                if (cleanText.contains("сундуки открыты")) {
                    log("Сундуки уже открыты, скипаю сервер.");
                    triggerSkip();
                    return;
                }

                if (cleanText.contains("до следующего ивента") ||
                        cleanText.contains("начнется через") ||
                        cleanText.contains("до активации") ||
                        cleanText.contains("до открытия")) {

                    long millisToAdd = parseTime(cleanText);

                    if (millisToAdd > 0) {
                        if (cleanText.contains("сундуки закрыты") || cleanText.contains("до активации")) {
                            openTimeMillis = System.currentTimeMillis() + millisToAdd;
                        }
                        else if (state == State.SEARCHING) {
                            long minutesLeft = millisToAdd / 1000 / 60;
                            if (minutesLeft >= maxWaitTimeSetting.get()) {
                                triggerSkip(); return;
                            } else {
                                state = State.WAITING_EVENT;
                                log("Ивент найден! Ждем.");
                            }
                        }
                    }
                }

                Matcher coords = COORD_PATTERN.matcher(rawText);
                if (coords.find()) {
                    if (currentServerIsBad) return;
                    int x = Integer.parseInt(coords.group(1));
                    int y = Integer.parseInt(coords.group(2));
                    int z = Integer.parseInt(coords.group(3));
                    eventPos = new BlockPos(x, y, z);
                    log("Координаты: " + x + " " + y + " " + z);
                    if (state == State.SEARCHING || state == State.WAITING_EVENT) {
                        state = State.FOUND_EVENT_WAIT;
                        timer.reset();
                    }
                }
            }
        }
    }

    private void triggerSkip() {
        currentServerIsBad = true;
        state = State.SEARCHING;
        forceSkip = true;
    }

    private long parseTime(String text) {
        long totalMillis = 0;
        Matcher mMin = TIME_MIN.matcher(text);
        if (mMin.find()) totalMillis += Integer.parseInt(mMin.group(1)) * 60000L;
        Matcher mSec = TIME_SEC.matcher(text);
        if (mSec.find()) totalMillis += Integer.parseInt(mSec.group(1)) * 1000L;
        return totalMillis;
    }

    private boolean isPvpBossbarActive() {
        if (mc.ingameGUI.getBossOverlay() == null) return false;
        try {
            Field field = null;
            try {
                field = BossOverlayGui.class.getDeclaredField("mapBossInfos");
            } catch (NoSuchFieldException e) {
                field = BossOverlayGui.class.getDeclaredField("field_184060_g");
            }

            if (field != null) {
                field.setAccessible(true);
                Map<UUID, ClientBossInfo> map = (Map<UUID, ClientBossInfo>) field.get(mc.ingameGUI.getBossOverlay());
                return map.values().stream()
                        .anyMatch(info -> TextFormatting.getTextWithoutFormattingCodes(info.getName().getString()).contains("PvP"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private BlockPos findNearestBlock(net.minecraft.block.Block block, int range) {
        BlockPos p = mc.player.getPosition();
        for (int x = -range; x <= range; x++) {
            for (int y = -range; y <= range; y++) {
                for (int z = -range; z <= range; z++) {
                    BlockPos target = p.add(x, y, z);
                    if (mc.world.getBlockState(target).getBlock() == block) return target;
                }
            }
        }
        return null;
    }

    private int findItem(net.minecraft.item.Item item) {
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) return i;
        }
        return -1;
    }

    private void lookAtPos(double x, double z) {
        double dx = x - mc.player.getPosX();
        double dz = z - mc.player.getPosZ();
        float yaw = (float) (Math.atan2(dz, dx) * 180.0D / Math.PI) - 90.0F;
        mc.player.rotationYaw = yaw;
    }

    private void throwPearlUp() {
        int slot = findItem(Items.ENDER_PEARL);
        if (slot != -1) {
            float oldPitch = mc.player.rotationPitch;
            mc.player.rotationPitch = -90;
            int prevSlot = mc.player.inventory.currentItem;
            if (slot < 9) {
                mc.player.inventory.currentItem = slot;
            } else {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            }
            mc.playerController.processRightClick(mc.player, mc.world, Hand.MAIN_HAND);
            if (slot >= 9) {
                mc.playerController.windowClick(0, slot, mc.player.inventory.currentItem, 2, mc.player);
            } else {
                mc.player.inventory.currentItem = prevSlot;
            }
            mc.player.rotationPitch = oldPitch;
        }
    }

    private void log(String msg) {
        if (mc.player != null) {
            mc.player.sendMessage(new net.minecraft.util.text.StringTextComponent(
                    TextFormatting.GRAY + "[" + TextFormatting.RED + "Expensive AutoEventLoot" + TextFormatting.GRAY + "] " + TextFormatting.WHITE + msg
            ), mc.player.getUniqueID());
        }
    }
}
гпт код + хуй работает, смысл сливать такое, хоть сс норм бы слил, если с таким кодом вообще можно сделать что-то "норм".
 
Назад
Сверху Снизу