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

Обход античита Обход SpookyTime AttackAura V2 (GPT)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
21 Ноя 2024
Сообщения
111
Реакции
1
Выберите загрузчик игры
  1. Vanilla
  2. Forge
  3. Fabric
  4. NeoForge
  5. OptiFine
  6. ForgeOptiFine
  7. Прочие моды
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
 
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
спасибо за обход дуэлей на который килка matrix обычная обходит /del
 
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
гпт опус 4.7
 
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
зачем тебе аттакаура помойму отдельным модулем?
 
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
Как ты заставил опус 4.7 киллку писать?
 
Итак, всем привет! Это мой очередной пост с килаурой под SpookyTime DUELS. Не знаю, что на анархии, не тестил. На данный момент дуэльки фулл обходит, ни одного бана, ни кика не было. Юзал GPT Opus 4.7. Иногда бывают микро фотки, чота там, но это фиксится, если надо, напастиТЕ.

(Не надо пиздеть, что я с нищим нуклеаром играю, я взял его чисто по приколу, чтобы вы видели, что у меня чит говно.)


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


Java:
Expand Collapse Copy
package nuclear.module.impl.combat;

import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.potion.Effects;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector2f;
import net.minecraft.util.math.vector.Vector3d;
import nuclear.control.Manager;
import nuclear.control.events.Event;
import nuclear.control.events.impl.player.EventInput;
import nuclear.control.events.impl.player.EventMotion;
import nuclear.control.events.impl.player.EventUpdate;
import nuclear.module.TypeList;
import nuclear.module.api.Annotation;
import nuclear.module.api.Module;
import nuclear.module.settings.imp.BooleanSetting;
import nuclear.module.settings.imp.ModeSetting;
import nuclear.module.settings.imp.MultiBoxSetting;
import nuclear.module.settings.imp.SliderSetting;
import nuclear.utils.move.MoveUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

@Annotation(
        name = "AttackAura",
        type = TypeList.Combat,
        desc = "AttackAura + SmartCrit (SpookyTime Max-Damage 2026)"
)
public class AttackAura extends Module {

    // ── Публичное состояние ──────────────────────────────────────────────────
    public static volatile LivingEntity target;
    public static volatile Vector2f rotate = new Vector2f(0.0F, 0.0F);

    // ── Приватное состояние ──────────────────────────────────────────────────
    private final Random rng = new Random();

    private int     groundAttackDelay = 0;
    private boolean critHitThisCycle  = false;
    private int     postAttackLock    = 0;
    private int     targetLockTicks   = 0;
    private LivingEntity lockedTarget = null;

    // Анти-телепорт
    private double  lastPosX          = 0.0;
    private double  lastPosY          = 0.0;
    private double  lastPosZ          = 0.0;
    private boolean positionInit      = false;

    // W-tap
    private boolean wTapRelease = false;
    private int     wTapTimer   = 0;

    // Визуальные эффекты (только для визуала)
    private float visualNoise = 0.0F;
    private int   visualNoiseTimer = 0;
    private float visualJitterYaw = 0.0F;
    private float visualJitterPitch = 0.0F;
    private int   visualJitterTimer = 0;

    // Динамические пороги
    private float currentCritFallDist      = 0.12F;
    private float currentCooldownThreshold = 0.98F;

    private int extraAttackDelay = 0;

    // ── Константы ────────────────────────────────────────────────────────────
    private static final int   GROUND_DELAY_BASE      = 5;
    private static final int   GROUND_DELAY_EXTRA     = 4;
    private static final int   W_TAP_TICKS            = 2;
    private static final int   POST_ATTACK_LOCK_TICKS = 1;
    private static final int   TARGET_LOCK_TICKS      = 8;
    private static final double TP_DETECT_DISTANCE    = 8.0;
    private static final float  GAUSSIAN_CLAMP        = 2.0F;

    // ── ВИДИМЫЕ настройки ─────────────────────────────────────────────────────
    public final ModeSetting sortingMode = new ModeSetting(
            "Сортировка", "Поле зрения",
            "Дистанция", "Здоровье", "Поле зрения"
    );

    public final ModeSetting sprintMode = new ModeSetting(
            "Спринт", "Легитный",
            "Обычный", "Легитный"
    );

