• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Обход античита AutoTotem EXP 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2025
Сообщения
48
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
 
Последнее редактирование:
прям ты писал
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
дай updateController в PlayerController пж
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
врядли оно че то будет обходить
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
чут чут пахож на чат лгбт
 
только что на рв играл, ахуенно срабатывает, и в инвентаре тоже если лежит
только что на рв играл, ахуенно срабатывает, и в инвентаре тоже если лежит
на рв детект авто тотема нет,зайди на слайм ворлд там вроде лучше детект на авто тотем
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
советую слезть с GPT :D
1751644262329.png
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
и нахуй твой лгбт код?
 
ТВОЙ КОД БЕСПОДОБЕН ПРОДОЛЖАЙ В ТОМ ЖЕ ДУХЕ!
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

Короче, заметил что на экспе, дефолтный автототем тупо плохо работает, и не обходит никакой античит, и за странной работы, без приоритетов и задержек, да и слишком пакетный, спамит, и я решил так как никто не сливал годный


написать более нормальный чуть чатгпт, но обходит античиты
Можно настраивать его работу, задержки там и тд
Так же он более умный, ставит в приоритет тотем который находиться в слотах
а не в инвентаре = если закончились/нету в слоте, берет из инвентаря
короче если будет детектиться, могу скиднуть из вексайда, который перебрасывает из инвентаря в слоты

Ну, а так вроде отлично работает

Пожалуйста, авторизуйтесь для просмотра ссылки.








Код:
Expand Collapse Copy
@FunctionRegister(name = "AutoTotem", type = Category.Combat)
public class AutoTotem extends Function {
    @Override
    public String getDescription() {
        return "Автоматически берет тотем в руку";
    }

    private final SliderSetting healthThreshold = new SliderSetting("Здоровье", 6.0f, 1.0f, 20.0f, 0.5f);
    private final SliderSetting swapDelay = new SliderSetting("Задержка свапа", 150, 100, 500, 25);
    private final SliderSetting randomDelay = new SliderSetting("Случайная задержка", 25, 0, 100, 5);


    private final BooleanSetting returnItem = new BooleanSetting("Возвращать предмет", true);
    private final SliderSetting returnDelay = new SliderSetting("Задержка возврата", 2000, 1000, 5000, 250);
    private final BooleanSetting saveEnchanted = new BooleanSetting("Сохранять зачарованные", true);
    private final BooleanSetting preventBadSwap = new BooleanSetting("Умная замена", true);


    private final ModeListSetting threats = new ModeListSetting("Угрозы",
            new BooleanSetting("Кристаллы", true),
            new BooleanSetting("ТНТ", true),
            new BooleanSetting("Падение", true),
            new BooleanSetting("Низкое ХП", true));

    private final SliderSetting crystalRange = new SliderSetting("Дистанция кристаллов", 6.0f, 3.0f, 10.0f, 0.5f);
    private final SliderSetting fallDistance = new SliderSetting("Дистанция падения", 15.0f, 5.0f, 50.0f, 2.5f);


    private final StopWatch swapTimer = new StopWatch();
    private final StopWatch returnTimer = new StopWatch();
    private final StopWatch antiSpamTimer = new StopWatch();
    private final List<Integer> totemSlots = new ArrayList<>();

    private ItemStack previousOffhandItem = ItemStack.EMPTY;
    private int previousOffhandSlot = -1;
    private boolean totemActive = false;
    private boolean shouldReturn = false;
    private long lastSwapTime = 0;
    private int swapAttempts = 0;
    private boolean isSwapping = false;
    private boolean wasInDanger = false;

    public AutoTotem() {
        addSettings(healthThreshold, swapDelay, randomDelay, returnItem, returnDelay,
                saveEnchanted, preventBadSwap, threats, crystalRange, fallDistance);
    }

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

        updateTotemSlots();

        boolean currentlyInDanger = isInDanger();


        if (currentlyInDanger && !hasTotemInOffhand()) {
            if (canSwapToTotem()) {
                handleTotemSwap();
            }
        }

