Вопрос AutoSwap 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Сен 2024
Сообщения
20
Реакции
0
помогите пж, у меня автосвап когда свапается выбрасывает нахуй сферу
JavaScript:
Expand Collapse Copy
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BindSetting;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.*;
import net.minecraft.util.text.ITextComponent;

import java.util.List;

/**
 * AutoSwap (expensive version)
 * Портировано с monoton AutoSwap — автоматический свап предметов в левой руке и на голову,
 * а также умный свап топора/меча при смене скорости атаки.
 */
@FunctionRegister(name = "AutoSwap", type = Category.Combat)
public class AutoSwap extends Function {

    private final ModeSetting mode = new ModeSetting("Режим", "Рука", "Голова");
    private final BindSetting swapKey = new BindSetting("Свап руки", -1);
    private final ModeSetting itemType = new ModeSetting("Свапать с", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    private final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    private final BindSetting swapKey2 = new BindSetting("Свап головы", -1);
    private final ModeSetting itemType2 = new ModeSetting("Свапать с (голова)", "Шар", "Шлем", "Шар");
    private final ModeSetting swapType2 = new ModeSetting("Свапать на (голова)", "Шлем", "Шлем", "Шар");

    private final BooleanSetting totemSwap = new BooleanSetting("Свап топора на меч", true);

    private final StopWatch stopWatch = new StopWatch();
    private final StopWatch attackSpeedTimer = new StopWatch();

    private boolean hadAttackSpeedRecently = false;
    private boolean lastAttackSpeedResult = false;
    private boolean isSwapping = false;

    private ItemStack lastOffhandStack = null;
    private int axeSlot = -1;

    public AutoSwap(AutoTotem autoTotem) {
        addSettings(mode, swapKey, itemType, swapType, swapKey2, itemType2, swapType2, totemSwap);
    }

    // ===========================
    // ====     Свапы по бинду ===
    // ===========================
    @Subscribe
    public void onEventKey(EventKey e) {
        if (mc.player == null || mc.currentScreen != null) return;
        if (isSwapping || !stopWatch.isReached(250)) return;

        // === Свап в руке ===
        if (mode.is("Рука") && e.isKeyDown(swapKey.get())) {
            handleSwapOffhand();
        }

        // === Свап на голове ===
        if (mode.is("Голова") && e.isKeyDown(swapKey2.get())) {
            handleSwapHelmet();
        }
    }

    private void handleSwapOffhand() {
        isSwapping = true;
        ItemStack offhand = mc.player.getHeldItemOffhand();
        Item selectedItem = getItemByType(itemType.get());
        Item swapItem = getItemByType(swapType.get());

        Item target = (offhand.getItem() == selectedItem) ? swapItem :
                (offhand.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 45);
            stopWatch.reset();
        }
        isSwapping = false;
    }

