Исходник AutoEXP Expensive 3.1

Начинающий
Статус
Оффлайн
Регистрация
14 Май 2024
Сообщения
16
Реакции[?]
0
Поинты[?]
0

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
1,229
Реакции[?]
26
Поинты[?]
38K
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
чувак что ты написал блять...
так ещё и изза югейма ты сделал код не рабочим если его копировать потому что югейм думает что ты пингуешь Getter, такие коды надо отсылать через workupload/другой файлообменник(ФАЙЛОМ ЧЕРЕЗ ЮГЕЙМ КТО НЕ ПОНЯЛ БЛЯТТЬ)
а вообще ты нахуй спиздил с Фури(ос) клиента который спиздил ещё у кого то.
1716268569409.png
молодец ответил дед инсайду на норм тему и поддержал его, но сам то постишь что?
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
29 Апр 2023
Сообщения
738
Реакции[?]
4
Поинты[?]
5K
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
сука,ньюреги,что вы творите нахуй? перед тем как обсирать чужие темы,научись хотяб сделать на грамм лучше чем у той темы , которую считаешь "говном"
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
ой ебать,тут еще gpt постарался, /del
 
Начинающий
Статус
Оффлайн
Регистрация
14 Май 2024
Сообщения
16
Реакции[?]
0
Поинты[?]
0
сука,ньюреги,что вы творите нахуй? перед тем как обсирать чужие темы,научись хотяб сделать на грамм лучше чем у той темы , которую считаешь "говном"

ой ебать,тут еще gpt постарался, /del
чувак что ты написал блять...
так ещё и изза югейма ты сделал код не рабочим если его копировать потому что югейм думает что ты пингуешь Getter, такие коды надо отсылать через workupload/другой файлообменник(ФАЙЛОМ ЧЕРЕЗ ЮГЕЙМ КТО НЕ ПОНЯЛ БЛЯТТЬ)
а вообще ты нахуй спиздил с Фури(ос) клиента который спиздил ещё у кого то.
Посмотреть вложение 277248
молодец ответил дед инсайду на норм тему и поддержал его, но сам то постишь что?
ахрыхвхп какой ещё фуриус? Это мне щас что-то говорит человек с кривыми худами?
сука,ньюреги,что вы творите нахуй? перед тем как обсирать чужие темы,научись хотяб сделать на грамм лучше чем у той темы , которую считаешь "говном"

ой ебать,тут еще gpt постарался, /del
ыавхрхывха да ты что, ты же просто сменил цвет худа и пишешь новый ИНТЕРФЕЙС хапхвах позорище.
 
Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
1,229
Реакции[?]
26
Поинты[?]
38K
ахрыхвхп какой ещё фуриус? Это мне щас что-то говорит человек с кривыми худами?

ыавхрхывха да ты что, ты же просто сменил цвет худа и пишешь новый ИНТЕРФЕЙС хапхвах позорище.
ебать чел, у тебя как минимум коментарии теже что и у фури клиента, ой тута не то была
ахрыхвхп какой ещё фуриус? Это мне щас что-то говорит человек с кривыми худами?

ыавхрхывха да ты что, ты же просто сменил цвет худа и пишешь новый ИНТЕРФЕЙС хапхвах позорище.
специально для тебя скачаю срс фури клиента и скину тебе скрины, где ты точь в точь спиздил и выдал за своё
103 строка, комментарий ChatGPT (взял с фури клиента)
1716270168451.png

твоя хуйня:
1716270192530.png
103 строка тот же комментарий(112 ТАК ЖЕ БЛЯТЬ)
так ты ещё и код нормально вставить не смог)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
14 Май 2024
Сообщения
16
Реакции[?]
0
Поинты[?]
0
ебать чел, у тебя как минимум коментарии теже что и у фури клиента, ой тута не то была

специально для тебя скачаю срс фури клиента и скину тебе скрины, где ты точь в точь спиздил и выдал за своё
103 строка, комментарий ChatGPT (взял с фури клиента)
Посмотреть вложение 277252

