Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Помогите пофиксить автосвап на Expensive 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2024
Сообщения
134
Реакции
0
у меня есть авто свап но он не свапает тотем на тотем или сферу на сферу


Java:
Expand Collapse Copy
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import net.minecraft.util.MovementInput;
import net.minecraft.util.MovementInputFromOptions;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
    final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
    final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
    final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
    final StopWatch stopWatch = new StopWatch();
    boolean shieldIsCooldown;
    int oldItem = -1;

    final StopWatch delay = new StopWatch();
    final AutoTotem autoTotem;

    public AutoSwap(AutoTotem autoTotem) {
        this.autoTotem = autoTotem;
        addSettings(swapMode, itemType, swapType, keyToSwap, health);
    }

    @Subscribe
    public void onEventKey(EventKey e) {
        if (!swapMode.is("По бинду")) {
            return;
        }

        ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
        boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

        if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
            Item currentItem = offhandItemStack.getItem();
            boolean isHoldingSwapItem = currentItem == getSwapItem();
            boolean isHoldingSelectedItem = currentItem == getSelectedItem();
            int selectedItemSlot = getSlot(getSelectedItem());
            int swapItemSlot = getSlot(getSwapItem());

            if (selectedItemSlot >= 0) {
                if (!isHoldingSelectedItem) {
                    InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                    return;
                }
            }
            if (swapItemSlot >= 0) {
                if (!isHoldingSwapItem) {
                    InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                }
            }
        }
    }

    @Subscribe
    private void onCooldown(EventCooldown e) {
        shieldIsCooldown = isCooldown(e);
    }

    @Subscribe
    private void onUpdate(EventUpdate e) {
        if (!swapMode.is("Умный")) {
            return;
        }

        Item currentItem = mc.player.getHeldItemOffhand().getItem();

        if (stopWatch.isReached(400L)) {
            swapIfShieldIsBroken(currentItem);
            swapIfHealthToLow(currentItem);
            stopWatch.reset();
        }
        boolean isRightClickWithGoldenAppleActive = false;

        if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
            isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
        }


        if (isRightClickWithGoldenAppleActive) {
            stopWatch.reset();
        }
    }

    @Override
    public void onDisable() {
        shieldIsCooldown = false;
        oldItem = -1;
        super.onDisable();
    }

    private void swapIfHealthToLow(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown || !gappleIsNotCooldown) {
            return;
        }

        if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
        } else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private void swapIfShieldIsBroken(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
            print(shieldIsCooldown + "");
        } else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private boolean isLowHealth() {
        float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
        return currentHealth <= health.get();
    }

    private boolean isCooldown(EventCooldown cooldown) {
        Item item = cooldown.getItem();


        if (!itemType.is("Shield")) {
            return false;
        } else {
            return cooldown.isAdded() && item instanceof ShieldItem;
        }
    }

    private Item getSwapItem() {
        return getItemByType(swapType.get());
    }

    private Item getSelectedItem() {
        return getItemByType(itemType.get());
    }

    private Item getItemByType(String itemType) {
        return switch (itemType) {
            case "Щит" -> Items.SHIELD;
            case "Тотем" -> Items.TOTEM_OF_UNDYING;
            case "Геплы" -> Items.GOLDEN_APPLE;
            case "Шар" -> Items.PLAYER_HEAD;
            default -> Items.AIR;
        };
    }

    private int getSlot(Item item) {
        int finalSlot = -1;
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
                if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
                    finalSlot = i;
                    break;
                } else {
                    finalSlot = i;
                }
            }
        }
        if (finalSlot < 9 && finalSlot != -1) {
            finalSlot = finalSlot + 36;
        }
        return finalSlot;
    }
}
 
у меня есть авто свап но он не свапает тотем на тотем или сферу на сферу


