Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала Spear Target fabric 1.21.11

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2025
Сообщения
164
Реакции
11
Выберите загрузчик игры
  1. Fabric
Намешано много говнокода, но в принципе функция прикольная, да и, может, кто-то возьмёт. :roflanBuldiga:

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

Код:
Expand Collapse Copy
package trollhack.dev.module.impl.misc;

import com.google.common.eventbus.Subscribe;
import trollhack.dev.event.api.EventType;
import trollhack.dev.event.impl.game.EventPlayerTick;
import trollhack.dev.event.impl.player.RotationUpdateEvent;
import trollhack.dev.module.api.Category;
import trollhack.dev.module.api.Function;
import trollhack.dev.module.api.ModuleInfo;
import trollhack.dev.module.impl.combat.furry.Angle;
import trollhack.dev.module.impl.combat.furry.AngleUtil;
import trollhack.dev.module.impl.combat.furry.RotationConfig;
import trollhack.dev.module.impl.combat.furry.RotationController;
import trollhack.dev.module.setting.impl.BooleanSetting;
import trollhack.dev.module.setting.impl.NumberSetting;
import trollhack.dev.util.Script.TaskPriority;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.FireworkRocketItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;

import static ficality.dev.util.wrapper.Wrapper.mc;

@ModuleInfo(name = "SpearTarget", category = Category.MISC, desc = "Автоматически использует фейерверки для полета за целью с копьем/Capio")
public class SpearTarget extends Function {

    private final NumberSetting range           = new NumberSetting("Дальность цели",           this, 50.0, 10.0, 100.0, 5.0);
    private final NumberSetting fireworkDelay   = new NumberSetting("Задержка фейерверка",      this, 5,    1,    20,    1);
    private final BooleanSetting requireSpear   = new BooleanSetting("Требовать копье",         this, true);
    private final BooleanSetting autoTarget     = new BooleanSetting("Авто-цель",              this, true);
    private final BooleanSetting onlyPlayers    = new BooleanSetting("Только игроки",           this, false);
    private final BooleanSetting useFireworks   = new BooleanSetting("Использовать фейерверки", this, true);
    private final BooleanSetting silentRotation = new BooleanSetting("Тихое вращение",          this, true);
    private final BooleanSetting autoLaunch     = new BooleanSetting("Авто-взлёт",              this, true);
    private final BooleanSetting capioCharge    = new BooleanSetting("Заряд Capio (ПКМ)",       this, true);

    
    private static final RotationConfig SILENT_CONFIG = new RotationConfig(false, false);

    private LivingEntity target   = null;
    private int  fireworkTimer    = 0;
    
    private boolean elytraFlying  = false;
    private int     flyingTicks   = 0;

    public SpearTarget() {
        addSettings(range, fireworkDelay, requireSpear, autoTarget,
                onlyPlayers, useFireworks, silentRotation, autoLaunch, capioCharge);
    }

    @Subscribe
    public void onRotationUpdate(RotationUpdateEvent event) {
      
        if (event.getType() != EventType.PRE) return;
        if (!silentRotation.getValue()) return;
        if (mc.player == null || target == null || !isValidTarget(target)) return;
        if (!elytraFlying) return;

        Angle targetAngle = AngleUtil.calculateAngle(target.getEyePos());
        RotationController.INSTANCE.rotateTo(targetAngle, 1, SILENT_CONFIG, TaskPriority.STANDARD, this);
    }

    
    @Subscribe
    public void onTick(EventPlayerTick event) {
        if (mc.player == null || mc.world == null) return;

        if (fireworkTimer > 0) fireworkTimer--;

        
        if (autoTarget.getValue()) findTarget();

        
        boolean hasElytra    = hasElytraEquipped();
        boolean onGround     = mc.player.isOnGround();
        Vec3d   vel          = mc.player.getVelocity();
        double  horizSpeedSq = vel.x * vel.x + vel.z * vel.z;

        if (hasElytra && !onGround) {
            flyingTicks++;
            
            elytraFlying = (elytraFlying && flyingTicks > 0) || horizSpeedSq > 0.01;
        } else {
            elytraFlying = false;
            flyingTicks  = 0;
        }

        boolean holdingWeapon = isHoldingSpear();

      
        if (autoLaunch.getValue() && holdingWeapon && hasElytra && !onGround && !elytraFlying) {
            if (tryLaunchElytra()) {
              
                elytraFlying = true;
                flyingTicks  = 1;
            }
        }

        
        if (capioCharge.getValue() && elytraFlying && isCapioInMainHand()) {
            mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        }

        
        if (useFireworks.getValue() && elytraFlying && target != null
                && isValidTarget(target) && fireworkTimer <= 0) {
            if (requireSpear.getValue() && !holdingWeapon) return;
            useFirework();
        }
    }

