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

Обход античита BackTrack RW

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
21 Фев 2024
Сообщения
167
Реакции
1
Выберите загрузчик игры
  1. Vanilla
Дарова всем сразу скажу почти всё чат гпт делал я только вставил но так это BackTrack Celestial 1.12.2 вроде работают но они хуйня как по мне
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)
BackTrack:
Expand Collapse Copy
package org.sheluvparis.excellent.client.impl.feature.impl.combat;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.play.client.CConfirmTransactionPacket;
import net.minecraft.util.math.vector.Vector3d;
import org.sheluvparis.common.events.orbit.EventHandler;
import org.sheluvparis.excellent.client.Client;
import org.sheluvparis.excellent.client.events.other.PacketEvent;
import org.sheluvparis.excellent.client.events.player.UpdateEvent;
import org.sheluvparis.excellent.client.events.render.Render3DEvent;
import org.sheluvparis.excellent.client.impl.feature.Category;
import org.sheluvparis.excellent.client.impl.feature.Feature;
import org.sheluvparis.excellent.client.impl.feature.FeatureInfo;
import org.sheluvparis.excellent.client.impl.settings.impl.BooleanSetting;
import org.sheluvparis.excellent.client.impl.settings.impl.SliderSetting;
import org.sheluvparis.excellent.client.util.other.BackEntityCord;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;



@FeatureInfo(name = "BackTrack", category = Category.COMBAT)
public class BackTrack extends Feature {
    // Настройки
    public final SliderSetting range = new SliderSetting("Range", 5.0f, 1.0f, 20.0f, 1.0f);
    public final SliderSetting alpha = new SliderSetting("Alpha", 0.3f, 0.1f, 1.0f, 0.05f);
    public final BooleanSetting onlyTarget = new BooleanSetting("Only Target", true);
    public final BooleanSetting visual = new BooleanSetting("Visual", true);

    // Packet Delay настройки (опционально)
    public final BooleanSetting packetDelay = new BooleanSetting("Packet Delay", false);

    public final SliderSetting delayChance = new SliderSetting("Delay Chance", 0.2f, 0f, 1f, 0.05f)
            .visible(() -> packetDelay.get());

    // Основные данные
    public static final List<BackEntityCord> backEntityCoords = new ArrayList<>();
    private PlayerEntity currentTarget = null;

    // Для packet delay
    private final Map<Integer, Short> lastTransactionUids = new HashMap<>();
    private final Set<String> processedTransactions = new HashSet<>();
    private final Random random = new Random();

    // Для predictive backtrack
    private final Map<Integer, CircularBuffer<Vector3d>> positionHistory = new ConcurrentHashMap<>();
    private static class CircularBuffer<T> {
        private final T[] buffer;
        private int head = 0;
        private int size = 0;

        @SuppressWarnings("unchecked")
        public CircularBuffer(int capacity) {
            buffer = (T[]) new Object[capacity];
        }

        public void add(T item) {
            buffer[head] = item;
            head = (head + 1) % buffer.length;
            if (size < buffer.length) size++;
        }

        public T get(int index) {
            if (index < 0 || index >= size) return null;
            int actualIndex = (head - size + index + buffer.length) % buffer.length;
            return buffer[actualIndex];
        }

        public int size() { return size; }
    }


    @Override
    public void onEnable() {
        backEntityCoords.clear();
        positionHistory.clear();
        lastTransactionUids.clear();
        processedTransactions.clear();
        currentTarget = null;
    }

    @Override
    public void onDisable() {
        backEntityCoords.clear();
        positionHistory.clear();
        lastTransactionUids.clear();
        processedTransactions.clear();
        currentTarget = null;
    }

    @EventHandler
    public void onUpdate(UpdateEvent event) {
        if (mc.world == null || mc.player == null) return;

        // Находим цель из Aura
        AttackAura aura = Client.inst().featureManager().attackAura;
        PlayerEntity target = aura != null ? (PlayerEntity) aura.target() : null;

        // Обновляем историю позиций для всех игроков
        updatePositionHistory();

        // Если включен onlyTarget
        if (onlyTarget.get()) {
            if (target != null && target != currentTarget) {
                backEntityCoords.clear();
                currentTarget = target;
                backEntityCoords.add(new BackEntityCord(target));
            } else if (target == null) {
                backEntityCoords.clear();
                currentTarget = null;
            }
        } else {
            // Обновляем BackEntityCord для всех игроков
            updateAllPlayers();
        }

        // Обновляем данные BackTrack
        backEntityCoords.forEach(BackEntityCord::tick);
    }