Java:
Expand Collapse Copy
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import net.minecraft.util.MovementInput;
import net.minecraft.util.MovementInputFromOptions;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
    final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
    final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
    final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
    final StopWatch stopWatch = new StopWatch();
    boolean shieldIsCooldown;
    int oldItem = -1;

    final StopWatch delay = new StopWatch();
    final AutoTotem autoTotem;

    public AutoSwap(AutoTotem autoTotem) {
        this.autoTotem = autoTotem;
        addSettings(swapMode, itemType, swapType, keyToSwap, health);
    }

    @Subscribe
    public void onEventKey(EventKey e) {
        if (!swapMode.is("По бинду")) {
            return;
        }

        ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
        boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

        if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
            Item currentItem = offhandItemStack.getItem();
            boolean isHoldingSwapItem = currentItem == getSwapItem();
            boolean isHoldingSelectedItem = currentItem == getSelectedItem();
            int selectedItemSlot = getSlot(getSelectedItem());
            int swapItemSlot = getSlot(getSwapItem());

            if (selectedItemSlot >= 0) {
                if (!isHoldingSelectedItem) {
                    InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                    return;
                }
            }
            if (swapItemSlot >= 0) {
                if (!isHoldingSwapItem) {
                    InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                }
            }
        }
    }

    @Subscribe
    private void onCooldown(EventCooldown e) {
        shieldIsCooldown = isCooldown(e);
    }

    @Subscribe
    private void onUpdate(EventUpdate e) {
        if (!swapMode.is("Умный")) {
            return;
        }

        Item currentItem = mc.player.getHeldItemOffhand().getItem();

        if (stopWatch.isReached(400L)) {
            swapIfShieldIsBroken(currentItem);
            swapIfHealthToLow(currentItem);
            stopWatch.reset();
        }
        boolean isRightClickWithGoldenAppleActive = false;

        if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
            isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
        }


        if (isRightClickWithGoldenAppleActive) {
            stopWatch.reset();
        }
    }

    @Override
    public void onDisable() {
        shieldIsCooldown = false;
        oldItem = -1;
        super.onDisable();
    }

    private void swapIfHealthToLow(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown || !gappleIsNotCooldown) {
            return;
        }

        if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
        } else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private void swapIfShieldIsBroken(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
            print(shieldIsCooldown + "");
        } else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private boolean isLowHealth() {
        float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
        return currentHealth <= health.get();
    }

    private boolean isCooldown(EventCooldown cooldown) {
        Item item = cooldown.getItem();


        if (!itemType.is("Shield")) {
            return false;
        } else {
            return cooldown.isAdded() && item instanceof ShieldItem;
        }
    }

    private Item getSwapItem() {
        return getItemByType(swapType.get());
    }

    private Item getSelectedItem() {
        return getItemByType(itemType.get());
    }

    private Item getItemByType(String itemType) {
        return switch (itemType) {
            case "Щит" -> Items.SHIELD;
            case "Тотем" -> Items.TOTEM_OF_UNDYING;
            case "Геплы" -> Items.GOLDEN_APPLE;
            case "Шар" -> Items.PLAYER_HEAD;
            default -> Items.AIR;
        };
    }

    private int getSlot(Item item) {
        int finalSlot = -1;
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
                if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
                    finalSlot = i;
                    break;
                } else {
                    finalSlot = i;
                }
            }
        }
        if (finalSlot < 9 && finalSlot != -1) {
            finalSlot = finalSlot + 36;
        }
        return finalSlot;
    }
}
там 1 строчкой фикс..
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
у меня есть авто свап но он не свапает тотем на тотем или сферу на сферу


Java:
Expand Collapse Copy
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import net.minecraft.util.MovementInput;
import net.minecraft.util.MovementInputFromOptions;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
    final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
    final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
    final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
    final StopWatch stopWatch = new StopWatch();
    boolean shieldIsCooldown;
    int oldItem = -1;

    final StopWatch delay = new StopWatch();
    final AutoTotem autoTotem;

    public AutoSwap(AutoTotem autoTotem) {
        this.autoTotem = autoTotem;
        addSettings(swapMode, itemType, swapType, keyToSwap, health);
    }

    @Subscribe
    public void onEventKey(EventKey e) {
        if (!swapMode.is("По бинду")) {
            return;
        }

        ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
        boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

        if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
            Item currentItem = offhandItemStack.getItem();
            boolean isHoldingSwapItem = currentItem == getSwapItem();
            boolean isHoldingSelectedItem = currentItem == getSelectedItem();
            int selectedItemSlot = getSlot(getSelectedItem());
            int swapItemSlot = getSlot(getSwapItem());

            if (selectedItemSlot >= 0) {
                if (!isHoldingSelectedItem) {
                    InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                    return;
                }
            }
            if (swapItemSlot >= 0) {
                if (!isHoldingSwapItem) {
                    InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                }
            }
        }
    }

    @Subscribe
    private void onCooldown(EventCooldown e) {
        shieldIsCooldown = isCooldown(e);
    }

    @Subscribe
    private void onUpdate(EventUpdate e) {
        if (!swapMode.is("Умный")) {
            return;
        }

        Item currentItem = mc.player.getHeldItemOffhand().getItem();

        if (stopWatch.isReached(400L)) {
            swapIfShieldIsBroken(currentItem);
            swapIfHealthToLow(currentItem);
            stopWatch.reset();
        }
        boolean isRightClickWithGoldenAppleActive = false;

        if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
            isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
        }


        if (isRightClickWithGoldenAppleActive) {
            stopWatch.reset();
        }
    }

    @Override
    public void onDisable() {
        shieldIsCooldown = false;
        oldItem = -1;
        super.onDisable();
    }

    private void swapIfHealthToLow(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown || !gappleIsNotCooldown) {
            return;
        }

        if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
        } else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private void swapIfShieldIsBroken(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
            print(shieldIsCooldown + "");
        } else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private boolean isLowHealth() {
        float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
        return currentHealth <= health.get();
    }

    private boolean isCooldown(EventCooldown cooldown) {
        Item item = cooldown.getItem();


        if (!itemType.is("Shield")) {
            return false;
        } else {
            return cooldown.isAdded() && item instanceof ShieldItem;
        }
    }

    private Item getSwapItem() {
        return getItemByType(swapType.get());
    }

    private Item getSelectedItem() {
        return getItemByType(itemType.get());
    }

    private Item getItemByType(String itemType) {
        return switch (itemType) {
            case "Щит" -> Items.SHIELD;
            case "Тотем" -> Items.TOTEM_OF_UNDYING;
            case "Геплы" -> Items.GOLDEN_APPLE;
            case "Шар" -> Items.PLAYER_HEAD;
            default -> Items.AIR;
        };
    }

    private int getSlot(Item item) {
        int finalSlot = -1;
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
                if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
                    finalSlot = i;
                    break;
                } else {
                    finalSlot = i;
                }
            }
        }
        if (finalSlot < 9 && finalSlot != -1) {
            finalSlot = finalSlot + 36;
        }
        return finalSlot;
    }
}
в кратце:

во первых замени все проверки на конкретные предметы одной удобной:
Java:
Expand Collapse Copy
private void swapIfNeeded() {
    Item currentItem = mc.player.getHeldItemOffhand().getItem();
    int selectedItemSlot = getSlot(getSelectedItem());
    if (selectedItemSlot >= 0 && (mc.player.getHeldItemOffhand().getCount() == 0 || currentItem != getSelectedItem())) {
        InventoryUtil.moveItem(selectedItemSlot, 45, true);
    }
}

второе, это используй swapIfNeeded() везде где есть дублируется логика свапа например в методе swapIfHealthToLow и swapIfShieldIsBroken.
 
в кратце:

во первых замени все проверки на конкретные предметы одной удобной:
Java:
Expand Collapse Copy
private void swapIfNeeded() {
    Item currentItem = mc.player.getHeldItemOffhand().getItem();
    int selectedItemSlot = getSlot(getSelectedItem());
    if (selectedItemSlot >= 0 && (mc.player.getHeldItemOffhand().getCount() == 0 || currentItem != getSelectedItem())) {
        InventoryUtil.moveItem(selectedItemSlot, 45, true);
    }
}

второе, это используй swapIfNeeded() везде где есть дублируется логика свапа например в методе swapIfHealthToLow и swapIfShieldIsBroken.
можеш помоч а то я нехуя не понял дс - whitewindows_

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
у меня есть авто свап но он не свапает тотем на тотем или сферу на сферу