        private void useFirework() {
        
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
    }

    
    private boolean tryLaunchElytra() {
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return true;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return false;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
        return true;
    }

    private boolean hasElytraEquipped() {
        if (mc.player == null) return false;
        return mc.player.getEquippedStack(EquipmentSlot.CHEST).getItem() == Items.ELYTRA;
    }

    private void findTarget() {
        if (mc.player == null || mc.world == null) return;

        LivingEntity best     = null;
        double       bestDist = range.getValue();

        for (Entity entity : mc.world.getEntities()) {
            if (!(entity instanceof LivingEntity living)) continue;
            if (entity == mc.player) continue;
            if (!isValidTarget(living)) continue;
            double d = mc.player.distanceTo(entity);
            if (d < bestDist) { bestDist = d; best = living; }
        }
        target = best;
    }

    private boolean isValidTarget(LivingEntity entity) {
        if (entity == null || entity == mc.player) return false;
        if (!entity.isAlive()) return false;
        if (entity.distanceTo(mc.player) > range.getValue()) return false;
        if (onlyPlayers.getValue() && !(entity instanceof PlayerEntity)) return false;
        if (!mc.player.canSee(entity)) return false;
        return true;
    }

    private boolean isHoldingSpear() {
        if (mc.player == null) return false;
        return isSpearItem(mc.player.getMainHandStack())
                || isSpearItem(mc.player.getOffHandStack());
    }

    private boolean isCapioInMainHand() {
        if (mc.player == null) return false;
        return isCapioItem(mc.player.getMainHandStack());
    }

    private boolean isSpearItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        if (stack.getItem() == Items.TRIDENT) return true;
        return isCapioItem(stack);
    }

    private boolean isCapioItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        String name = stack.getItem().toString().toLowerCase();
        return name.contains("netherite_spear") || name.contains("netherite_spear");
    }

    private int findFireworksSlotExcluding(int excludeSlot) {
        if (mc.player == null) return -1;
        for (int i = 0; i < 9; i++) {
            if (i == excludeSlot) continue;
            if (mc.player.getInventory().getStack(i).getItem() instanceof FireworkRocketItem)
                return i;
        }
        return -1;
    }

    public LivingEntity getTarget() { return target; }

    @Override
    public void onEnable() {
        super.onEnable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
        RotationController.INSTANCE.clear();
    }
}
 
Намешано много говнокода, но в принципе функция прикольная, да и, может, кто-то возьмёт. :roflanBuldiga:

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

Код:
Expand Collapse Copy
package trollhack.dev.module.impl.misc;

import com.google.common.eventbus.Subscribe;
import trollhack.dev.event.api.EventType;
import trollhack.dev.event.impl.game.EventPlayerTick;
import trollhack.dev.event.impl.player.RotationUpdateEvent;
import trollhack.dev.module.api.Category;
import trollhack.dev.module.api.Function;
import trollhack.dev.module.api.ModuleInfo;
import trollhack.dev.module.impl.combat.furry.Angle;
import trollhack.dev.module.impl.combat.furry.AngleUtil;
import trollhack.dev.module.impl.combat.furry.RotationConfig;
import trollhack.dev.module.impl.combat.furry.RotationController;
import trollhack.dev.module.setting.impl.BooleanSetting;
import trollhack.dev.module.setting.impl.NumberSetting;
import trollhack.dev.util.Script.TaskPriority;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.FireworkRocketItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;

import static ficality.dev.util.wrapper.Wrapper.mc;

@ModuleInfo(name = "SpearTarget", category = Category.MISC, desc = "Автоматически использует фейерверки для полета за целью с копьем/Capio")
public class SpearTarget extends Function {