    private void handleSwapHelmet() {
        isSwapping = true;
        ItemStack helmet = mc.player.inventory.armorInventory.get(3);
        Item selectedItem = getItemByType(itemType2.get());
        Item swapItem = getItemByType(swapType2.get());

        Item target = (helmet.getItem() == selectedItem) ? swapItem :
                (helmet.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 5); // слот шлема
            stopWatch.reset();
        }
        isSwapping = false;
    }

    // ===========================
    // ====  Топор / Меч свап  ===
    // ===========================
    @Subscribe
    public void onUpdate(EventUpdate e) {
        if (mc.player == null) return;

        ItemStack offhand = mc.player.getHeldItemOffhand();
        if (offhand != lastOffhandStack) {
            lastAttackSpeedResult = hasAttackSpeedDescription(offhand);
            lastOffhandStack = offhand;
        }

        if (lastAttackSpeedResult) {
            hadAttackSpeedRecently = true;
            attackSpeedTimer.reset();
        } else if (attackSpeedTimer.isReached(500)) {
            hadAttackSpeedRecently = false;
        }

        if (!totemSwap.get() || !stopWatch.isReached(300)) return;

        ItemStack mainHand = mc.player.getHeldItemMainhand();
        boolean hasAxe = getAxeSlot() != -1;
        boolean hasSword = getSwordSlot() != -1;

        // Свап меч ↔ топор
        if (hasAxe && hasSword) {
            if (!lastAttackSpeedResult && hadAttackSpeedRecently && mainHand.getItem() instanceof AxeItem) {
                axeSlot = mc.player.inventory.currentItem;
                int swordSlot = getSwordSlot();
                if (swordSlot != -1) {
                    mc.player.inventory.currentItem = swordSlot;
                    stopWatch.reset();
                }
            } else if (lastAttackSpeedResult && mainHand.getItem() instanceof SwordItem && axeSlot != -1) {
                int axeSlotNow = getAxeSlot();
                if (axeSlotNow != -1) {
                    mc.player.inventory.currentItem = axeSlotNow;
                    axeSlot = -1;
                    stopWatch.reset();
                }
            }
        }
    }

    // ===========================
    // ====   Утилиты свапа    ===
    // ===========================
    private Item getItemByType(String type) {
        switch (type) {
            case "Щит": return Items.SHIELD;
            case "Тотем": return Items.TOTEM_OF_UNDYING;
            case "Геплы": return Items.GOLDEN_APPLE;
            case "Шар": case "Шар ": return Items.PLAYER_HEAD;
            case "Шлем": return Items.NETHERITE_HELMET;
            default: return Items.AIR;
        }
    }

    private int getSlot(Item item) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == item) {
                return (i < 9) ? i + 36 : i;
            }
        }
        return -1;
    }

    private int getSwordSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof SwordItem) return i;
        }
        return -1;
    }

    private int getAxeSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof AxeItem) return i;
        }
        return -1;
    }

    private boolean hasAttackSpeedDescription(ItemStack itemStack) {
        if (itemStack.isEmpty()) return false;
        if (itemStack.hasDisplayName() && itemStack.getDisplayName().getString().contains("Кобры")) return true;

        List<ITextComponent> tooltip = itemStack.getTooltip(mc.player, ITooltipFlag.TooltipFlags.NORMAL);
        for (ITextComponent c : tooltip) {
            String text = c.getString();
            if (text.contains("Скорость атаки") || text.contains("Attack Speed")) return true;
        }
        return false;
    }

    @Override
    public boolean onDisable() {
        axeSlot = -1;
        hadAttackSpeedRecently = false;
        lastOffhandStack = null;
        super.onDisable();
        return false;
    }

    @Override
    public void updateEntity() {

    }
}
 
Если у тебя выкидывает предмет который ты свапаешь значит что у тебя нету обхода под данный сервер (Анти чит). Скорее всего это так
 
Если у тебя выкидывает предмет который ты свапаешь значит что у тебя нету обхода под данный сервер (Анти чит). Скорее всего это так
у меня типо деф головы свапает а именно сферы нет
 
помогите пж, у меня автосвап когда свапается выбрасывает нахуй сферу
JavaScript:
Expand Collapse Copy
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BindSetting;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.*;
import net.minecraft.util.text.ITextComponent;

import java.util.List;

/**
 * AutoSwap (expensive version)
 * Портировано с monoton AutoSwap — автоматический свап предметов в левой руке и на голову,
 * а также умный свап топора/меча при смене скорости атаки.
 */
@FunctionRegister(name = "AutoSwap", type = Category.Combat)
public class AutoSwap extends Function {