Java:
Expand Collapse Copy
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import net.minecraft.util.MovementInput;
import net.minecraft.util.MovementInputFromOptions;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
    final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
    final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
    final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
    final StopWatch stopWatch = new StopWatch();
    boolean shieldIsCooldown;
    int oldItem = -1;

    final StopWatch delay = new StopWatch();
    final AutoTotem autoTotem;

    public AutoSwap(AutoTotem autoTotem) {
        this.autoTotem = autoTotem;
        addSettings(swapMode, itemType, swapType, keyToSwap, health);
    }

    @Subscribe
    public void onEventKey(EventKey e) {
        if (!swapMode.is("По бинду")) {
            return;
        }

        ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
        boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

        if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
            Item currentItem = offhandItemStack.getItem();
            boolean isHoldingSwapItem = currentItem == getSwapItem();
            boolean isHoldingSelectedItem = currentItem == getSelectedItem();
            int selectedItemSlot = getSlot(getSelectedItem());
            int swapItemSlot = getSlot(getSwapItem());

            if (selectedItemSlot >= 0) {
                if (!isHoldingSelectedItem) {
                    InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                    return;
                }
            }
            if (swapItemSlot >= 0) {
                if (!isHoldingSwapItem) {
                    InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                }
            }
        }
    }

    @Subscribe
    private void onCooldown(EventCooldown e) {
        shieldIsCooldown = isCooldown(e);
    }

    @Subscribe
    private void onUpdate(EventUpdate e) {
        if (!swapMode.is("Умный")) {
            return;
        }

        Item currentItem = mc.player.getHeldItemOffhand().getItem();

        if (stopWatch.isReached(400L)) {
            swapIfShieldIsBroken(currentItem);
            swapIfHealthToLow(currentItem);
            stopWatch.reset();
        }
        boolean isRightClickWithGoldenAppleActive = false;

        if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
            isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
        }


        if (isRightClickWithGoldenAppleActive) {
            stopWatch.reset();
        }
    }

    @Override
    public void onDisable() {
        shieldIsCooldown = false;
        oldItem = -1;
        super.onDisable();
    }

    private void swapIfHealthToLow(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown || !gappleIsNotCooldown) {
            return;
        }

        if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
        } else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private void swapIfShieldIsBroken(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
            print(shieldIsCooldown + "");
        } else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private boolean isLowHealth() {
        float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
        return currentHealth <= health.get();
    }

    private boolean isCooldown(EventCooldown cooldown) {
        Item item = cooldown.getItem();


        if (!itemType.is("Shield")) {
            return false;
        } else {
            return cooldown.isAdded() && item instanceof ShieldItem;
        }
    }

    private Item getSwapItem() {
        return getItemByType(swapType.get());
    }

    private Item getSelectedItem() {
        return getItemByType(itemType.get());
    }

    private Item getItemByType(String itemType) {
        return switch (itemType) {
            case "Щит" -> Items.SHIELD;
            case "Тотем" -> Items.TOTEM_OF_UNDYING;
            case "Геплы" -> Items.GOLDEN_APPLE;
            case "Шар" -> Items.PLAYER_HEAD;
            default -> Items.AIR;
        };
    }

    private int getSlot(Item item) {
        int finalSlot = -1;
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
                if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
                    finalSlot = i;
                    break;
                } else {
                    finalSlot = i;
                }
            }
        }
        if (finalSlot < 9 && finalSlot != -1) {
            finalSlot = finalSlot + 36;
        }
        return finalSlot;
    }
}
привет вайтвиндовс давай я тебе помогу
 
package im.Dinya.functions.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.Dinya.events.EventCooldown;
import im.Dinya.events.EventKey;
import im.Dinya.events.EventUpdate;
import im.Dinya.functions.api.Category;
import im.Dinya.functions.api.Function;
import im.Dinya.functions.api.FunctionRegister;
import im.Dinya.functions.settings.impl.BindSetting;
import im.Dinya.functions.settings.impl.ModeSetting;
import im.Dinya.functions.settings.impl.SliderSetting;
import im.Dinya.utils.math.StopWatch;
import im.Dinya.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;

@FieldDefaults(level = AccessLevel.PRIVATE)
@FunctionRegister(name = "AutoSwap", type = Category.Combat)
public class AutoSwap extends Function {
final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
final StopWatch stopWatch = new StopWatch();
boolean shieldIsCooldown;
int oldItem = -1;

final StopWatch delay = new StopWatch();
final AutoTotem autoTotem;

public AutoSwap(AutoTotem autoTotem) {
this.autoTotem = autoTotem;
addSettings(swapMode, itemType, swapType, keyToSwap, health);
}

@Subscribe
public void onEventKey(EventKey e) {
if (!swapMode.is("По бинду")) {
return;
}

ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
Item currentItem = offhandItemStack.getItem();
boolean isHoldingSwapItem = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
int selectedItemSlot = getSlot(getSelectedItem());
int swapItemSlot = getSlot(getSwapItem());

if (selectedItemSlot >= 0) {
if (!isHoldingSelectedItem) {
InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
stopWatch.reset();
return;
}
}
if (swapItemSlot >= 0) {
if (!isHoldingSwapItem) {
InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
stopWatch.reset();
}
}
}
}

@Subscribe
private void onCooldown(EventCooldown e) {
shieldIsCooldown = isCooldown(e);
}

@Subscribe
private void onUpdate(EventUpdate e) {
if (!swapMode.is("Умный")) {
return;
}

Item currentItem = mc.player.getHeldItemOffhand().getItem();

if (stopWatch.isReached(400L)) {
swapIfShieldIsBroken(currentItem);
swapIfHealthToLow(currentItem);
stopWatch.reset();
}
boolean isRightClickWithGoldenAppleActive = false;

if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
}


if (isRightClickWithGoldenAppleActive) {
stopWatch.reset();
}
}

@override
public boolean onDisable() {
shieldIsCooldown = false;
oldItem = -1;
super.onDisable();
return false;
}

private void swapIfHealthToLow(Item currentItem) {
boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingGoldenApple = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

int goldenAppleSlot = getSlot(getSwapItem());

if (shieldIsCooldown || !gappleIsNotCooldown) {
return;
}

if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = goldenAppleSlot;
}
} else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
}
}