    private final NumberSetting range           = new NumberSetting("Дальность цели",           this, 50.0, 10.0, 100.0, 5.0);
    private final NumberSetting fireworkDelay   = new NumberSetting("Задержка фейерверка",      this, 5,    1,    20,    1);
    private final BooleanSetting requireSpear   = new BooleanSetting("Требовать копье",         this, true);
    private final BooleanSetting autoTarget     = new BooleanSetting("Авто-цель",              this, true);
    private final BooleanSetting onlyPlayers    = new BooleanSetting("Только игроки",           this, false);
    private final BooleanSetting useFireworks   = new BooleanSetting("Использовать фейерверки", this, true);
    private final BooleanSetting silentRotation = new BooleanSetting("Тихое вращение",          this, true);
    private final BooleanSetting autoLaunch     = new BooleanSetting("Авто-взлёт",              this, true);
    private final BooleanSetting capioCharge    = new BooleanSetting("Заряд Capio (ПКМ)",       this, true);

   
    private static final RotationConfig SILENT_CONFIG = new RotationConfig(false, false);

    private LivingEntity target   = null;
    private int  fireworkTimer    = 0;
   
    private boolean elytraFlying  = false;
    private int     flyingTicks   = 0;

    public SpearTarget() {
        addSettings(range, fireworkDelay, requireSpear, autoTarget,
                onlyPlayers, useFireworks, silentRotation, autoLaunch, capioCharge);
    }

    @Subscribe
    public void onRotationUpdate(RotationUpdateEvent event) {
     
        if (event.getType() != EventType.PRE) return;
        if (!silentRotation.getValue()) return;
        if (mc.player == null || target == null || !isValidTarget(target)) return;
        if (!elytraFlying) return;

        Angle targetAngle = AngleUtil.calculateAngle(target.getEyePos());
        RotationController.INSTANCE.rotateTo(targetAngle, 1, SILENT_CONFIG, TaskPriority.STANDARD, this);
    }

   
    @Subscribe
    public void onTick(EventPlayerTick event) {
        if (mc.player == null || mc.world == null) return;

        if (fireworkTimer > 0) fireworkTimer--;

       
        if (autoTarget.getValue()) findTarget();

       
        boolean hasElytra    = hasElytraEquipped();
        boolean onGround     = mc.player.isOnGround();
        Vec3d   vel          = mc.player.getVelocity();
        double  horizSpeedSq = vel.x * vel.x + vel.z * vel.z;

        if (hasElytra && !onGround) {
            flyingTicks++;
           
            elytraFlying = (elytraFlying && flyingTicks > 0) || horizSpeedSq > 0.01;
        } else {
            elytraFlying = false;
            flyingTicks  = 0;
        }

        boolean holdingWeapon = isHoldingSpear();

     
        if (autoLaunch.getValue() && holdingWeapon && hasElytra && !onGround && !elytraFlying) {
            if (tryLaunchElytra()) {
             
                elytraFlying = true;
                flyingTicks  = 1;
            }
        }

       
        if (capioCharge.getValue() && elytraFlying && isCapioInMainHand()) {
            mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        }

       
        if (useFireworks.getValue() && elytraFlying && target != null
                && isValidTarget(target) && fireworkTimer <= 0) {
            if (requireSpear.getValue() && !holdingWeapon) return;
            useFirework();
        }
    }

        private void useFirework() {
       
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
    }

   
    private boolean tryLaunchElytra() {
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return true;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return false;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
        return true;
    }

    private boolean hasElytraEquipped() {
        if (mc.player == null) return false;
        return mc.player.getEquippedStack(EquipmentSlot.CHEST).getItem() == Items.ELYTRA;
    }

    private void findTarget() {
        if (mc.player == null || mc.world == null) return;

        LivingEntity best     = null;
        double       bestDist = range.getValue();

        for (Entity entity : mc.world.getEntities()) {
            if (!(entity instanceof LivingEntity living)) continue;
            if (entity == mc.player) continue;
            if (!isValidTarget(living)) continue;
            double d = mc.player.distanceTo(entity);
            if (d < bestDist) { bestDist = d; best = living; }
        }
        target = best;
    }

    private boolean isValidTarget(LivingEntity entity) {
        if (entity == null || entity == mc.player) return false;
        if (!entity.isAlive()) return false;
        if (entity.distanceTo(mc.player) > range.getValue()) return false;
        if (onlyPlayers.getValue() && !(entity instanceof PlayerEntity)) return false;
        if (!mc.player.canSee(entity)) return false;
        return true;
    }

    private boolean isHoldingSpear() {
        if (mc.player == null) return false;
        return isSpearItem(mc.player.getMainHandStack())
                || isSpearItem(mc.player.getOffHandStack());
    }

    private boolean isCapioInMainHand() {
        if (mc.player == null) return false;
        return isCapioItem(mc.player.getMainHandStack());
    }