    public final ModeSetting attackMode = new ModeSetting(
            "Режим атаки", "УмныеКриты",
            "Обычный", "ТолькоКриты", "УмныеКриты"
    );

    public final SliderSetting attackDistance = new SliderSetting(
            "Дистанция", 3.1F, 2.5F, 6.0F, 0.1F
    );

    public final SliderSetting rotationSpeed = new SliderSetting(
            "Скорость ротации", 30.0F, 5.0F, 40.0F, 1.0F
    );

    public final MultiBoxSetting targetFilters = new MultiBoxSetting(
            "Цели",
            new BooleanSetting("Игроки",    true),
            new BooleanSetting("Мобы",      true),
            new BooleanSetting("Животные",  false),
            new BooleanSetting("Невидимки", true)
    );

    public final MultiBoxSetting featureSettings = new MultiBoxSetting(
            "Настройки",
            new BooleanSetting("Водная коррекция", false),
            new BooleanSetting("Сквозь стены",     false),
            new BooleanSetting("Не бить при еде",  true)
    );

    public AttackAura() {
        addSettings(sortingMode, sprintMode, attackMode,
                attackDistance, rotationSpeed,
                targetFilters, featureSettings);
    }

    public static LivingEntity getTarget() {
        return target;
    }

    // ── Основной обработчик ───────────────────────────────────────────────────
    @Override
    public boolean onEvent(Event event) {
        if (!isClientReady()) return false;

        if (event instanceof EventInput) {
            handleInput((EventInput) event);
            return false;
        }

        if (event instanceof EventMotion) {
            handleMotion((EventMotion) event);
            return false;
        }

        if (!(event instanceof EventUpdate)) return false;

        if (detectTeleport()) {
            critHitThisCycle = false;
            postAttackLock = 0;
            targetLockTicks = 0;
            lockedTarget = null;
        }

        if (mc.player.fallDistance == 0.0F && mc.player.isOnGround()) {
            critHitThisCycle = false;
        }

        if (postAttackLock > 0) postAttackLock--;
        if (targetLockTicks > 0) targetLockTicks--;

        updateVisualNoise();
        tickWTap();
        tickVisualJitter();

        LivingEntity newTarget = selectTarget();
        if (newTarget == null) {
            resetState();
            return false;
        }

        // [ФИКС HitSelect] Если цель сменилась — сбрасываем счётчики
        if (lockedTarget != newTarget) {
            lockedTarget = newTarget;
            critHitThisCycle = false;
            groundAttackDelay = 0;
        }

        target = newTarget;
        applySnapRotation(target);
        handleAttack(target);

        return false;
    }

    private LivingEntity selectTarget() {
        if (targetLockTicks > 0 && target != null && isStillValid(target)) {
            return target;
        }
        LivingEntity fresh = findBestTarget();
        if (fresh != null) {
            targetLockTicks = TARGET_LOCK_TICKS;
        }
        return fresh;
    }

    private boolean isStillValid(LivingEntity entity) {
        if (entity == null || mc.player == null) return false;
        if (!entity.isAlive() || entity.getHealth() <= 0) return false;
        double range = attackDistance.getValue().doubleValue() + 0.5;
        return mc.player.getDistance(entity) <= range;
    }

    private boolean detectTeleport() {
        if (mc.player == null) return false;
        double x = mc.player.getPosX();
        double y = mc.player.getPosY();
        double z = mc.player.getPosZ();

        if (!positionInit) {
            lastPosX = x; lastPosY = y; lastPosZ = z;
            positionInit = true;
            return false;
        }

        double dx = x - lastPosX;
        double dy = y - lastPosY;
        double dz = z - lastPosZ;
        double delta = Math.sqrt(dx * dx + dy * dy + dz * dz);

        lastPosX = x; lastPosY = y; lastPosZ = z;

        return delta > TP_DETECT_DISTANCE;
    }

    private void handleInput(EventInput input) {
        if (target != null && rotate != null) {
            MoveUtil.fixMovement(input, rotate.x);
        }
        if (wTapRelease) {
            input.setForward(0);
        }
    }