private void swapIfShieldIsBroken(Item currentItem) {
boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingGoldenApple = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
int goldenAppleSlot = getSlot(getSwapItem());

if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = goldenAppleSlot;
}
print(shieldIsCooldown + "");
} else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
}
}

private boolean isLowHealth() {
float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
return currentHealth <= health.get();
}

private boolean isCooldown(EventCooldown cooldown) {
Item item = cooldown.getItem();


if (!itemType.is("Shield")) {
return false;
} else {
return cooldown.isAdded() && item instanceof ShieldItem;
}
}

private Item getSwapItem() {
return getItemByType(swapType.get());
}

private Item getSelectedItem() {
return getItemByType(itemType.get());
}

private Item getItemByType(String itemType) {
return switch (itemType) {
case "Щит" -> Items.SHIELD;
case "Тотем" -> Items.TOTEM_OF_UNDYING;
case "Геплы" -> Items.GOLDEN_APPLE;
case "Шар" -> Items.PLAYER_HEAD;
default -> Items.AIR;
};
}

private int getSlot(Item item) {
int finalSlot = -1;
for (int i = 0; i < 36; i++) {
if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
finalSlot = i;
break;
} else {
finalSlot = i;
}
}
}
if (finalSlot < 9 && finalSlot != -1) {
finalSlot = finalSlot + 36;
}
return finalSlot;
}
} здесь просто на свои импорты
 
package im.Dinya.functions.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.Dinya.events.EventCooldown;
import im.Dinya.events.EventKey;
import im.Dinya.events.EventUpdate;
import im.Dinya.functions.api.Category;
import im.Dinya.functions.api.Function;
import im.Dinya.functions.api.FunctionRegister;
import im.Dinya.functions.settings.impl.BindSetting;
import im.Dinya.functions.settings.impl.ModeSetting;
import im.Dinya.functions.settings.impl.SliderSetting;
import im.Dinya.utils.math.StopWatch;
import im.Dinya.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;

@FieldDefaults(level = AccessLevel.PRIVATE)
@FunctionRegister(name = "AutoSwap", type = Category.Combat)
public class AutoSwap extends Function {
final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
final StopWatch stopWatch = new StopWatch();
boolean shieldIsCooldown;
int oldItem = -1;

final StopWatch delay = new StopWatch();
final AutoTotem autoTotem;

public AutoSwap(AutoTotem autoTotem) {
this.autoTotem = autoTotem;
addSettings(swapMode, itemType, swapType, keyToSwap, health);
}

@Subscribe
public void onEventKey(EventKey e) {
if (!swapMode.is("По бинду")) {
return;
}

ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
Item currentItem = offhandItemStack.getItem();
boolean isHoldingSwapItem = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
int selectedItemSlot = getSlot(getSelectedItem());
int swapItemSlot = getSlot(getSwapItem());

if (selectedItemSlot >= 0) {
if (!isHoldingSelectedItem) {
InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
stopWatch.reset();
return;
}
}
if (swapItemSlot >= 0) {
if (!isHoldingSwapItem) {
InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
stopWatch.reset();
}
}
}
}

@Subscribe
private void onCooldown(EventCooldown e) {
shieldIsCooldown = isCooldown(e);
}

@Subscribe
private void onUpdate(EventUpdate e) {
if (!swapMode.is("Умный")) {
return;
}

Item currentItem = mc.player.getHeldItemOffhand().getItem();

if (stopWatch.isReached(400L)) {
swapIfShieldIsBroken(currentItem);
swapIfHealthToLow(currentItem);
stopWatch.reset();
}
boolean isRightClickWithGoldenAppleActive = false;

if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
}


if (isRightClickWithGoldenAppleActive) {
stopWatch.reset();
}
}

@override
public boolean onDisable() {
shieldIsCooldown = false;
oldItem = -1;
super.onDisable();
return false;
}

private void swapIfHealthToLow(Item currentItem) {
boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingGoldenApple = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

int goldenAppleSlot = getSlot(getSwapItem());

if (shieldIsCooldown || !gappleIsNotCooldown) {
return;
}

if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = goldenAppleSlot;
}
} else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
}
}

private void swapIfShieldIsBroken(Item currentItem) {
boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingGoldenApple = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
int goldenAppleSlot = getSlot(getSwapItem());

if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = goldenAppleSlot;
}
print(shieldIsCooldown + "");
} else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
}
}

private boolean isLowHealth() {
float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
return currentHealth <= health.get();
}

private boolean isCooldown(EventCooldown cooldown) {
Item item = cooldown.getItem();


if (!itemType.is("Shield")) {
return false;
} else {
return cooldown.isAdded() && item instanceof ShieldItem;
}
}