    private boolean isSpearItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        if (stack.getItem() == Items.TRIDENT) return true;
        return isCapioItem(stack);
    }

    private boolean isCapioItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        String name = stack.getItem().toString().toLowerCase();
        return name.contains("netherite_spear") || name.contains("netherite_spear");
    }

    private int findFireworksSlotExcluding(int excludeSlot) {
        if (mc.player == null) return -1;
        for (int i = 0; i < 9; i++) {
            if (i == excludeSlot) continue;
            if (mc.player.getInventory().getStack(i).getItem() instanceof FireworkRocketItem)
                return i;
        }
        return -1;
    }

    public LivingEntity getTarget() { return target; }

    @Override
    public void onEnable() {
        super.onEnable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
        RotationController.INSTANCE.clear();
    }
}
хзхз
 
Намешано много говнокода, но в принципе функция прикольная, да и, может, кто-то возьмёт. :roflanBuldiga:

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

Код:
Expand Collapse Copy
package trollhack.dev.module.impl.misc;

import com.google.common.eventbus.Subscribe;
import trollhack.dev.event.api.EventType;
import trollhack.dev.event.impl.game.EventPlayerTick;
import trollhack.dev.event.impl.player.RotationUpdateEvent;
import trollhack.dev.module.api.Category;
import trollhack.dev.module.api.Function;
import trollhack.dev.module.api.ModuleInfo;
import trollhack.dev.module.impl.combat.furry.Angle;
import trollhack.dev.module.impl.combat.furry.AngleUtil;
import trollhack.dev.module.impl.combat.furry.RotationConfig;
import trollhack.dev.module.impl.combat.furry.RotationController;
import trollhack.dev.module.setting.impl.BooleanSetting;
import trollhack.dev.module.setting.impl.NumberSetting;
import trollhack.dev.util.Script.TaskPriority;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.FireworkRocketItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.Vec3d;

import static ficality.dev.util.wrapper.Wrapper.mc;

@ModuleInfo(name = "SpearTarget", category = Category.MISC, desc = "Автоматически использует фейерверки для полета за целью с копьем/Capio")
public class SpearTarget extends Function {

    private final NumberSetting range           = new NumberSetting("Дальность цели",           this, 50.0, 10.0, 100.0, 5.0);
    private final NumberSetting fireworkDelay   = new NumberSetting("Задержка фейерверка",      this, 5,    1,    20,    1);
    private final BooleanSetting requireSpear   = new BooleanSetting("Требовать копье",         this, true);
    private final BooleanSetting autoTarget     = new BooleanSetting("Авто-цель",              this, true);
    private final BooleanSetting onlyPlayers    = new BooleanSetting("Только игроки",           this, false);
    private final BooleanSetting useFireworks   = new BooleanSetting("Использовать фейерверки", this, true);
    private final BooleanSetting silentRotation = new BooleanSetting("Тихое вращение",          this, true);
    private final BooleanSetting autoLaunch     = new BooleanSetting("Авто-взлёт",              this, true);
    private final BooleanSetting capioCharge    = new BooleanSetting("Заряд Capio (ПКМ)",       this, true);

   
    private static final RotationConfig SILENT_CONFIG = new RotationConfig(false, false);

    private LivingEntity target   = null;
    private int  fireworkTimer    = 0;
   
    private boolean elytraFlying  = false;
    private int     flyingTicks   = 0;

    public SpearTarget() {
        addSettings(range, fireworkDelay, requireSpear, autoTarget,
                onlyPlayers, useFireworks, silentRotation, autoLaunch, capioCharge);
    }