твоя хуйня:
Посмотреть вложение 277253
103 строка тот же комментарий(112 ТАК ЖЕ БЛЯТЬ)
так ты ещё и код нормально вставить не смог)
это мне щас сказал пастер который передо-мной на коленях бегает?
ебать чел, у тебя как минимум коментарии теже что и у фури клиента, ой тута не то была

специально для тебя скачаю срс фури клиента и скину тебе скрины, где ты точь в точь спиздил и выдал за своё
103 строка, комментарий ChatGPT (взял с фури клиента)
Посмотреть вложение 277252

твоя хуйня:
Посмотреть вложение 277253
103 строка тот же комментарий(112 ТАК ЖЕ БЛЯТЬ)
так ты ещё и код нормально вставить не смог)
если ты хоть что-то нормально научишься делать а не свои криворукие, убогие ВАТЕРМАРКИ СТАФФЛИСТЫ и т.д дерьмо всякое то тогда посмотрим на что ты способен
 
Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
1,229
Реакции[?]
26
Поинты[?]
38K
это мне щас сказал пастер который передо-мной на коленях бегает?

если ты хоть что-то нормально научишься делать а не свои криворукие, убогие ВАТЕРМАРКИ СТАФФЛИСТЫ и т.д дерьмо всякое то тогда посмотрим на что ты способен
1716270897797.png
в отличии от твоей хуйни я хоть что то сделал
как минимум акк в 21 году)
а вообще кинь свой дискордик, посмотрим у кого, что убогое
 
Начинающий
Статус
Оффлайн
Регистрация
29 Апр 2023
Сообщения
738
Реакции[?]
4
Поинты[?]
5K
это мне щас сказал пастер который передо-мной на коленях бегает?

если ты хоть что-то нормально научишься делать а не свои криворукие, убогие ВАТЕРМАРКИ СТАФФЛИСТЫ и т.д дерьмо всякое то тогда посмотрим на что ты способен
дата рега оправдала,ливай с форума,не позорься дальше
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июн 2023
Сообщения
42
Реакции[?]
0
Поинты[?]
0
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
аааааа блядь мои глаза
 
Начинающий
Статус
Оффлайн
Регистрация
5 Апр 2023
Сообщения
389
Реакции[?]
1
Поинты[?]
2K
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
/del было
 
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2024
Сообщения
347
Реакции[?]
0
Поинты[?]
1K
Увидел данную тему в nursultan и других клиентах и решил сделать и слить.
java:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventMotion;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.player.InventoryUtil;
import im.expensive.utils.player.MoveUtils;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.item.*;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.potion.*;
import net.minecraft.util.Hand;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;

import java.util.Comparator;
import java.util.List;

@FunctionRegister(name = "AutoEXP", type = Category.Combat)
public class AutoEXP extends Function {
    float previousPitch;
    final StopWatch stopWatch = new StopWatch();

    public AutoEXP() {
    }