private Item getSwapItem() {
return getItemByType(swapType.get());
}

private Item getSelectedItem() {
return getItemByType(itemType.get());
}

private Item getItemByType(String itemType) {
return switch (itemType) {
case "Щит" -> Items.SHIELD;
case "Тотем" -> Items.TOTEM_OF_UNDYING;
case "Геплы" -> Items.GOLDEN_APPLE;
case "Шар" -> Items.PLAYER_HEAD;
default -> Items.AIR;
};
}

private int getSlot(Item item) {
int finalSlot = -1;
for (int i = 0; i < 36; i++) {
if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
finalSlot = i;
break;
} else {
finalSlot = i;
}
}
}
if (finalSlot < 9 && finalSlot != -1) {
finalSlot = finalSlot + 36;
}
return finalSlot;
}
} здесь просто на свои импорты
фт байпасит?
 
у меня есть авто свап но он не свапает тотем на тотем или сферу на сферу


Java:
Expand Collapse Copy
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;

import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import net.minecraft.util.MovementInput;
import net.minecraft.util.MovementInputFromOptions;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
    final ModeSetting swapMode = new ModeSetting("Тип", "Умный", "Умный", "По бинду");
    final ModeSetting itemType = new ModeSetting("Предмет", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    final BindSetting keyToSwap = new BindSetting("Кнопка", -1).setVisible(() -> swapMode.is("По бинду"));
    final SliderSetting health = new SliderSetting("Здоровье", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Умный"));
    final StopWatch stopWatch = new StopWatch();
    boolean shieldIsCooldown;
    int oldItem = -1;

    final StopWatch delay = new StopWatch();
    final AutoTotem autoTotem;

    public AutoSwap(AutoTotem autoTotem) {
        this.autoTotem = autoTotem;
        addSettings(swapMode, itemType, swapType, keyToSwap, health);
    }

    @Subscribe
    public void onEventKey(EventKey e) {
        if (!swapMode.is("По бинду")) {
            return;
        }

        ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
        boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);

        if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached(200)) {
            Item currentItem = offhandItemStack.getItem();
            boolean isHoldingSwapItem = currentItem == getSwapItem();
            boolean isHoldingSelectedItem = currentItem == getSelectedItem();
            int selectedItemSlot = getSlot(getSelectedItem());
            int swapItemSlot = getSlot(getSwapItem());

            if (selectedItemSlot >= 0) {
                if (!isHoldingSelectedItem) {
                    InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                    return;
                }
            }
            if (swapItemSlot >= 0) {
                if (!isHoldingSwapItem) {
                    InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
                    stopWatch.reset();
                }
            }
        }
    }

    @Subscribe
    private void onCooldown(EventCooldown e) {
        shieldIsCooldown = isCooldown(e);
    }

    @Subscribe
    private void onUpdate(EventUpdate e) {
        if (!swapMode.is("Умный")) {
            return;
        }

        Item currentItem = mc.player.getHeldItemOffhand().getItem();

        if (stopWatch.isReached(400L)) {
            swapIfShieldIsBroken(currentItem);
            swapIfHealthToLow(currentItem);
            stopWatch.reset();
        }
        boolean isRightClickWithGoldenAppleActive = false;

        if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
            isRightClickWithGoldenAppleActive = mc.gameSettings.keyBindUseItem.isKeyDown();
        }


        if (isRightClickWithGoldenAppleActive) {
            stopWatch.reset();
        }
    }

    @Override
    public void onDisable() {
        shieldIsCooldown = false;
        oldItem = -1;
        super.onDisable();
    }

    private void swapIfHealthToLow(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);

        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown || !gappleIsNotCooldown) {
            return;
        }

        if (isLowHealth() && !isHoldingGoldenApple && isHoldingSelectedItem) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
        } else if (!isLowHealth() && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private void swapIfShieldIsBroken(Item currentItem) {
        boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
        boolean isHoldingGoldenApple = currentItem == getSwapItem();
        boolean isHoldingSelectedItem = currentItem == getSelectedItem();
        boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
        int goldenAppleSlot = getSlot(getSwapItem());

        if (shieldIsCooldown && !isHoldingGoldenApple && isHoldingSelectedItem && gappleIsNotCooldown) {
            InventoryUtil.moveItem(goldenAppleSlot, 45, isOffhandNotEmpty);
            if (isOffhandNotEmpty && oldItem == -1) {
                oldItem = goldenAppleSlot;
            }
            print(shieldIsCooldown + "");
        } else if (!shieldIsCooldown && isHoldingGoldenApple && oldItem >= 0) {
            InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
            oldItem = -1;
        }
    }

    private boolean isLowHealth() {
        float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
        return currentHealth <= health.get();
    }

    private boolean isCooldown(EventCooldown cooldown) {
        Item item = cooldown.getItem();


        if (!itemType.is("Shield")) {
            return false;
        } else {
            return cooldown.isAdded() && item instanceof ShieldItem;
        }
    }

    private Item getSwapItem() {
        return getItemByType(swapType.get());
    }

    private Item getSelectedItem() {
        return getItemByType(itemType.get());
    }

    private Item getItemByType(String itemType) {
        return switch (itemType) {
            case "Щит" -> Items.SHIELD;
            case "Тотем" -> Items.TOTEM_OF_UNDYING;
            case "Геплы" -> Items.GOLDEN_APPLE;
            case "Шар" -> Items.PLAYER_HEAD;
            default -> Items.AIR;
        };
    }

    private int getSlot(Item item) {
        int finalSlot = -1;
        for (int i = 0; i < 36; i++) {
            if (mc.player.inventory.getStackInSlot(i).getItem() == item) {
                if (mc.player.inventory.getStackInSlot(i).isEnchanted()) {
                    finalSlot = i;
                    break;
                } else {
                    finalSlot = i;
                }
            }
        }
        if (finalSlot < 9 && finalSlot != -1) {
            finalSlot = finalSlot + 36;
        }
        return finalSlot;
    }
}
package im.expensive.modules.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventCooldown;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.modules.api.Category;
import im.expensive.modules.api.Module;
import im.expensive.modules.api.ModuleRegister;
import im.expensive.modules.settings.impl.BindSetting;
import im.expensive.modules.settings.impl.BooleanSetting;
import im.expensive.modules.settings.impl.ModeSetting;
import im.expensive.modules.settings.impl.SliderSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.potion.Effects;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleRegister(name = "AutoSwap", category = Category.Combat)
public class AutoSwap extends Module {
final ModeSetting swapMode = new ModeSetting("Mode", "Smart", "Smart", "Bind");
final ModeSetting itemType = new ModeSetting("Item", "Shield", "Shield", "Golden Apple", "Totem", "Head");
final ModeSetting swapType = new ModeSetting("Swap To", "Golden Apple", "Shield", "Golden Apple", "Totem", "Head");
final BindSetting keyToSwap = new BindSetting("Key", -1).setVisible(() -> swapMode.is("Bind"));
final SliderSetting health = new SliderSetting("Health", 11.0F, 5.0F, 19.0F, 0.5F).setVisible(() -> swapMode.is("Smart"));
final SliderSetting swapDelay = new SliderSetting("Swap Delay", 200.0F, 50.0F, 1000.0F, 50.0F);
final BooleanSetting preferEnchanted = new BooleanSetting("Prefer Enchanted", true);
final BooleanSetting debug = new BooleanSetting("Debug", false);

final StopWatch stopWatch = new StopWatch();
boolean shieldIsCooldown;
int oldItem = -1;
boolean isSwapping;
final AutoTotem autoTotem;
private static final Logger logger = LogManager.getLogger("AutoSwap");

public AutoSwap(AutoTotem autoTotem) {
this.autoTotem = autoTotem;
addSettings(swapMode, itemType, swapType, keyToSwap, health, swapDelay, preferEnchanted, debug);
}

@Subscribe
public void onEventKey(EventKey e) {
if (!swapMode.is("Bind") || isSwapping) return;

if (e.isKeyDown(keyToSwap.get()) && stopWatch.isReached((long)swapDelay.get())) {
performSwap();
stopWatch.reset();
}
}

@Subscribe
private void onCooldown(EventCooldown e) {
shieldIsCooldown = isCooldown(e);
if (debug.get()) logger.info("Shield cooldown: {}", shieldIsCooldown);
}

@Subscribe
private void onUpdate(EventUpdate e) {
if (!swapMode.is("Smart") || isSwapping) return;

Item currentItem = mc.player.getHeldItemOffhand().getItem();

if (stopWatch.isReached((long)swapDelay.get())) {
if (swapIfShieldIsBroken(currentItem) || swapIfHealthToLow(currentItem)) {
stopWatch.reset();
}
}

if (currentItem == Items.GOLDEN_APPLE && !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE)) {
if (mc.gameSettings.keyBindUseItem.isKeyDown()) {
stopWatch.reset();
if (debug.get()) logger.info("Golden Apple in use, resetting timer");
}
}
}