    private void updatePositionHistory() {
        for (PlayerEntity player : mc.world.getPlayers()) {
            if (player == mc.player || !player.isAlive()) continue;

            CircularBuffer<Vector3d> buffer = positionHistory.computeIfAbsent(
                    player.getEntityId(),
                    k -> new CircularBuffer<>(range.get().intValue())
            );

            buffer.add(player.getPositionVec());
        }
    }

    private void updateAllPlayers() {
        backEntityCoords.removeIf(coord ->
                coord.entity == null ||
                        !coord.entity.isAlive() ||
                        coord.entity.removed
        );
        for (PlayerEntity player : mc.world.getPlayers()) {
            if (player == mc.player || !player.isAlive() || player.getHealth() <= 0.0f) {
                continue;
            }

            boolean exists = false;
            for (BackEntityCord coord : backEntityCoords) {
                if (coord.entity.getEntityId() == player.getEntityId()) {
                    exists = true;
                    break;
                }
            }

            if (!exists) {
                backEntityCoords.add(new BackEntityCord(player));
            }
        }
    }

    @EventHandler
    public void onRender(Render3DEvent event) {
        if (!visual.get() || mc.world == null) return;

        // Рендерим BackTrack позиции
        for (BackEntityCord cord : backEntityCoords) {
            if (cord.entity != null && cord.entity.isAlive()) {
                cord.renderPositions(alpha.get());
            }
        }
    }

    @EventHandler
    public void onPacket(PacketEvent e) {
        if (!enabled() || !packetDelay.get()) return;

        // Безопасная задержка Transaction пакетов
        if (e.getPacket() instanceof CConfirmTransactionPacket) {
            handleTransactionPacket((CConfirmTransactionPacket) e.getPacket(), e);
        }
    }

    private void handleTransactionPacket(CConfirmTransactionPacket packet, PacketEvent e) {
        // 1. Пропускаем окно 0 (инвентарь игрока)
        if (packet.getWindowId() == 0) return;

        // 2. Проверяем UID
        short uid = packet.getUid();
        int windowId = packet.getWindowId();
        String key = windowId + "_" + uid;

        if (processedTransactions.contains(key)) {
            return; // Уже обработан
        }

        // 3. Проверяем порядок (для обхода TransactionOrder детекта)
        short lastUid = lastTransactionUids.getOrDefault(windowId, (short)-1);

        // Если UID не следующий по порядку - не задерживаем
        if (uid != lastUid + 1 && lastUid != -1) {
            // Отправляем сразу без задержки
            lastTransactionUids.put(windowId, uid);
            processedTransactions.add(key);
            return;
        }

        // 4. Задерживаем с шансом
        if (random.nextFloat() < delayChance.get()) {
            e.cancel();

            // Маленькая случайная задержка
            int delayMs = 30 + random.nextInt(40); // 30-70ms

            // Отправляем с задержкой
            new Thread(() -> {
                try {
                    Thread.sleep(delayMs);
                } catch (InterruptedException ignored) {}

                if (mc.player != null && mc.player.connection != null) {
                    mc.player.connection.sendPacket(packet);
                    processedTransactions.add(key);
                }
            }).start();

            lastTransactionUids.put(windowId, uid);
        } else {
            // Отправляем сразу
            lastTransactionUids.put(windowId, uid);
            processedTransactions.add(key);
        }

        // Очистка старых записей
        if (processedTransactions.size() > 50) {
            processedTransactions.clear();
        }
    }

    // Методы для доступа из других модулей

    public static BackEntityCord getBackEntityCord(Entity entity) {
        if (entity == null) return null;

        for (BackEntityCord cord : backEntityCoords) {
            if (cord.entity != null && cord.entity.getEntityId() == entity.getEntityId()) {
                return cord;
            }
        }
        return null;
    }

    public BackEntityCord getCurrentTargetCord() {
        if (currentTarget == null) return null;
        return getBackEntityCord(currentTarget);
    }

    public Vector3d getBackTrackPosition(Entity entity, int ticksBack) {
        if (entity == null) return null;

        // Получаем из истории позиций
        CircularBuffer<Vector3d> buffer = positionHistory.get(entity.getEntityId());
        if (buffer == null || buffer.size() == 0) {
            return entity.getPositionVec();
        }

        // Берем позицию от ticksBack тиков назад
        int index = Math.max(0, buffer.size() - 1 - ticksBack);
        Vector3d pos = buffer.get(index);

        return pos != null ? pos : entity.getPositionVec();
    }