    private void handleMotion(EventMotion motion) {
        if (target != null && rotate != null) {
            motion.setYaw(rotate.x);
            motion.setPitch(rotate.y);
            syncVisualRotation(rotate.x + visualNoise + visualJitterYaw,
                    rotate.y + visualJitterPitch);
        }
    }

    private void triggerWTap() {
        wTapRelease = true;
        wTapTimer   = W_TAP_TICKS;
    }

    private void tickWTap() {
        if (wTapRelease && --wTapTimer <= 0) {
            wTapRelease = false;
        }
    }

    private void updateVisualNoise() {
        if (--visualNoiseTimer <= 0) {
            visualNoise = (float) (clampedGaussian() * 0.05F);
            visualNoiseTimer = 2 + rng.nextInt(3);
        }
    }

    private void triggerVisualJitter() {
        visualJitterYaw   = (float) (clampedGaussian() * 0.3F);
        visualJitterPitch = (float) (clampedGaussian() * 0.15F);
        visualJitterTimer = 2;
    }

    private void tickVisualJitter() {
        if (visualJitterTimer > 0) {
            visualJitterTimer--;
            visualJitterYaw *= 0.7F;
            visualJitterPitch *= 0.7F;
        } else {
            visualJitterYaw = 0.0F;
            visualJitterPitch = 0.0F;
        }
    }

    private void randomizeThresholds() {
        // [MAX DAMAGE] Снижен минимальный порог fallDistance для надёжности крита
        currentCritFallDist      = 0.10F + (rng.nextFloat() * 0.12F); // 0.10-0.22
        // [MAX DAMAGE] Поднят cooldown threshold для ~100% урона
        currentCooldownThreshold = 0.97F + (rng.nextFloat() * 0.03F); // 0.97-1.00
    }

    private void refreshExtraDelay() {
        // [ФИКС] Было 1/3 (33%), теперь 1/6 (~16%) — реже режет ритм атак
        extraAttackDelay = rng.nextInt(6) == 0 ? 1 : 0;
    }

