Вопрос Почему урон в ауре режется

Новичок
Новичок
Статус
Оффлайн
Регистрация
18 Сен 2023
Сообщения
1
Реакции
0
Написал свою первую килку(часть кода спизженна со своего же старого триггербота, часть руками писал, часть гпт). И столкнулся с такой проблемой что в ней беда с регом урона, тычки идут но урон режется и большую часть тычек в целом вообще не регает, почему так?
Java:
Expand Collapse Copy
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.text.StringTextComponent;

import java.util.List;

public class Aura {

    private final Minecraft mc = Minecraft.getInstance();
    private boolean isActive = false;
    private boolean onlyCrit = false;
    private long lastAttackTime = 0;

    private static final double RANGE = 3.0;
    private LivingEntity target;
    private static final long MIN_ATTACK_DELAY_MS = 630;
    private static final long MAX_ATTACK_DELAY_MS = 640;
    private final float fov = 88.0f;
    private final float yawSpeed = 6.0f;
    private final float pitchSpeed = 5.0f;

    public void toggle() {
        isActive = !isActive;
        if (mc.player != null) {
            mc.player.displayClientMessage(new StringTextComponent(isActive ? "Aura Enabled" : "Aura Disabled"), true);
        }
    }

    public void toggleOnlyCrit() {
        onlyCrit = !onlyCrit;
        if (mc.player != null) {
            mc.player.displayClientMessage(new StringTextComponent(onlyCrit ? "OnlyCrit Enabled" : "OnlyCrit Disabled"), true);
        }
    }

    public void onTick() {
        if (!isActive || mc.player == null || mc.level == null || mc.gameMode == null) return;

        try {
            target = findTarget(mc.player, RANGE, fov);
            if (target != null) {
                setRotation(target, yawSpeed, pitchSpeed);
                long attackDelay = MIN_ATTACK_DELAY_MS + (long) (Math.random() * (MAX_ATTACK_DELAY_MS - MIN_ATTACK_DELAY_MS));
                if (canAttack(target) && (System.currentTimeMillis() - lastAttackTime) >= attackDelay) {
                    if (!onlyCrit || isPlayerFalling()) {
                        attackTarget(target);
                        lastAttackTime = System.currentTimeMillis();
                    }
                }
            }
        } catch (Exception e) {
            isActive = false;
            if (mc.player != null) {
                mc.player.displayClientMessage(new StringTextComponent("Aura Error: " + e.getMessage()), true);
            }
        }
    }

    private boolean isPlayerFalling() {
        return mc.player.fallDistance > 0 && !mc.player.isOnGround();
    }

    private LivingEntity findTarget(ClientPlayerEntity player, double distance, double fov) {
        List<Entity> entities = mc.level.getEntities(mc.player, mc.player.getBoundingBox().inflate(distance),
                entity -> entity instanceof LivingEntity && entity != mc.player && entity.isAlive());

        for (Entity entity : entities) {
            LivingEntity potentialTarget = (LivingEntity) entity;
            double angle = Math.acos(player.getLookAngle().dot(potentialTarget.position().subtract(player.position()).normalize())) * (180D / Math.PI);
            if (angle <= fov) {
                return potentialTarget;
            }
        }
        return null;
    }

    private void setRotation(LivingEntity target, float rotationYawSpeed, float rotationPitchSpeed) {
        double deltaX = target.getX() - mc.player.getX();
        double deltaY = target.getY() + target.getBbHeight() / 2 - mc.player.getEyeY();
        double deltaZ = target.getZ() - mc.player.getZ();

        double distanceXZ = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
        float rawYaw = (float) (Math.atan2(-deltaX, deltaZ) * (180 / Math.PI));
        float rawPitch = (float) MathHelper.clamp(
                Math.toDegrees(Math.asin(-deltaY / Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ))),
                -89,
                89
        );

        float yawDelta = MathHelper.wrapDegrees(rawYaw - mc.player.yHeadRot);
        float pitchDelta = rawPitch - mc.player.xRot;

      
        mc.player.yHeadRot += yawDelta * 0.2f;
        
        mc.player.yBodyRot = mc.player.yRot;
    }

    private boolean canAttack(LivingEntity target) {
        if (mc.player.isUsingItem()) return false;

        Vector3d eyePos = mc.player.getEyePosition(1.0F);
        Vector3d targetPos = new Vector3d(target.getX(), target.getY() + target.getBbHeight() / 2, target.getZ());
        return mc.level.clip(new net.minecraft.util.math.RayTraceContext(
                eyePos, targetPos, net.minecraft.util.math.RayTraceContext.BlockMode.COLLIDER,
                net.minecraft.util.math.RayTraceContext.FluidMode.NONE, mc.player
        )).getType() == net.minecraft.util.math.RayTraceResult.Type.MISS;
    }

    private void attackTarget(LivingEntity target) {
        if (!canAttack(target)) return;

        if (mc.gameMode != null && target != null) {
            mc.gameMode.attack(mc.player, target);
            mc.player.swing(Hand.MAIN_HAND);
        }
    }
}
Не бейте палками пж, я в кодинге меньше полугода и мало что понимаю.
(А еще в ней неистово дергается голова xD)
 
Назад
Сверху Снизу