    private final ModeSetting mode = new ModeSetting("Режим", "Рука", "Голова");
    private final BindSetting swapKey = new BindSetting("Свап руки", -1);
    private final ModeSetting itemType = new ModeSetting("Свапать с", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    private final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    private final BindSetting swapKey2 = new BindSetting("Свап головы", -1);
    private final ModeSetting itemType2 = new ModeSetting("Свапать с (голова)", "Шар", "Шлем", "Шар");
    private final ModeSetting swapType2 = new ModeSetting("Свапать на (голова)", "Шлем", "Шлем", "Шар");

    private final BooleanSetting totemSwap = new BooleanSetting("Свап топора на меч", true);

    private final StopWatch stopWatch = new StopWatch();
    private final StopWatch attackSpeedTimer = new StopWatch();

    private boolean hadAttackSpeedRecently = false;
    private boolean lastAttackSpeedResult = false;
    private boolean isSwapping = false;

    private ItemStack lastOffhandStack = null;
    private int axeSlot = -1;

    public AutoSwap(AutoTotem autoTotem) {
        addSettings(mode, swapKey, itemType, swapType, swapKey2, itemType2, swapType2, totemSwap);
    }

    // ===========================
    // ====     Свапы по бинду ===
    // ===========================
    @Subscribe
    public void onEventKey(EventKey e) {
        if (mc.player == null || mc.currentScreen != null) return;
        if (isSwapping || !stopWatch.isReached(250)) return;

        // === Свап в руке ===
        if (mode.is("Рука") && e.isKeyDown(swapKey.get())) {
            handleSwapOffhand();
        }

        // === Свап на голове ===
        if (mode.is("Голова") && e.isKeyDown(swapKey2.get())) {
            handleSwapHelmet();
        }
    }

    private void handleSwapOffhand() {
        isSwapping = true;
        ItemStack offhand = mc.player.getHeldItemOffhand();
        Item selectedItem = getItemByType(itemType.get());
        Item swapItem = getItemByType(swapType.get());

        Item target = (offhand.getItem() == selectedItem) ? swapItem :
                (offhand.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 45);
            stopWatch.reset();
        }
        isSwapping = false;
    }

    private void handleSwapHelmet() {
        isSwapping = true;
        ItemStack helmet = mc.player.inventory.armorInventory.get(3);
        Item selectedItem = getItemByType(itemType2.get());
        Item swapItem = getItemByType(swapType2.get());

        Item target = (helmet.getItem() == selectedItem) ? swapItem :
                (helmet.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 5); // слот шлема
            stopWatch.reset();
        }
        isSwapping = false;
    }

    // ===========================
    // ====  Топор / Меч свап  ===
    // ===========================
    @Subscribe
    public void onUpdate(EventUpdate e) {
        if (mc.player == null) return;

        ItemStack offhand = mc.player.getHeldItemOffhand();
        if (offhand != lastOffhandStack) {
            lastAttackSpeedResult = hasAttackSpeedDescription(offhand);
            lastOffhandStack = offhand;
        }

        if (lastAttackSpeedResult) {
            hadAttackSpeedRecently = true;
            attackSpeedTimer.reset();
        } else if (attackSpeedTimer.isReached(500)) {
            hadAttackSpeedRecently = false;
        }

        if (!totemSwap.get() || !stopWatch.isReached(300)) return;

        ItemStack mainHand = mc.player.getHeldItemMainhand();
        boolean hasAxe = getAxeSlot() != -1;
        boolean hasSword = getSwordSlot() != -1;

        // Свап меч ↔ топор
        if (hasAxe && hasSword) {
            if (!lastAttackSpeedResult && hadAttackSpeedRecently && mainHand.getItem() instanceof AxeItem) {
                axeSlot = mc.player.inventory.currentItem;
                int swordSlot = getSwordSlot();
                if (swordSlot != -1) {
                    mc.player.inventory.currentItem = swordSlot;
                    stopWatch.reset();
                }
            } else if (lastAttackSpeedResult && mainHand.getItem() instanceof SwordItem && axeSlot != -1) {
                int axeSlotNow = getAxeSlot();
                if (axeSlotNow != -1) {
                    mc.player.inventory.currentItem = axeSlotNow;
                    axeSlot = -1;
                    stopWatch.reset();
                }
            }
        }
    }

    // ===========================
    // ====   Утилиты свапа    ===
    // ===========================
    private Item getItemByType(String type) {
        switch (type) {
            case "Щит": return Items.SHIELD;
            case "Тотем": return Items.TOTEM_OF_UNDYING;
            case "Геплы": return Items.GOLDEN_APPLE;
            case "Шар": case "Шар ": return Items.PLAYER_HEAD;
            case "Шлем": return Items.NETHERITE_HELMET;
            default: return Items.AIR;
        }
    }

    private int getSlot(Item item) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == item) {
                return (i < 9) ? i + 36 : i;
            }
        }
        return -1;
    }

    private int getSwordSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof SwordItem) return i;
        }
        return -1;
    }

    private int getAxeSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof AxeItem) return i;
        }
        return -1;
    }

    private boolean hasAttackSpeedDescription(ItemStack itemStack) {
        if (itemStack.isEmpty()) return false;
        if (itemStack.hasDisplayName() && itemStack.getDisplayName().getString().contains("Кобры")) return true;

        List<ITextComponent> tooltip = itemStack.getTooltip(mc.player, ITooltipFlag.TooltipFlags.NORMAL);
        for (ITextComponent c : tooltip) {
            String text = c.getString();
            if (text.contains("Скорость атаки") || text.contains("Attack Speed")) return true;
        }
        return false;
    }

    @Override
    public boolean onDisable() {
        axeSlot = -1;
        hadAttackSpeedRecently = false;
        lastOffhandStack = null;
        super.onDisable();
        return false;
    }

    @Override
    public void updateEntity() {

    }
}
с Expensive Upgrade спасти и все
 