    private boolean hasLineOfSight(LivingEntity entity) {
        if (mc.world == null || mc.player == null) return false;
        try {
            Vector3d eye = mc.player.getEyePosition(1.0F);
            AxisAlignedBB aabb = entity.getBoundingBox();
            double cx = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
            double cy = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
            double cz = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);
            Vector3d tgt = new Vector3d(cx, cy, cz);

            RayTraceResult res = mc.world.rayTraceBlocks(
                    new RayTraceContext(eye, tgt,
                            RayTraceContext.BlockMode.COLLIDER,
                            RayTraceContext.FluidMode.NONE,
                            mc.player)
            );
            return res.getType() == RayTraceResult.Type.MISS;
        } catch (Exception e) {
            return true;
        }
    }

    // [НОВОЕ] Проверка Blindness — крит не сработает на серверной стороне
    private boolean hasBlindness() {
        return mc.player != null && mc.player.isPotionActive(Effects.BLINDNESS);
    }

    // ── Логика атаки ─────────────────────────────────────────────────────────
    private void handleAttack(LivingEntity entity) {
        if (postAttackLock > 0) return;
        if (mc.currentScreen != null) return;
        if (mc.playerController == null) return;
        if (mc.player.connection == null) return; // [ФИКС] safety

        if (mc.player.isHandActive() && featureSettings.get("Не бить при еде")) return;

        if (attackMode.is("УмныеКриты")) {
            handleSmartCrit(entity);
        } else if (attackMode.is("ТолькоКриты")) {
            handleOnlyCrit(entity);
        } else {
            if (canAttackBase(entity)) {
                if (getCooldown() >= currentCooldownThreshold) {
                    performAttack(entity);
                }
            }
        }
    }

    // [ФИКС] Используем partialTicks=1.0 для более стабильной проверки полного кд
    private float getCooldown() {
        return mc.player.getCooledAttackStrength(1.0F);
    }

    private void handleOnlyCrit(LivingEntity entity) {
        if (mc.player == null || mc.player.isOnGround() || critHitThisCycle) return;
        if (!canAttackBase(entity)) return;
        if (getCooldown() < currentCooldownThreshold) return;
        if (hasBlindness()) return; // [НОВОЕ] слепота отменяет крит

        double motionY = mc.player.getMotion().y;
        if (motionY >= 0.0 || motionY < -3.0) return;

        if (mc.player.fallDistance >= currentCritFallDist
                && !mc.player.isInWater() && !mc.player.isInLava()
                && !mc.player.isOnLadder() && mc.player.getRidingEntity() == null) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void handleSmartCrit(LivingEntity entity) {
        if (mc.player == null || !canAttackBase(entity)) return;

        // [НОВОЕ] Если слепота — бьём только на земле, в воздухе крита не будет
        if (hasBlindness()) {
            if (mc.player.isOnGround()) attackOnGround(entity);
            return;
        }

        if (mc.player.isOnGround()) {
            attackOnGround(entity);
        } else if (featureSettings.get("Водная коррекция") && (mc.player.isInWater() || mc.player.isInLava())) {
            attackInFluid(entity);
        } else {
            attackInAir(entity);
        }
    }

    private void attackOnGround(LivingEntity entity) {
        if (getCooldown() < currentCooldownThreshold) return;
        if (--groundAttackDelay > 0) return;
        if (extraAttackDelay > 0) { extraAttackDelay--; return; }

        performAttack(entity);

        int delay = GROUND_DELAY_BASE + (int) Math.abs(clampedGaussian() * 1.5);
        groundAttackDelay = Math.max(1, Math.min(delay, GROUND_DELAY_BASE + GROUND_DELAY_EXTRA));
        refreshExtraDelay();
    }

    private void attackInFluid(LivingEntity entity) {
        if (getCooldown() >= currentCooldownThreshold) {
            performAttack(entity);
        }
    }

    private void attackInAir(LivingEntity entity) {
        if (critHitThisCycle) return;
        if (getCooldown() < currentCooldownThreshold) return;

        double motionY = mc.player.getMotion().y;
        boolean falling = motionY < 0.0 && motionY > -3.0;
        boolean fallOk  = mc.player.fallDistance >= currentCritFallDist;
        boolean stable  = !mc.player.isOnLadder() && mc.player.getRidingEntity() == null
                && !mc.player.isInWater() && !mc.player.isInLava();

        if (falling && fallOk && stable) {
            performAttack(entity);
            critHitThisCycle = true;
        }
    }

    private void performAttack(LivingEntity entity) {
        if (entity == null || !entity.isAlive() || entity.getHealth() <= 0) return;
        if (mc.playerController == null || mc.player == null) return;
        if (mc.player.connection == null) return;

        triggerWTap();

        // Ванильный порядок: attack → swing (как делает vanilla Minecraft.clickMouse())
        mc.playerController.attackEntity(mc.player, entity);
        mc.player.swingArm(Hand.MAIN_HAND);

        postAttackLock = POST_ATTACK_LOCK_TICKS;

        triggerVisualJitter();
        randomizeThresholds();
    }

    private boolean canAttackBase(LivingEntity entity) {
        if (entity == null || mc.player == null)             return false;
        if (!entity.isAlive() || entity.getHealth() <= 0.0F) return false;

        // [НОВОЕ] Не атакуем того, на ком едем
        if (entity == mc.player.getRidingEntity())           return false;

        double maxDist = attackDistance.getValue().doubleValue();
        if (mc.player.getDistance(entity) > maxDist) return false;

        if (featureSettings.get("Не бить при еде") && mc.player.isHandActive()) return false;
        if (!featureSettings.get("Сквозь стены") && !hasLineOfSight(entity)) return false;

        return true;
    }

    // ── Ротация (чистая, точно в хитбокс) ─────────────────────────────────────
    private void applySnapRotation(LivingEntity entity) {
        if (mc.player == null || entity == null) return;

        float curYaw   = rotate != null ? rotate.x : mc.player.rotationYaw;
        float curPitch = rotate != null ? rotate.y : mc.player.rotationPitch;

        AxisAlignedBB aabb = entity.getBoundingBox();
        Vector3d eye = mc.player.getEyePosition(1.0F);

        double clX = MathHelper.clamp(eye.x, aabb.minX, aabb.maxX);
        double clY = MathHelper.clamp(eye.y, aabb.minY + 0.1, aabb.maxY - 0.1);
        double clZ = MathHelper.clamp(eye.z, aabb.minZ, aabb.maxZ);

        double dx    = clX - eye.x;
        double dy    = clY - eye.y;
        double dz    = clZ - eye.z;
        double hDist = Math.sqrt(dx * dx + dz * dz);

        float tYaw   = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float tPitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, hDist))), -90.0F, 90.0F
        );

        float dYaw   = MathHelper.wrapDegrees(tYaw - curYaw);
        float dPitch = tPitch - curPitch;

        float maxYawPerTick = 90.0F;
        if (Math.abs(dYaw) > maxYawPerTick) {
            dYaw = Math.signum(dYaw) * maxYawPerTick;
        }

        float snap = MathHelper.clamp(rotationSpeed.getValue().floatValue() / 40.0F, 0.3F, 1.0F);
        float smoothFactor = MathHelper.clamp(
                snap * (0.75F + (float) Math.abs(clampedGaussian()) * 0.15F),
                0.4F, 1.0F
        );

        applyGCD(
                curYaw   + dYaw   * smoothFactor,
                curPitch + dPitch * smoothFactor
        );
    }

    private void applyGCD(float yaw, float pitch) {
        float f   = (float) (mc.gameSettings.mouseSensitivity * 0.6 + 0.2);
        float gcd = f * f * f * 1.2F;

        float deltaYaw = yaw - mc.player.rotationYaw;
        float deltaPitch = pitch - mc.player.rotationPitch;

        float fixedYaw = mc.player.rotationYaw + Math.round(deltaYaw / gcd) * gcd;
        float fixedPitch = mc.player.rotationPitch + Math.round(deltaPitch / gcd) * gcd;

        rotate = new Vector2f(fixedYaw, MathHelper.clamp(fixedPitch, -90.0F, 90.0F));
    }

    private void syncVisualRotation(float yaw, float pitch) {
        if (mc.player == null) return;

        float vYaw   = MathHelper.wrapDegrees(yaw);
        float vPitch = MathHelper.clamp(pitch, -90.0F, 90.0F);

        float bodyDelta = MathHelper.wrapDegrees(vYaw - mc.player.renderYawOffset);
        float bodyStep  = MathHelper.clamp(bodyDelta, -12.0F, 12.0F);

        mc.player.rotationYawHead       = vYaw;
        mc.player.prevRotationYawHead   = vYaw;
        mc.player.rotationPitchHead     = vPitch;
        mc.player.prevRotationPitchHead = vPitch;
        mc.player.renderYawOffset       = mc.player.renderYawOffset + bodyStep;
        mc.player.prevRenderYawOffset   = mc.player.renderYawOffset;
    }

    // ── Поиск и сортировка целей ─────────────────────────────────────────────
    private LivingEntity findBestTarget() {
        if (mc.world == null || mc.player == null) return null;

        double range = attackDistance.getValue().doubleValue();
        List<LivingEntity> candidates = new ArrayList<>();

        try {
            for (Entity ent : mc.world.getAllEntities()) {
                if (ent instanceof LivingEntity) {
                    LivingEntity living = (LivingEntity) ent;
                    if (isValidTarget(living, range)) {
                        candidates.add(living);
                    }
                }
            }
        } catch (Exception e) {
            return null;
        }

        if (candidates.isEmpty()) return null;
        sortTargets(candidates);
        return candidates.get(0);
    }

    private void sortTargets(List<LivingEntity> targets) {
        if (targets.isEmpty() || mc.player == null) return;
        if (sortingMode.is("Здоровье")) {
            targets.sort(Comparator.comparingDouble(LivingEntity::getHealth));
        } else if (sortingMode.is("Поле зрения")) {
            targets.sort(Comparator.comparingDouble(this::getFovDiff));
        } else {
            targets.sort(Comparator.comparingDouble(e -> mc.player.getDistance(e)));
        }
    }

    private boolean isValidTarget(LivingEntity living, double range) {
        if (living == null || mc.player == null)           return false;
        if (living == mc.player)                           return false;
        if (living == mc.player.getRidingEntity())         return false; // [НОВОЕ]
        if (!living.isAlive() || living.getHealth() <= 0) return false;
        if (mc.player.getDistance(living) > range)        return false;
        if (!targetFilters.get("Невидимки") && living.isInvisible()) return false;
        if (!featureSettings.get("Сквозь стены") && !mc.player.canEntityBeSeen(living)) return false;

        if (living instanceof PlayerEntity) {
            return !isFriend(living) && targetFilters.get("Игроки");
        }
        if (living instanceof MonsterEntity) return targetFilters.get("Мобы");
        if (living instanceof AnimalEntity)  return targetFilters.get("Животные");

        return targetFilters.get("Мобы");
    }

    private boolean isFriend(LivingEntity living) {
        if (Manager.FRIEND_MANAGER == null || living.getName() == null) return false;
        try {
            return Manager.FRIEND_MANAGER.isFriend(living.getName().getUnformattedComponentText());
        } catch (Exception e) {
            return false;
        }
    }

    private double getFovDiff(LivingEntity living) {
        if (living == null || mc.player == null) return Double.MAX_VALUE;
        float[] rot = calcRotationsTo(living);
        float bYaw  = rotate != null ? rotate.x : mc.player.rotationYaw;
        float bPit  = rotate != null ? rotate.y : mc.player.rotationPitch;
        return Math.abs(MathHelper.wrapDegrees(rot[0] - bYaw))
                + Math.abs(rot[1] - bPit) * 0.35;
    }

    private float[] calcRotationsTo(LivingEntity living) {
        if (living == null || mc.player == null) {
            return new float[]{ 0F, 0F };
        }
        double dx   = living.getPosX() - mc.player.getPosX();
        double dz   = living.getPosZ() - mc.player.getPosZ();
        double dy   = (living.getPosY() + living.getHeight() * 0.5) - mc.player.getPosYEye();
        double dist = Math.sqrt(dx * dx + dz * dz);
        float  yaw  = (float) (Math.toDegrees(Math.atan2(dz, dx)) - 90.0);
        float  pitch = MathHelper.clamp(
                (float) (-Math.toDegrees(Math.atan2(dy, dist))), -90.0F, 90.0F
        );
        return new float[]{ yaw, pitch };
    }

    private double clampedGaussian() {
        double g = rng.nextGaussian();
        if (g > GAUSSIAN_CLAMP) g = GAUSSIAN_CLAMP;
        if (g < -GAUSSIAN_CLAMP) g = -GAUSSIAN_CLAMP;
        return g;
    }

    private boolean isClientReady() {
        return mc != null && mc.player != null && mc.world != null
                && mc.player.isAlive();
    }

    private void resetState() {
        target                  = null;
        lockedTarget            = null;
        groundAttackDelay       = 0;
        critHitThisCycle        = false;
        wTapRelease             = false;
        wTapTimer               = 0;
        visualJitterTimer       = 0;
        visualJitterYaw         = 0.0F;
        visualJitterPitch       = 0.0F;
        extraAttackDelay        = 0;
        postAttackLock          = 0;
        targetLockTicks         = 0;
        if (mc.player != null) {
            rotate = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch);
        }
        randomizeThresholds();
    }

    @Override
    protected void onEnable() {
        resetState();
        visualNoiseTimer  = 0;
        visualNoise       = 0.0F;
        positionInit      = false;
    }

    @Override
    protected void onDisable() {
        resetState();
        positionInit = false;
    }
}
блять вроде gpt opus 4.7, а логики как у бомжа какого-то
 
как ты опус уговорил это написать? если есть промпт/сам чет писал мож скинуть?
Он помоему и без особых промптов каких то такое напишет. Кент вчера сидел и всё нормально было, просто базу закинул и он пошел ему делать. Из главного просто не писать часто слова по типу "чит" или каких-то модулей названия, но опять же вчера он и сам их употреблял
 
Он помоему и без особых промптов каких то такое напишет. Кент вчера сидел и всё нормально было, просто базу закинул и он пошел ему делать. Из главного просто не писать часто слова по типу "чит" или каких-то модулей названия, но опять же вчера он
хз у меня отказывался даже если просто просил пофиксит
 
Назад
Сверху Снизу