    public Vector3d getBestBackTrackPosition(Entity entity) {
        BackEntityCord cord = getBackEntityCord(entity);
        if (cord == null || cord.positions.isEmpty()) {
            return entity.getPositionVec();
        }

        // Находим ближайшую позицию к игроку
        Vector3d bestPos = null;
        double bestDistance = Double.MAX_VALUE;

        for (BackEntityCord.Point point : cord.positions) {
            double distance = mc.player.getDistanceSq(point.vec3d.x, point.vec3d.y, point.vec3d.z);
            if (distance < bestDistance) {
                bestDistance = distance;
                bestPos = point.vec3d;
            }
        }

        return bestPos != null ? bestPos : entity.getPositionVec();
    }

    // Метод для AttackAura чтобы атаковать с BackTrack
    public boolean attackWithBackTrack(PlayerEntity target) {
        if (!enabled() || target == null) return false;

        BackEntityCord cord = getBackEntityCord(target);
        if (cord != null && !cord.positions.isEmpty()) {
            // Атакуем по самой старой позиции
            Vector3d backTrackPos = cord.positions.get(0).vec3d;

            // Сохраняем оригинальную позицию
            Vector3d originalPos = target.getPositionVec();

            try {
                // Временно перемещаем цель
                target.setPosition(backTrackPos.x, backTrackPos.y, backTrackPos.z);

                // Атакуем
                if (mc.playerController != null) {
                    mc.playerController.attackEntity(mc.player, target);
                    return true;
                }
            } finally {
                // Возвращаем на место
                target.setPosition(originalPos.x, originalPos.y, originalPos.z);
            }
        }

        return false;
    }

    // Статический метод для получения позиции
    public static Vector3d getNearestPosition(BackEntityCord entityCoord) {
        if (entityCoord == null || entityCoord.positions.isEmpty()) {
            return entityCoord != null ? entityCoord.entity.getPositionVec() : Vector3d.ZERO;
        }

        return entityCoord.positions.stream()
                .min(Comparator.comparingDouble(p ->
                        p.vec3d.distanceTo(mc.player.getPositionVec())
                ))
                .map(p -> p.vec3d)
                .orElse(entityCoord.entity.getPositionVec());
    }
}


BackEntityCord:
Expand Collapse Copy
package org.sheluvparis.excellent.client.util.other;