    @Subscribe
    public void onMotion(EventMotion e) {
        if (!canThrowPotion()) {
            return;
        }
        if (isActive()) {
            Vector3d posPoint = findNearestCollision();
            Vector2f rotationVector = posPoint == null
                    ? new Vector2f(mc.player.rotationYaw, 90.0F)
                    : MathUtil.rotationToVec(posPoint);

            previousPitch = rotationVector.y;
            e.setYaw(rotationVector.x);
            e.setPitch(previousPitch);
            mc.player.rotationPitchHead = previousPitch;
        }
        e.setPostMotion(() -> {
            boolean pitchIsValid = previousPitch == e.getPitch();
            int oldCurrentItem = mc.player.inventory.currentItem;

            for (AutoEXP.Potions potion : AutoEXP.Potions.values()) {
                potion.state = true;

                if (shouldUsePotion(potion)) {
                    continue;
                }
                if (potion.state && pitchIsValid) {
                    sendPotion(potion);
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(oldCurrentItem));
                    mc.playerController.syncCurrentPlayItem();
                }
            }
        });
    }


    public boolean isActive() {
        boolean timeIsReached = stopWatch.isReached(400);
        for (AutoEXP.Potions potionType : AutoEXP.Potions.values()) {
            if (shouldUsePotion(potionType)) {
                continue;
            }
            if (potionType.isState()) {
                return timeIsReached;
            }
        }
        return false;
    }


    private boolean canThrowPotion() {
        boolean isOnGround = !MoveUtils.isBlockUnder(0.5F) || mc.player.isOnGround();
        boolean timeIsReached = stopWatch.isReached(800);
        boolean ticksExisted = mc.player.ticksExisted > 100;

        return isOnGround && timeIsReached && ticksExisted;
    }
    private boolean shouldUsePotion(AutoEXP.Potions potions) {
        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
            return true;
        }
        int potionId = potions.getId();

        if (findPotionSlot(potionId, true) == -1 && findPotionSlot(potionId, false) == -1) {
            potions.state = false;
            return true;
        }

        // Проверяем, если броня имеет зачарование на починку и прочность меньше 50, то возвращаем true для кидания зельев опыта
        for (ItemStack armorStack : mc.player.getArmorInventoryList()) {
            if (armorStack.isEmpty() || !(armorStack.getItem() instanceof ArmorItem)) {
                continue;
            }
            ArmorItem armorItem = (ArmorItem) armorStack.getItem();
            int maxDamage = armorItem.getMaxDamage();
            int damageLeft = maxDamage - armorStack.getDamage();

            // Если броня имеет зачарование на починку и прочность меньше 50, возвращаем true для кидания зельев опыта
            if (armorStack.isEnchanted() && damageLeft < 50) {
                return true;
            }
        }

        return false;
    }


    private void sendPotion(AutoEXP.Potions potions) {
        int potionId = potions.getId();

        int hotBarSlot = findPotionSlot(potionId, true);
        int inventorySlot = findPotionSlot(potionId, false);

        if (mc.player.isPotionActive(potions.getPotion())) {
            potions.state = false;
        }

        if (hotBarSlot != -1) {
            sendUsePacket(hotBarSlot, Hand.MAIN_HAND);
            return;
        }

        if (inventorySlot != -1) {
            int bestSlotInHotBar = InventoryUtil.getInstance().findBestSlotInHotBar();
            ItemStack inventoryStack = mc.player.inventory.getStackInSlot(inventorySlot);
            ItemStack bestSlotStack = mc.player.inventory.getStackInSlot(bestSlotInHotBar);

            InventoryUtil.moveItem(inventorySlot, bestSlotInHotBar + 36, bestSlotStack.getItem() != Items.AIR);
            sendUsePacket(bestSlotInHotBar, Hand.MAIN_HAND);
        }
    }

    private void sendUsePacket(int slot, Hand hand) {
        mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(Hand.MAIN_HAND);
        previousPitch = 0;
        stopWatch.reset();
    }

    private int findPotionSlot(int id, boolean inHotBar) {
        int start = inHotBar ? 0 : 9;
        int end = inHotBar ? 9 : 36;

        for (int i = start; i < end; i++) {
            ItemStack stack = mc.player.inventory.getStackInSlot(i);

            if (stack.isEmpty()) {
                continue;
            }

            if (!(stack.getItem() instanceof SplashPotionItem)) {
                continue;
            }

            List<EffectInstance> potionEffects = PotionUtils.getEffectsFromStack(stack);

            for (EffectInstance effectInstance : potionEffects) {
                if (effectInstance.getPotion() == Effect.get(id)) {
                    return i;
                }
            }
        }

        return -1;
    }

    private Vector3d findNearestCollision() {
        return mc.world.getCollisionShapes(mc.player, mc.player.getBoundingBox().grow(0.0, 0.5, 0.0))
                .toList()
                .stream()
                .min(Comparator.comparingDouble(box ->
                        box.getBoundingBox().getCenter().squareDistanceTo(mc.player.getPositionVec())))
                .map(box -> box.getBoundingBox().getCenter())
                .orElse(null);
    }

    [USER=270918]@Getter[/USER]
    @FieldDefaults(level = AccessLevel.PRIVATE)
    public enum Potions {
        INSTANT_HEALTH(Effects.INSTANT_HEALTH, 6);

        final Effect potion;
        final int id;
        boolean state;

        Potions(Effect potion, int potionId) {
            this.potion = potion;
            this.id = potionId;
        }
    }
}
[r
хъваъвъа я ща умру гпт код
 
Похожие темы
Сверху Снизу