@override
public void onDisable() {
shieldIsCooldown = false;
oldItem = -1;
isSwapping = false;
super.onDisable();
}

private boolean swapIfHealthToLow(Item currentItem) {
if (!isLowHealth() || !hasInventorySpace()) return false;

boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingSwapItem = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
int swapItemSlot = getSlot(getSwapItem());

if (shieldIsCooldown || !gappleIsNotCooldown || swapItemSlot < 0) return false;

if (!isHoldingSwapItem && isHoldingSelectedItem) {
isSwapping = true;
InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = swapItemSlot;
}
if (debug.get()) logger.info("Swapping to {} due to low health", swapType.get());
isSwapping = false;
return true;
} else if (!isLowHealth() && isHoldingSwapItem && oldItem >= 0) {
isSwapping = true;
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
isSwapping = false;
return true;
}
return false;
}

private boolean swapIfShieldIsBroken(Item currentItem) {
if (!shieldIsCooldown || !hasInventorySpace()) return false;

boolean isOffhandNotEmpty = !(currentItem instanceof AirItem);
boolean isHoldingSwapItem = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
boolean gappleIsNotCooldown = !mc.player.getCooldownTracker().hasCooldown(Items.GOLDEN_APPLE);
int swapItemSlot = getSlot(getSwapItem());

if (!isHoldingSwapItem && isHoldingSelectedItem && gappleIsNotCooldown && swapItemSlot >= 0) {
isSwapping = true;
InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
if (isOffhandNotEmpty && oldItem == -1) {
oldItem = swapItemSlot;
}
if (debug.get()) logger.info("Swapping to {} due to shield break", swapType.get());
isSwapping = false;
return true;
} else if (!shieldIsCooldown && isHoldingSwapItem && oldItem >= 0) {
isSwapping = true;
InventoryUtil.moveItem(oldItem, 45, isOffhandNotEmpty);
oldItem = -1;
isSwapping = false;
return true;
}
return false;
}