import net.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.multiplayer.PlayerController;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.LivingRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.EntityRayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;
import org.sheluvparis.excellent.client.Client;
import org.sheluvparis.excellent.client.impl.feature.impl.combat.AttackAura;
import org.sheluvparis.excellent.client.impl.feature.impl.combat.BackTrack;
import org.sheluvparis.excellent.client.util.color.ColorUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class BackEntityCord {
    public Entity entity;
    private FakePlayer backtarack;
    private Vector3d pos;
    public List<Point> positions;
    private final Minecraft mc;


    public BackEntityCord(Entity entityCoord) {
        this.positions = new ArrayList<>();
        this.mc = Minecraft.getInstance();
        this.entity = entityCoord;
    }

    public void tick() {
        if (this.entity instanceof ClientPlayerEntity || this.entity == null || !this.entity.isAlive()) {
            return;
        }

        // Добавляем новую позицию если игрок двигался
        if (Math.abs(this.entity.getPosX() - this.entity.prevPosX) > 0.001 ||
                Math.abs(this.entity.getPosZ() - this.entity.prevPosZ) > 0.001 ||
                Math.abs(this.entity.getPosY() - this.entity.prevPosY) > 0.001) {

            Vector3d currentPos = this.entity.getPositionVec();
            final Point p = new Point(currentPos.add(0, 0.0, 0));
            p.yaw = (int) this.entity.rotationYaw;
            this.positions.add(p);
        }

        // Ограничиваем по Range
        BackTrack module = Client.inst().featureManager().backTrack;
        if (module != null) {
            int maxPositions = module.range.get().intValue();

            // Удаляем старые позиции если превысили лимит
            while (this.positions.size() > maxPositions) {
                this.positions.remove(0);
            }

            // Удаляем устаревшие
            this.positions.removeIf(point -> point.ticks > maxPositions * 2);

            // Обновляем таймеры
            this.positions.forEach(Point::update);
        }
    }


    private void addFakePlayer() {
        AttackAura aura = Client.inst().featureManager().attackAura;
        pos = AttackAura.getBackTrackPosition(aura.target);
        entity = new FakePlayer(-1);
        entity.copyLocationAndAnglesFrom(aura.target);
        backtarack.rotationYawHead = aura.target.rotationYawHead;
        backtarack.rotationPitchHead = aura.target.rotationPitchHead;
        mc.world.addEntity(-1, entity);
    }

    public void renderPositions(float alpha) {
        if (this.positions.isEmpty() || this.entity == null || !this.entity.isAlive()) return;

        // Временно отключаем ShaderESP если нужно
        boolean wasShaderEspEnabled = false;

        try {
            for (int i = 0; i < this.positions.size(); i++) {
                Point pos = this.positions.get(i);

                // Рассчитываем прозрачность (чем старее - тем прозрачнее)
                float positionAlpha = alpha * (1.0f - (float)i / this.positions.size());

                // Рендерим позицию
                renderPosition((LivingEntity) entity, positionAlpha);
            }
        } finally {
            // Восстанавливаем ShaderESP
            if (wasShaderEspEnabled && Client.inst().featureManager().shaderEsp != null) {
                Client.inst().featureManager().shaderEsp.setEnabled(true);
            }
        }
    }


    private void renderPosition(LivingEntity entity, float yaw) {
        // Рисуем простой куб вместо полной модели
        float width = entity.getWidth() * 0.5f;
        float height = entity.getHeight();

        GL11.glBegin(GL11.GL_QUADS);

        // Передняя грань
        GL11.glVertex3f(-width, 0, -width);
        GL11.glVertex3f(width, 0, -width);
        GL11.glVertex3f(width, height, -width);
        GL11.glVertex3f(-width, height, -width);

        // Задняя грань
        GL11.glVertex3f(-width, 0, width);
        GL11.glVertex3f(width, 0, width);
        GL11.glVertex3f(width, height, width);
        GL11.glVertex3f(-width, height, width);

        // Боковые грани
        GL11.glVertex3f(-width, 0, -width);
        GL11.glVertex3f(-width, 0, width);
        GL11.glVertex3f(-width, height, width);
        GL11.glVertex3f(-width, height, -width);

        GL11.glVertex3f(width, 0, -width);
        GL11.glVertex3f(width, 0, width);
        GL11.glVertex3f(width, height, width);
        GL11.glVertex3f(width, height, -width);

        GL11.glEnd();
    }

    // Метод для атаки по BackTrack позиции
    public void click() {
        if (!this.entity.isAlive() || this.positions.isEmpty()) return;

        // Берем самую старую позицию (позади игрока)
        Point backPosition = this.positions.get(0);

        Vector3d src = mc.player.getEyePosition(mc.getRenderPartialTicks());
        Vector3d lookVec = mc.player.getLookVec();
        Vector3d dest = src.add(lookVec.x * 3.1, lookVec.y * 3.1, lookVec.z * 3.1);

        AxisAlignedBB bb = new AxisAlignedBB(
                backPosition.vec3d.x + 0.2, backPosition.vec3d.y, backPosition.vec3d.z + 0.2,
                backPosition.vec3d.x + 0.8, backPosition.vec3d.y + 1.8, backPosition.vec3d.z + 0.8
        );

        Optional<Vector3d> hitResult = bb.rayTrace(src, dest);
        if (hitResult.isPresent() && mc.playerController != null) {
            // Сохраняем оригинальную позицию
            Vector3d originalPos = this.entity.getPositionVec();

            try {
                // Временно телепортируем цель на BackTrack позицию
                this.entity.setPosition(backPosition.vec3d.x, backPosition.vec3d.y, backPosition.vec3d.z);

                // Атакуем
                mc.playerController.attackEntity(mc.player, this.entity);

            } finally {
                // Возвращаем на оригинальную позицию
                this.entity.setPosition(originalPos.x, originalPos.y, originalPos.z);
            }
        }
    }

    public static class Point {
        public Vector3d vec3d;
        public int ticks;
        public int yaw;

        public Point(Vector3d vec3d) {
            this.vec3d = vec3d;
            this.ticks = 0;
        }

        public void update() {
            this.ticks++;
        }
    }
}

Ну както так база Excellent Omni
 