помогите пж, у меня автосвап когда свапается выбрасывает нахуй сферу
JavaScript:
Expand Collapse Copy
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventKey;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BindSetting;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.*;
import net.minecraft.util.text.ITextComponent;

import java.util.List;

/**
 * AutoSwap (expensive version)
 * Портировано с monoton AutoSwap — автоматический свап предметов в левой руке и на голову,
 * а также умный свап топора/меча при смене скорости атаки.
 */
@FunctionRegister(name = "AutoSwap", type = Category.Combat)
public class AutoSwap extends Function {

    private final ModeSetting mode = new ModeSetting("Режим", "Рука", "Голова");
    private final BindSetting swapKey = new BindSetting("Свап руки", -1);
    private final ModeSetting itemType = new ModeSetting("Свапать с", "Щит", "Щит", "Геплы", "Тотем", "Шар");
    private final ModeSetting swapType = new ModeSetting("Свапать на", "Геплы", "Щит", "Геплы", "Тотем", "Шар");

    private final BindSetting swapKey2 = new BindSetting("Свап головы", -1);
    private final ModeSetting itemType2 = new ModeSetting("Свапать с (голова)", "Шар", "Шлем", "Шар");
    private final ModeSetting swapType2 = new ModeSetting("Свапать на (голова)", "Шлем", "Шлем", "Шар");

    private final BooleanSetting totemSwap = new BooleanSetting("Свап топора на меч", true);

    private final StopWatch stopWatch = new StopWatch();
    private final StopWatch attackSpeedTimer = new StopWatch();

    private boolean hadAttackSpeedRecently = false;
    private boolean lastAttackSpeedResult = false;
    private boolean isSwapping = false;

    private ItemStack lastOffhandStack = null;
    private int axeSlot = -1;

    public AutoSwap(AutoTotem autoTotem) {
        addSettings(mode, swapKey, itemType, swapType, swapKey2, itemType2, swapType2, totemSwap);
    }

    // ===========================
    // ====     Свапы по бинду ===
    // ===========================
    @Subscribe
    public void onEventKey(EventKey e) {
        if (mc.player == null || mc.currentScreen != null) return;
        if (isSwapping || !stopWatch.isReached(250)) return;

        // === Свап в руке ===
        if (mode.is("Рука") && e.isKeyDown(swapKey.get())) {
            handleSwapOffhand();
        }

        // === Свап на голове ===
        if (mode.is("Голова") && e.isKeyDown(swapKey2.get())) {
            handleSwapHelmet();
        }
    }