    @Subscribe
    public void onRotationUpdate(RotationUpdateEvent event) {
     
        if (event.getType() != EventType.PRE) return;
        if (!silentRotation.getValue()) return;
        if (mc.player == null || target == null || !isValidTarget(target)) return;
        if (!elytraFlying) return;

        Angle targetAngle = AngleUtil.calculateAngle(target.getEyePos());
        RotationController.INSTANCE.rotateTo(targetAngle, 1, SILENT_CONFIG, TaskPriority.STANDARD, this);
    }

   
    @Subscribe
    public void onTick(EventPlayerTick event) {
        if (mc.player == null || mc.world == null) return;

        if (fireworkTimer > 0) fireworkTimer--;

       
        if (autoTarget.getValue()) findTarget();

       
        boolean hasElytra    = hasElytraEquipped();
        boolean onGround     = mc.player.isOnGround();
        Vec3d   vel          = mc.player.getVelocity();
        double  horizSpeedSq = vel.x * vel.x + vel.z * vel.z;

        if (hasElytra && !onGround) {
            flyingTicks++;
           
            elytraFlying = (elytraFlying && flyingTicks > 0) || horizSpeedSq > 0.01;
        } else {
            elytraFlying = false;
            flyingTicks  = 0;
        }

        boolean holdingWeapon = isHoldingSpear();

     
        if (autoLaunch.getValue() && holdingWeapon && hasElytra && !onGround && !elytraFlying) {
            if (tryLaunchElytra()) {
             
                elytraFlying = true;
                flyingTicks  = 1;
            }
        }

       
        if (capioCharge.getValue() && elytraFlying && isCapioInMainHand()) {
            mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        }

       
        if (useFireworks.getValue() && elytraFlying && target != null
                && isValidTarget(target) && fireworkTimer <= 0) {
            if (requireSpear.getValue() && !holdingWeapon) return;
            useFirework();
        }
    }

        private void useFirework() {
       
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
    }

   
    private boolean tryLaunchElytra() {
        if (mc.player.getOffHandStack().getItem() instanceof FireworkRocketItem) {
            mc.interactionManager.interactItem(mc.player, Hand.OFF_HAND);
            fireworkTimer = fireworkDelay.getValue().intValue();
            return true;
        }

        int weaponSlot = mc.player.getInventory().selectedSlot;
        int fwSlot     = findFireworksSlotExcluding(weaponSlot);
        if (fwSlot == -1) return false;

        mc.player.getInventory().selectedSlot = fwSlot;
        mc.interactionManager.interactItem(mc.player, Hand.MAIN_HAND);
        mc.player.getInventory().selectedSlot = weaponSlot;

        fireworkTimer = fireworkDelay.getValue().intValue();
        return true;
    }

    private boolean hasElytraEquipped() {
        if (mc.player == null) return false;
        return mc.player.getEquippedStack(EquipmentSlot.CHEST).getItem() == Items.ELYTRA;
    }

    private void findTarget() {
        if (mc.player == null || mc.world == null) return;

        LivingEntity best     = null;
        double       bestDist = range.getValue();

        for (Entity entity : mc.world.getEntities()) {
            if (!(entity instanceof LivingEntity living)) continue;
            if (entity == mc.player) continue;
            if (!isValidTarget(living)) continue;
            double d = mc.player.distanceTo(entity);
            if (d < bestDist) { bestDist = d; best = living; }
        }
        target = best;
    }

    private boolean isValidTarget(LivingEntity entity) {
        if (entity == null || entity == mc.player) return false;
        if (!entity.isAlive()) return false;
        if (entity.distanceTo(mc.player) > range.getValue()) return false;
        if (onlyPlayers.getValue() && !(entity instanceof PlayerEntity)) return false;
        if (!mc.player.canSee(entity)) return false;
        return true;
    }

    private boolean isHoldingSpear() {
        if (mc.player == null) return false;
        return isSpearItem(mc.player.getMainHandStack())
                || isSpearItem(mc.player.getOffHandStack());
    }

    private boolean isCapioInMainHand() {
        if (mc.player == null) return false;
        return isCapioItem(mc.player.getMainHandStack());
    }

    private boolean isSpearItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        if (stack.getItem() == Items.TRIDENT) return true;
        return isCapioItem(stack);
    }

    private boolean isCapioItem(ItemStack stack) {
        if (stack == null || stack.isEmpty()) return false;
        String name = stack.getItem().toString().toLowerCase();
        return name.contains("netherite_spear") || name.contains("netherite_spear");
    }

    private int findFireworksSlotExcluding(int excludeSlot) {
        if (mc.player == null) return -1;
        for (int i = 0; i < 9; i++) {
            if (i == excludeSlot) continue;
            if (mc.player.getInventory().getStack(i).getItem() instanceof FireworkRocketItem)
                return i;
        }
        return -1;
    }

    public LivingEntity getTarget() { return target; }

    @Override
    public void onEnable() {
        super.onEnable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        target       = null;
        fireworkTimer = 0;
        elytraFlying = false;
        flyingTicks  = 0;
        RotationController.INSTANCE.clear();
    }
}
Почему такой стиль кода так странно выглядит 🥲
 
Назад
Сверху Снизу