Дарова всем сразу скажу почти всё чат гпт делал я только вставил но так это BackTrack Celestial 1.12.2 вроде работают но они хуйня как по мне
Пожалуйста, авторизуйтесь для просмотра ссылки.
(noad)
BackTrack:
Expand Collapse Copy
package org.sheluvparis.excellent.client.impl.feature.impl.combat;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.play.client.CConfirmTransactionPacket;
import net.minecraft.util.math.vector.Vector3d;
import org.sheluvparis.common.events.orbit.EventHandler;
import org.sheluvparis.excellent.client.Client;
import org.sheluvparis.excellent.client.events.other.PacketEvent;
import org.sheluvparis.excellent.client.events.player.UpdateEvent;
import org.sheluvparis.excellent.client.events.render.Render3DEvent;
import org.sheluvparis.excellent.client.impl.feature.Category;
import org.sheluvparis.excellent.client.impl.feature.Feature;
import org.sheluvparis.excellent.client.impl.feature.FeatureInfo;
import org.sheluvparis.excellent.client.impl.settings.impl.BooleanSetting;
import org.sheluvparis.excellent.client.impl.settings.impl.SliderSetting;
import org.sheluvparis.excellent.client.util.other.BackEntityCord;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;



@FeatureInfo(name = "BackTrack", category = Category.COMBAT)
public class BackTrack extends Feature {
    // Настройки
    public final SliderSetting range = new SliderSetting("Range", 5.0f, 1.0f, 20.0f, 1.0f);
    public final SliderSetting alpha = new SliderSetting("Alpha", 0.3f, 0.1f, 1.0f, 0.05f);
    public final BooleanSetting onlyTarget = new BooleanSetting("Only Target", true);
    public final BooleanSetting visual = new BooleanSetting("Visual", true);

    // Packet Delay настройки (опционально)
    public final BooleanSetting packetDelay = new BooleanSetting("Packet Delay", false);

    public final SliderSetting delayChance = new SliderSetting("Delay Chance", 0.2f, 0f, 1f, 0.05f)
            .visible(() -> packetDelay.get());

    // Основные данные
    public static final List<BackEntityCord> backEntityCoords = new ArrayList<>();
    private PlayerEntity currentTarget = null;

    // Для packet delay
    private final Map<Integer, Short> lastTransactionUids = new HashMap<>();
    private final Set<String> processedTransactions = new HashSet<>();
    private final Random random = new Random();

    // Для predictive backtrack
    private final Map<Integer, CircularBuffer<Vector3d>> positionHistory = new ConcurrentHashMap<>();
    private static class CircularBuffer<T> {
        private final T[] buffer;
        private int head = 0;
        private int size = 0;

        @SuppressWarnings("unchecked")
        public CircularBuffer(int capacity) {
            buffer = (T[]) new Object[capacity];
        }

        public void add(T item) {
            buffer[head] = item;
            head = (head + 1) % buffer.length;
            if (size < buffer.length) size++;
        }

        public T get(int index) {
            if (index < 0 || index >= size) return null;
            int actualIndex = (head - size + index + buffer.length) % buffer.length;
            return buffer[actualIndex];
        }

        public int size() { return size; }
    }


    @Override
    public void onEnable() {
        backEntityCoords.clear();
        positionHistory.clear();
        lastTransactionUids.clear();
        processedTransactions.clear();
        currentTarget = null;
    }

    @Override
    public void onDisable() {
        backEntityCoords.clear();
        positionHistory.clear();
        lastTransactionUids.clear();
        processedTransactions.clear();
        currentTarget = null;
    }

    @EventHandler
    public void onUpdate(UpdateEvent event) {
        if (mc.world == null || mc.player == null) return;

        // Находим цель из Aura
        AttackAura aura = Client.inst().featureManager().attackAura;
        PlayerEntity target = aura != null ? (PlayerEntity) aura.target() : null;

        // Обновляем историю позиций для всех игроков
        updatePositionHistory();

        // Если включен onlyTarget
        if (onlyTarget.get()) {
            if (target != null && target != currentTarget) {
                backEntityCoords.clear();
                currentTarget = target;
                backEntityCoords.add(new BackEntityCord(target));
            } else if (target == null) {
                backEntityCoords.clear();
                currentTarget = null;
            }
        } else {
            // Обновляем BackEntityCord для всех игроков
            updateAllPlayers();
        }

        // Обновляем данные BackTrack
        backEntityCoords.forEach(BackEntityCord::tick);
    }