    private void handleSwapOffhand() {
        isSwapping = true;
        ItemStack offhand = mc.player.getHeldItemOffhand();
        Item selectedItem = getItemByType(itemType.get());
        Item swapItem = getItemByType(swapType.get());

        Item target = (offhand.getItem() == selectedItem) ? swapItem :
                (offhand.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 45);
            stopWatch.reset();
        }
        isSwapping = false;
    }

    private void handleSwapHelmet() {
        isSwapping = true;
        ItemStack helmet = mc.player.inventory.armorInventory.get(3);
        Item selectedItem = getItemByType(itemType2.get());
        Item swapItem = getItemByType(swapType2.get());

        Item target = (helmet.getItem() == selectedItem) ? swapItem :
                (helmet.getItem() == swapItem) ? selectedItem : selectedItem;

        int slot = getSlot(target);
        if (slot >= 0) {
            InventoryUtil.moveItem(slot, 5); // слот шлема
            stopWatch.reset();
        }
        isSwapping = false;
    }

    // ===========================
    // ====  Топор / Меч свап  ===
    // ===========================
    @Subscribe
    public void onUpdate(EventUpdate e) {
        if (mc.player == null) return;

        ItemStack offhand = mc.player.getHeldItemOffhand();
        if (offhand != lastOffhandStack) {
            lastAttackSpeedResult = hasAttackSpeedDescription(offhand);
            lastOffhandStack = offhand;
        }

        if (lastAttackSpeedResult) {
            hadAttackSpeedRecently = true;
            attackSpeedTimer.reset();
        } else if (attackSpeedTimer.isReached(500)) {
            hadAttackSpeedRecently = false;
        }

        if (!totemSwap.get() || !stopWatch.isReached(300)) return;

        ItemStack mainHand = mc.player.getHeldItemMainhand();
        boolean hasAxe = getAxeSlot() != -1;
        boolean hasSword = getSwordSlot() != -1;

        // Свап меч ↔ топор
        if (hasAxe && hasSword) {
            if (!lastAttackSpeedResult && hadAttackSpeedRecently && mainHand.getItem() instanceof AxeItem) {
                axeSlot = mc.player.inventory.currentItem;
                int swordSlot = getSwordSlot();
                if (swordSlot != -1) {
                    mc.player.inventory.currentItem = swordSlot;
                    stopWatch.reset();
                }
            } else if (lastAttackSpeedResult && mainHand.getItem() instanceof SwordItem && axeSlot != -1) {
                int axeSlotNow = getAxeSlot();
                if (axeSlotNow != -1) {
                    mc.player.inventory.currentItem = axeSlotNow;
                    axeSlot = -1;
                    stopWatch.reset();
                }
            }
        }
    }

    // ===========================
    // ====   Утилиты свапа    ===
    // ===========================
    private Item getItemByType(String type) {
        switch (type) {
            case "Щит": return Items.SHIELD;
            case "Тотем": return Items.TOTEM_OF_UNDYING;
            case "Геплы": return Items.GOLDEN_APPLE;
            case "Шар": case "Шар ": return Items.PLAYER_HEAD;
            case "Шлем": return Items.NETHERITE_HELMET;
            default: return Items.AIR;
        }
    }

    private int getSlot(Item item) {
        for (int i = 0; i < 36; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() == item) {
                return (i < 9) ? i + 36 : i;
            }
        }
        return -1;
    }

    private int getSwordSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof SwordItem) return i;
        }
        return -1;
    }

    private int getAxeSlot() {
        for (int i = 0; i < 9; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);
            if (stack.getItem() instanceof AxeItem) return i;
        }
        return -1;
    }

    private boolean hasAttackSpeedDescription(ItemStack itemStack) {
        if (itemStack.isEmpty()) return false;
        if (itemStack.hasDisplayName() && itemStack.getDisplayName().getString().contains("Кобры")) return true;

        List<ITextComponent> tooltip = itemStack.getTooltip(mc.player, ITooltipFlag.TooltipFlags.NORMAL);
        for (ITextComponent c : tooltip) {
            String text = c.getString();
            if (text.contains("Скорость атаки") || text.contains("Attack Speed")) return true;
        }
        return false;
    }

    @Override
    public boolean onDisable() {
        axeSlot = -1;
        hadAttackSpeedRecently = false;
        lastOffhandStack = null;
        super.onDisable();
        return false;
    }

    @Override
    public void updateEntity() {

    }
}
Античит тебе сферу выкидывает, об обходах думай
 
Назад
Сверху Снизу