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

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

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

Обход античита AutoTotem EXP 3.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();
    }
}
чел ти моя аватарка украсть
 
ну кабута нормек
 
ЖДУ АВТОСВАП ЛЮБИМЫЙ!
 
зачем нам этот высер, да даже в обычной блядской экспе его до адекватности довести дело 5 минут
 
в чем прикол я чет не понял
 
зачем нам этот высер, да даже в обычной блядской экспе его до адекватности довести дело 5 минут
"нам" :kekw: ты настолько легко б довел до адекватности за 5 минут, что аж не бежал бы на югейм спрашивать как фиксануть киллку
 
чел ти моя аватарка украсть

во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

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


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

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

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








Код:
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();
    }
}
я вроде бы все импортировал но не знаю что делать с @override? оно не импортируется, когда ставлю @Subscribe не работает авто тотем. ansoft_terpish дс мой помоги пожалуйста если не трудно, знаю что я лох и тд не умею пастить
 
во первых паимоналетка, добавлю не сейчас, во вторых не удаляй, будет актив я сделаю

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


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

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

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








Код:
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();
    }
}
ну чекни свой мега крутой $$elfcode авто тотем на пт каком нибудь, тебя интейв нахуй пошлет из за ClickType.PICKUP, да и стопов у тебя нету, о обходе чего идет речь
 
И что тут изменено?

ну чекни свой мега крутой $$elfcode авто тотем на пт каком нибудь, тебя интейв нахуй пошлет из за ClickType.PICKUP, да и стопов у тебя нету, о обходе чего идет речь
проверял на рв, фт, даже на твоем лююимом простотрейнере на фс, спукитайме везде работает, не проверял лишь на холике, но сомневаюсь что там не работает, а ты позорник, не проверив пишешь про что то, я бы не сливал, если б его банило, не свапало или же кикало, тебе не привыкать писать хуже идти на югейм со своими знаниями, и писать ыыыы нахуй интейв пошлет, лив с форума
 
Назад
Сверху Снизу