    private void updatePositionHistory() {
        for (PlayerEntity player : mc.world.getPlayers()) {
            if (player == mc.player || !player.isAlive()) continue;

            CircularBuffer<Vector3d> buffer = positionHistory.computeIfAbsent(
                    player.getEntityId(),
                    k -> new CircularBuffer<>(range.get().intValue())
            );

            buffer.add(player.getPositionVec());
        }
    }

    private void updateAllPlayers() {
        backEntityCoords.removeIf(coord ->
                coord.entity == null ||
                        !coord.entity.isAlive() ||
                        coord.entity.removed
        );
        for (PlayerEntity player : mc.world.getPlayers()) {
            if (player == mc.player || !player.isAlive() || player.getHealth() <= 0.0f) {
                continue;
            }

            boolean exists = false;
            for (BackEntityCord coord : backEntityCoords) {
                if (coord.entity.getEntityId() == player.getEntityId()) {
                    exists = true;
                    break;
                }
            }

            if (!exists) {
                backEntityCoords.add(new BackEntityCord(player));
            }
        }
    }

    @EventHandler
    public void onRender(Render3DEvent event) {
        if (!visual.get() || mc.world == null) return;

        // Рендерим BackTrack позиции
        for (BackEntityCord cord : backEntityCoords) {
            if (cord.entity != null && cord.entity.isAlive()) {
                cord.renderPositions(alpha.get());
            }
        }
    }

    @EventHandler
    public void onPacket(PacketEvent e) {
        if (!enabled() || !packetDelay.get()) return;

        // Безопасная задержка Transaction пакетов
        if (e.getPacket() instanceof CConfirmTransactionPacket) {
            handleTransactionPacket((CConfirmTransactionPacket) e.getPacket(), e);
        }
    }

    private void handleTransactionPacket(CConfirmTransactionPacket packet, PacketEvent e) {
        // 1. Пропускаем окно 0 (инвентарь игрока)
        if (packet.getWindowId() == 0) return;

        // 2. Проверяем UID
        short uid = packet.getUid();
        int windowId = packet.getWindowId();
        String key = windowId + "_" + uid;

        if (processedTransactions.contains(key)) {
            return; // Уже обработан
        }

        // 3. Проверяем порядок (для обхода TransactionOrder детекта)
        short lastUid = lastTransactionUids.getOrDefault(windowId, (short)-1);

        // Если UID не следующий по порядку - не задерживаем
        if (uid != lastUid + 1 && lastUid != -1) {
            // Отправляем сразу без задержки
            lastTransactionUids.put(windowId, uid);
            processedTransactions.add(key);
            return;
        }

        // 4. Задерживаем с шансом
        if (random.nextFloat() < delayChance.get()) {
            e.cancel();

            // Маленькая случайная задержка
            int delayMs = 30 + random.nextInt(40); // 30-70ms

            // Отправляем с задержкой
            new Thread(() -> {
                try {
                    Thread.sleep(delayMs);
                } catch (InterruptedException ignored) {}

                if (mc.player != null && mc.player.connection != null) {
                    mc.player.connection.sendPacket(packet);
                    processedTransactions.add(key);
                }
            }).start();

            lastTransactionUids.put(windowId, uid);
        } else {
            // Отправляем сразу
            lastTransactionUids.put(windowId, uid);
            processedTransactions.add(key);
        }

        // Очистка старых записей
        if (processedTransactions.size() > 50) {
            processedTransactions.clear();
        }
    }

    // Методы для доступа из других модулей

    public static BackEntityCord getBackEntityCord(Entity entity) {
        if (entity == null) return null;

        for (BackEntityCord cord : backEntityCoords) {
            if (cord.entity != null && cord.entity.getEntityId() == entity.getEntityId()) {
                return cord;
            }
        }
        return null;
    }

    public BackEntityCord getCurrentTargetCord() {
        if (currentTarget == null) return null;
        return getBackEntityCord(currentTarget);
    }

    public Vector3d getBackTrackPosition(Entity entity, int ticksBack) {
        if (entity == null) return null;

        // Получаем из истории позиций
        CircularBuffer<Vector3d> buffer = positionHistory.get(entity.getEntityId());
        if (buffer == null || buffer.size() == 0) {
            return entity.getPositionVec();
        }

        // Берем позицию от ticksBack тиков назад
        int index = Math.max(0, buffer.size() - 1 - ticksBack);
        Vector3d pos = buffer.get(index);

        return pos != null ? pos : entity.getPositionVec();
    }