        else if (!currentlyInDanger && shouldReturn && returnItem.get() &&
                returnTimer.isReached(getReturnDelay()) && !isSwapping) {
            handleItemReturn();
        }

        wasInDanger = currentlyInDanger;
    }

    @Subscribe
    private void onPacket(EventPacket event) {
        if (mc.player == null || mc.world == null) return;


        if (event.isReceive() && event.getPacket() instanceof SEntityStatusPacket packet) {
            if (packet.getOpCode() == 35 && packet.getEntity(mc.world) == mc.player) {
                onTotemActivated();
            }
        }
    }

    @Subscribe
    private void onSpawnEntity(EventSpawnEntity event) {
        if (!threats.getValueByName("Кристаллы").get()) return;
        if (mc.player == null || mc.world == null) return;

        Entity entity = event.getEntity();
        if (entity instanceof EnderCrystalEntity crystal) {
            if (mc.player.getDistance(crystal) <= crystalRange.get()) {
                // by wlayn3x
                if (!hasTotemInOffhand() && canSwapToTotem()) {
                    handleTotemSwap();
                }
            }
        }
    }

    private boolean canSwapToTotem() {

        return !totemSlots.isEmpty() &&
                !isSwapping &&
                antiSpamTimer.isReached(200) &&
                swapTimer.isReached(getRandomizedDelay()) &&
                System.currentTimeMillis() - lastSwapTime >= 300;
    }

    private boolean isInDanger() {
        return isLowHealth() || isDangerous() || isFalling();
    }

    private boolean isLowHealth() {
        if (!threats.getValueByName("Низкое ХП").get()) return false;

        float health = mc.player.getHealth();
        float absorption = mc.player.getAbsorptionAmount();


        if (mc.player.isPotionActive(Effects.ABSORPTION)) {
            health += absorption;
        }

        return health <= healthThreshold.get();
    }

    private boolean isDangerous() {
        if (mc.world == null) return false;

        // Проверка кристаллов
        if (threats.getValueByName("Кристаллы").get()) {
            for (Entity entity : mc.world.getAllEntities()) {
                if (isDangerousEntity(entity)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean isDangerousEntity(Entity entity) {
        float distance = mc.player.getDistance(entity);

        if (entity instanceof EnderCrystalEntity && distance <= crystalRange.get()) {
            return true;
        }

        if (threats.getValueByName("ТНТ").get()) {
            if ((entity instanceof TNTEntity || entity instanceof TNTMinecartEntity)
                    && distance <= 8.0f) {
                return true;
            }
        }

        return false;
    }

    private boolean isFalling() {
        if (!threats.getValueByName("Падение").get()) return false;

        return mc.player.fallDistance >= fallDistance.get() &&
                !mc.player.isInWater() &&
                !mc.player.isElytraFlying() &&
                !mc.player.isOnGround();
    }

    private void handleTotemSwap() {
        if (totemSlots.isEmpty() || mc.currentScreen != null || isSwapping) return;

        int totemSlot = getBestTotemSlot();
        if (totemSlot == -1) return;

        isSwapping = true;

        try {

            if (!hasTotemInOffhand()) {
                ItemStack offhandItem = mc.player.getHeldItemOffhand();
                if (!offhandItem.isEmpty() && offhandItem.getItem() != Items.TOTEM_OF_UNDYING) {
                    previousOffhandItem = offhandItem.copy();
                    previousOffhandSlot = findItemInInventory(offhandItem);
                    shouldReturn = true;
                    returnTimer.reset();
                }
            }


            performSwap(totemSlot, 45);

            lastSwapTime = System.currentTimeMillis();
            swapTimer.reset();
            antiSpamTimer.reset();

        } finally {

            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void handleItemReturn() {
        if (!shouldReturn || previousOffhandItem.isEmpty() || isSwapping) return;


        if (isInDanger()) return;


        if (!hasTotemInOffhand()) {
            shouldReturn = false;
            return;
        }

        isSwapping = true;

        try {
            int itemSlot = findItemInInventory(previousOffhandItem);
            if (itemSlot != -1) {
                performSwap(itemSlot, 45);
            } else {

                int emptySlot = findEmptySlot();
                if (emptySlot != -1) {
                    performSwap(emptySlot, 45);
                }
            }

            shouldReturn = false;
            previousOffhandItem = ItemStack.EMPTY;
            previousOffhandSlot = -1;
            antiSpamTimer.reset();

        } finally {
            new Thread(() -> {
                try {
                    Thread.sleep(100);
                    isSwapping = false;
                } catch (InterruptedException ignored) {}
            }).start();
        }
    }

    private void performSwap(int sourceSlot, int targetSlot) {
        if (sourceSlot == -1 || mc.currentScreen != null) return;

        int windowId = mc.player.container.windowId;
        int adjustedSourceSlot = sourceSlot < 9 ? sourceSlot + 36 : sourceSlot;

        try {

            mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            Thread.sleep(50);
            mc.playerController.windowClick(windowId, targetSlot, 0, ClickType.PICKUP, mc.player);


            if (!mc.player.inventory.getItemStack().isEmpty()) {
                Thread.sleep(50);
                mc.playerController.windowClick(windowId, adjustedSourceSlot, 0, ClickType.PICKUP, mc.player);
            }

            mc.playerController.updateController();
        } catch (Exception e) {

        }
    }

    private void updateTotemSlots() {
        totemSlots.clear();

        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (isValidTotem(stack)) {
                totemSlots.add(i);
            }
        }
    }

    private boolean isValidTotem(ItemStack stack) {
        if (stack.getItem() != Items.TOTEM_OF_UNDYING) return false;


        if (saveEnchanted.get() && stack.isEnchanted()) {

            long normalTotems = totemSlots.stream()
                    .map(i -> mc.player.inventory.getStackInSlot(i))
                    .filter(s -> s.getItem() == Items.TOTEM_OF_UNDYING && !s.isEnchanted())
                    .count();

            return normalTotems == 0;
        }

        return true;
    }

    private int getBestTotemSlot() {
        if (totemSlots.isEmpty()) return -1;


        for (int slot : totemSlots) {
            ItemStack stack = mc.player.inventory.getStackInSlot(slot);
            if (!stack.isEnchanted()) {
                return slot;
            }
        }


        return totemSlots.get(0);
    }

    private boolean hasTotemInOffhand() {
        ItemStack offhandItem = mc.player.getHeldItemOffhand();
        return offhandItem.getItem() == Items.TOTEM_OF_UNDYING;
    }

    private int findItemInInventory(ItemStack targetStack) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (ItemStack.areItemStacksEqual(stack, targetStack)) {
                return i;
            }
        }
        return -1;
    }

    private int findEmptySlot() {
        for (int i = 9; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).isEmpty()) {
                return i;
            }
        }
        return -1;
    }

    private long getRandomizedDelay() {
        long baseDelay = swapDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, randomDelay.get().longValue() + 1);
        return baseDelay + randomOffset;
    }

    private long getReturnDelay() {
        long baseDelay = returnDelay.get().longValue();
        long randomOffset = ThreadLocalRandom.current().nextLong(0, 100);
        return baseDelay + randomOffset;
    }

    private void onTotemActivated() {
        totemActive = true;
        shouldReturn = false;
        isSwapping = false;
        antiSpamTimer.reset();


        if (!totemSlots.isEmpty() && !hasTotemInOffhand()) {
            swapTimer.reset();
        }
    }

    private void reset() {
        totemSlots.clear();
        previousOffhandItem = ItemStack.EMPTY;
        previousOffhandSlot = -1;
        shouldReturn = false;
        totemActive = false;
        lastSwapTime = 0;
        swapAttempts = 0;
        isSwapping = false;
        wasInDanger = false;
        swapTimer.reset();
        returnTimer.reset();
        antiSpamTimer.reset();
    }

    @Override
    public boolean onEnable() {
        super.onEnable();
        if (mc.player != null && mc.world != null) {
            reset();
            return true;
        }
        return false;
    }

    @Override
    public void onDisable() {
        reset();
        super.onDisable();
    }
}
bypa$$ singleplayer
 
Назад
Сверху Снизу