private void performSwap() {
ItemStack offhandItemStack = mc.player.getHeldItemOffhand();
boolean isOffhandNotEmpty = !(offhandItemStack.getItem() instanceof AirItem);
Item currentItem = offhandItemStack.getItem();
boolean isHoldingSwapItem = currentItem == getSwapItem();
boolean isHoldingSelectedItem = currentItem == getSelectedItem();
int selectedItemSlot = getSlot(getSelectedItem());
int swapItemSlot = getSlot(getSwapItem());

if (selectedItemSlot >= 0 && !isHoldingSelectedItem && hasInventorySpace()) {
isSwapping = true;
InventoryUtil.moveItem(selectedItemSlot, 45, isOffhandNotEmpty);
if (debug.get()) logger.info("Swapping to selected item: {}", itemType.get());
isSwapping = false;
return;
}
if (swapItemSlot >= 0 && !isHoldingSwapItem && hasInventorySpace()) {
isSwapping = true;
InventoryUtil.moveItem(swapItemSlot, 45, isOffhandNotEmpty);
if (debug.get()) logger.info("Swapping to swap item: {}", swapType.get());
isSwapping = false;
}
}

private boolean hasInventorySpace() {
boolean hasSpace = mc.player.inventory.hasAnySpace();
if (!hasSpace && debug.get()) logger.warn("No inventory space for swapping");
return hasSpace;
}

private boolean isLowHealth() {
float currentHealth = mc.player.getHealth() + (mc.player.isPotionActive(Effects.ABSORPTION) ? mc.player.getAbsorptionAmount() : 0.0f);
boolean low = currentHealth <= health.get();
if (debug.get() && low) logger.info("Low health detected: {}", currentHealth);
return low;
}

private boolean isCooldown(EventCooldown cooldown) {
if (!itemType.is("Shield")) return false;
return cooldown.isAdded() && cooldown.getItem() instanceof ShieldItem;
}

private Item getSwapItem() {
return getItemByType(swapType.get());
}

private Item getSelectedItem() {
return getItemByType(itemType.get());
}

private Item getItemByType(String itemType) {
return switch (itemType) {
case "Shield" -> Items.SHIELD;
case "Totem" -> Items.TOTEM_OF_UNDYING;
case "Golden Apple" -> Items.GOLDEN_APPLE;
case "Head" -> Items.PLAYER_HEAD;
default -> Items.AIR;
};
}

private int getSlot(Item item) {
int finalSlot = -1;
boolean foundEnchanted = false;

for (int i = 0; i < 36; i++) {
ItemStack stack = mc.player.inventory.getStackInSlot(i);
if (stack.getItem() == item) {
if (preferEnchanted.get() && stack.isEnchanted()) {
finalSlot = i;
foundEnchanted = true;
break;
} else if (!foundEnchanted) {
finalSlot = i;
}
}
}

if (finalSlot < 9 && finalSlot != -1) {
finalSlot = finalSlot + 36;
}
return finalSlot;
}
}
 
Назад
Сверху Снизу