    public Vector3d getBestBackTrackPosition(Entity entity) {
        BackEntityCord cord = getBackEntityCord(entity);
        if (cord == null || cord.positions.isEmpty()) {
            return entity.getPositionVec();
        }

        // Находим ближайшую позицию к игроку
        Vector3d bestPos = null;
        double bestDistance = Double.MAX_VALUE;

        for (BackEntityCord.Point point : cord.positions) {
            double distance = mc.player.getDistanceSq(point.vec3d.x, point.vec3d.y, point.vec3d.z);
            if (distance < bestDistance) {
                bestDistance = distance;
                bestPos = point.vec3d;
            }
        }

        return bestPos != null ? bestPos : entity.getPositionVec();
    }

    // Метод для AttackAura чтобы атаковать с BackTrack
    public boolean attackWithBackTrack(PlayerEntity target) {
        if (!enabled() || target == null) return false;

        BackEntityCord cord = getBackEntityCord(target);
        if (cord != null && !cord.positions.isEmpty()) {
            // Атакуем по самой старой позиции
            Vector3d backTrackPos = cord.positions.get(0).vec3d;

            // Сохраняем оригинальную позицию
            Vector3d originalPos = target.getPositionVec();

            try {
                // Временно перемещаем цель
                target.setPosition(backTrackPos.x, backTrackPos.y, backTrackPos.z);

                // Атакуем
                if (mc.playerController != null) {
                    mc.playerController.attackEntity(mc.player, target);
                    return true;
                }
            } finally {
                // Возвращаем на место
                target.setPosition(originalPos.x, originalPos.y, originalPos.z);
            }
        }

        return false;
    }

    // Статический метод для получения позиции
    public static Vector3d getNearestPosition(BackEntityCord entityCoord) {
        if (entityCoord == null || entityCoord.positions.isEmpty()) {
            return entityCoord != null ? entityCoord.entity.getPositionVec() : Vector3d.ZERO;
        }

        return entityCoord.positions.stream()
                .min(Comparator.comparingDouble(p ->
                        p.vec3d.distanceTo(mc.player.getPositionVec())
                ))
                .map(p -> p.vec3d)
                .orElse(entityCoord.entity.getPositionVec());
    }
}


BackEntityCord:
Expand Collapse Copy
package org.sheluvparis.excellent.client.util.other;

