Вопрос Случайно написал boatfly под matrix. Помогите улучшить

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Июн 2021
Сообщения
75
Реакции
1
Додумался я значит до одного интересного эксплойта! Суть работы проста: посылаем серверу инфу о том, что мы находимся чуть дальше чем положено, сервер думает, хммммммммм, этот говнюк не должен там находится! И применяет телепортацию ко мне, чтобы я "вернулся" в исходное место. Ясен пень, никакой телепортации не происходит, однако, велосити (импульс) от телепортации сохраняется! Далее я этот импульс в лодку шмяк, и изменяю его направление, чтобы лодка летела куда нужно. И всё, таким образом я летаю в лодке!!! Изначально, такую хитрость я хотел применить к античиту Grim, и казалось бы, всё как обычно, обход не сработал. Но когда я зашёл на сервер где стоит Old Matrix, обход сработал!!! Я могу летать довольно быстро, но есть проблема: при слишком резких поворотах, снижении скорости или иногда и вовсе при приземлении, меня кикает с сервера по причине (Movement). Протестируйте мой boatfly кому не лень, и подскажите пожалуйста как его можно улучшить. Сразу скажу, что я уже добавлял настройку для плавности движений, но она никакого результата не дала
Java:
Expand Collapse Copy
package meteordevelopment.meteorclient.systems.modules.movement;

import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Categories;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.util.math.Vec3d;

public class BoatFly extends Module {

    private final SettingGroup sgGeneral = settings.getDefaultGroup();
    private final SettingGroup sgAdvanced = settings.createGroup("Advanced");

    // Обыячные настройки
    private final Setting<Double> speed = sgGeneral.add(new DoubleSetting.Builder()
        .name("speed")
        .description("Горизонтальная скорость")
        .defaultValue(1.0)
        .min(0.1)
        .sliderMax(20.0)
        .build()
    );

    private final Setting<Double> upSpeed = sgGeneral.add(new DoubleSetting.Builder()
        .name("up-speed")
        .description("Вертикальная скорость")
        .defaultValue(0.5)
        .min(0.0)
        .sliderMax(2.0)
        .build()
    );

    private final Setting<Double> downSpeed = sgGeneral.add(new DoubleSetting.Builder()
        .name("down-speed")
        .description("Скорость падения")
        .defaultValue(0.1)
        .min(0.0)
        .sliderMax(1.0)
        .build()
    );

    private final Setting<Boolean> autoToggle = sgGeneral.add(new BoolSetting.Builder()
        .name("auto-toggle")
        .description("Авто выключение")
        .defaultValue(true)
        .build()
    );

    // Продвинутые настройки
    private final Setting<Double> triggerHeight = sgAdvanced.add(new DoubleSetting.Builder()
        .name("trigger-height")
        .description("На сколько блоков выше \"основного\" блока должна быть запущена рассинхронизация")
        .defaultValue(0.5)
        .min(0.001)
        .sliderMax(5.0)
        .build()
    );

    private final Setting<Double> delay = sgAdvanced.add(new DoubleSetting.Builder()
        .name("delay")
        .description("Задержка между рассинхронизацией в тиках")
        .defaultValue(2.0)
        .min(1.0)
        .sliderMax(20.0)
        .build()
    );

    private final Setting<Boolean> requireGround = sgAdvanced.add(new BoolSetting.Builder()
        .name("require-ground")
        .description("Рассинхронизация работает только если лодка стоит на блоках")
        .defaultValue(true)
        .build()
    );

    private final Setting<Boolean> jitter = sgAdvanced.add(new BoolSetting.Builder()
        .name("jitter")
        .description("Добавляет случайный шум")
        .defaultValue(true)
        .build()
    );

    private final Setting<Boolean> syncRotation = sgGeneral.add(new BoolSetting.Builder()
        .name("sync-rotation")
        .description("Поворачивает лодку в направлении взгляда")
        .defaultValue(true)
        .build()
    );

    private int delayTimer = 0;
    private boolean wasInBoat = false;

    public BoatFly() {
        super(Categories.Movement, "boat-fly", "Использует эксплойт для полёта на лодке");
    }

    @Override
    public void onActivate() {
        delayTimer = 0;
        wasInBoat = mc.player.getVehicle() instanceof BoatEntity;
    }

    @EventHandler
    private void onTick(TickEvent.Post event) {
        Entity vehicle = mc.player.getVehicle();

        // Проверьте, находится ли игрок в лодке
        if (!(vehicle instanceof BoatEntity)) {
            if (autoToggle.get() && wasInBoat) {
                toggle();
                info("Вы вышли из лодки. Выключение");
            }
            wasInBoat = false;
            return;
        }
        wasInBoat = true;

        BoatEntity boat = (BoatEntity) vehicle;

        // Синхронизирует поворот лодки со взглядом игрока
        if (syncRotation.get()) {
            boat.setYaw(mc.player.getYaw());
            boat.setPitch(mc.player.getPitch());
        }

        // Jitter настройка
        delayTimer++;
        double currentDelay = delay.get();
        if (jitter.get()) {
            currentDelay += (Math.random() * 2) - 1;
        }
        if (delayTimer < currentDelay) {
            return;
        }
        delayTimer = 0;

        // Проверяет, думает ли сервер, что мы на месте
        boolean serverOnGround = requireGround.get() && boat.isOnGround();
        if (requireGround.get() && !serverOnGround) {
            return;
        }

        // Получение текущего велосити и применение движения
        Vec3d velocity = boat.getVelocity();
        Vec3d newVelocity = new Vec3d(velocity.x, velocity.y, velocity.z);

        // Контроль движения
        if (mc.options.jumpKey.isPressed()) {
            newVelocity = new Vec3d(newVelocity.x, upSpeed.get(), newVelocity.z);
        } else if (mc.options.sneakKey.isPressed()) {
            newVelocity = new Vec3d(newVelocity.x, -downSpeed.get(), newVelocity.z);
        } else {
            newVelocity = new Vec3d(newVelocity.x, 0.08, newVelocity.z);
        }

        // Управление горизонтальным перемещением
        float yaw = boat.getYaw();
        float forward = mc.player.forwardSpeed;
        float side = mc.player.sidewaysSpeed;

        if (forward != 0 || side != 0) {
            double radYaw = Math.toRadians(yaw);
            double x = -Math.sin(radYaw) * forward + Math.cos(radYaw) * side;
            double z = Math.cos(radYaw) * forward + Math.sin(radYaw) * side;

            newVelocity = new Vec3d(
                newVelocity.x + x * speed.get() * 0.1,
                newVelocity.y,
                newVelocity.z + z * speed.get() * 0.1
            );
        }

        // Применяет окончательное велосити
        boat.setVelocity(newVelocity);
    }
}
 
пасточко
 
Назад
Сверху Снизу