import net.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.multiplayer.PlayerController;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.LivingRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.EntityRayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;
import org.sheluvparis.excellent.client.Client;
import org.sheluvparis.excellent.client.impl.feature.impl.combat.AttackAura;
import org.sheluvparis.excellent.client.impl.feature.impl.combat.BackTrack;
import org.sheluvparis.excellent.client.util.color.ColorUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class BackEntityCord {
    public Entity entity;
    private FakePlayer backtarack;
    private Vector3d pos;
    public List<Point> positions;
    private final Minecraft mc;


    public BackEntityCord(Entity entityCoord) {
        this.positions = new ArrayList<>();
        this.mc = Minecraft.getInstance();
        this.entity = entityCoord;
    }

    public void tick() {
        if (this.entity instanceof ClientPlayerEntity || this.entity == null || !this.entity.isAlive()) {
            return;
        }

        // Добавляем новую позицию если игрок двигался
        if (Math.abs(this.entity.getPosX() - this.entity.prevPosX) > 0.001 ||
                Math.abs(this.entity.getPosZ() - this.entity.prevPosZ) > 0.001 ||
                Math.abs(this.entity.getPosY() - this.entity.prevPosY) > 0.001) {

            Vector3d currentPos = this.entity.getPositionVec();
            final Point p = new Point(currentPos.add(0, 0.0, 0));
            p.yaw = (int) this.entity.rotationYaw;
            this.positions.add(p);
        }

        // Ограничиваем по Range
        BackTrack module = Client.inst().featureManager().backTrack;
        if (module != null) {
            int maxPositions = module.range.get().intValue();

            // Удаляем старые позиции если превысили лимит
            while (this.positions.size() > maxPositions) {
                this.positions.remove(0);
            }

            // Удаляем устаревшие
            this.positions.removeIf(point -> point.ticks > maxPositions * 2);

            // Обновляем таймеры
            this.positions.forEach(Point::update);
        }
    }


    private void addFakePlayer() {
        AttackAura aura = Client.inst().featureManager().attackAura;
        pos = AttackAura.getBackTrackPosition(aura.target);
        entity = new FakePlayer(-1);
        entity.copyLocationAndAnglesFrom(aura.target);
        backtarack.rotationYawHead = aura.target.rotationYawHead;
        backtarack.rotationPitchHead = aura.target.rotationPitchHead;
        mc.world.addEntity(-1, entity);
    }

    public void renderPositions(float alpha) {
        if (this.positions.isEmpty() || this.entity == null || !this.entity.isAlive()) return;

        // Временно отключаем ShaderESP если нужно
        boolean wasShaderEspEnabled = false;

        try {
            for (int i = 0; i < this.positions.size(); i++) {
                Point pos = this.positions.get(i);

                // Рассчитываем прозрачность (чем старее - тем прозрачнее)
                float positionAlpha = alpha * (1.0f - (float)i / this.positions.size());

                // Рендерим позицию
                renderPosition((LivingEntity) entity, positionAlpha);
            }
        } finally {
            // Восстанавливаем ShaderESP
            if (wasShaderEspEnabled && Client.inst().featureManager().shaderEsp != null) {
                Client.inst().featureManager().shaderEsp.setEnabled(true);
            }
        }
    }


    private void renderPosition(LivingEntity entity, float yaw) {
        // Рисуем простой куб вместо полной модели
        float width = entity.getWidth() * 0.5f;
        float height = entity.getHeight();

        GL11.glBegin(GL11.GL_QUADS);

        // Передняя грань
        GL11.glVertex3f(-width, 0, -width);
        GL11.glVertex3f(width, 0, -width);
        GL11.glVertex3f(width, height, -width);
        GL11.glVertex3f(-width, height, -width);

        // Задняя грань
        GL11.glVertex3f(-width, 0, width);
        GL11.glVertex3f(width, 0, width);
        GL11.glVertex3f(width, height, width);
        GL11.glVertex3f(-width, height, width);

        // Боковые грани
        GL11.glVertex3f(-width, 0, -width);
        GL11.glVertex3f(-width, 0, width);
        GL11.glVertex3f(-width, height, width);
        GL11.glVertex3f(-width, height, -width);

        GL11.glVertex3f(width, 0, -width);
        GL11.glVertex3f(width, 0, width);
        GL11.glVertex3f(width, height, width);
        GL11.glVertex3f(width, height, -width);

        GL11.glEnd();
    }

    // Метод для атаки по BackTrack позиции
    public void click() {
        if (!this.entity.isAlive() || this.positions.isEmpty()) return;

        // Берем самую старую позицию (позади игрока)
        Point backPosition = this.positions.get(0);

        Vector3d src = mc.player.getEyePosition(mc.getRenderPartialTicks());
        Vector3d lookVec = mc.player.getLookVec();
        Vector3d dest = src.add(lookVec.x * 3.1, lookVec.y * 3.1, lookVec.z * 3.1);

        AxisAlignedBB bb = new AxisAlignedBB(
                backPosition.vec3d.x + 0.2, backPosition.vec3d.y, backPosition.vec3d.z + 0.2,
                backPosition.vec3d.x + 0.8, backPosition.vec3d.y + 1.8, backPosition.vec3d.z + 0.8
        );

        Optional<Vector3d> hitResult = bb.rayTrace(src, dest);
        if (hitResult.isPresent() && mc.playerController != null) {
            // Сохраняем оригинальную позицию
            Vector3d originalPos = this.entity.getPositionVec();

            try {
                // Временно телепортируем цель на BackTrack позицию
                this.entity.setPosition(backPosition.vec3d.x, backPosition.vec3d.y, backPosition.vec3d.z);

                // Атакуем
                mc.playerController.attackEntity(mc.player, this.entity);

            } finally {
                // Возвращаем на оригинальную позицию
                this.entity.setPosition(originalPos.x, originalPos.y, originalPos.z);
            }
        }
    }

    public static class Point {
        public Vector3d vec3d;
        public int ticks;
        public int yaw;

        public Point(Vector3d vec3d) {
            this.vec3d = vec3d;
            this.ticks = 0;
        }

        public void update() {
            this.ticks++;
        }
    }
}

Ну както так база Excellent Omni
ну какой екселлент омни сука я же токо хотел слить expensive base свой жалко а так норм
 
Эх а раньше же celestial умели делать обходы под ReallyWorld
щас под рв норм функции не выходят надеюсь выйдут
Бля мне типы тт сказали что это давно есть в нуре кто шарит скажите правда или нет
 
Последнее редактирование:

Похожие темы

Ответы
15
Просмотры
668
Ответы
20
Просмотры
708
Ответы
17
Просмотры
590
Назад
Сверху Снизу