• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Можете помочь? Хочу написать свой софт

  • Автор темы Автор темы nekname
  • Дата начала Дата начала
Новичок
Новичок
Статус
Оффлайн
Регистрация
14 Июн 2025
Сообщения
1
Реакции
0
Я вот думаю как обойти fly от дамага и без дамага на античит Matrix, вроде как я знаю что это изи античит, но для бедварса хочу сделать на сервак MineLegacy, кто-нибудь хелпаните плиз, можете добавить илм фулл код либо дать советы по написанию
 
Ну смотри, я сейчас тебе дам МАКСИМАЛЬНО хреновый, но работающий обход под Matrix 7.16.2 который я сам написал и проверил на сервере forsecraft (noad). Это не то чтобы флай, а скорее хигхджамп, который работает за счёт эксплойта (пакетной манипуляции). Суть действия: подходишь не слишком близко, но и не слишком далеко к блоку, врубаешь модуль и тебя подбрасывает вверх на высоту максимум 5.5 блоков. Принцип работы: 1) отправляет 2 пакеты движения игрока: первый - текущая позиция игрока, второй - смещение вперед по направлению взгляда. 2) Ждём ответного пакета Position-Look от сервера. 3) При получении ответа от сервера устанавливает вертикальную скорость. ПРОЩЕ ГОВОРЯ: мы говорим серверу, что находимся на двух позициях одновременно, античит думает, хммм, этот говнюк НЕ должен там находится! и применяет коррекцию (телепортацию) дабы обезвредить опасного злодея-полупокера (нас), понятно дело, что никакой телепортации не происходит, но импульс от неё остаётся))) далее мы этот импульс шмяк, и перенаправляем в нужную нам сторону, применяя вертикальное движение. Вот готовый код модуля для Meteor Client fabric 1.20.4
Java:
Expand Collapse Copy
package meteordevelopment.meteorclient.systems.modules.movement;

import meteordevelopment.meteorclient.events.packets.PacketEvent;
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.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;

public class MatrixFly extends Module {
    private final SettingGroup sgGeneral = settings.getDefaultGroup();

    private final Setting<Double> jumpHeight = sgGeneral.add(new DoubleSetting.Builder()
        .name("jump-height")
        .description("Высота прыжка.")
        .defaultValue(3.5)
        .min(0.5)
        .max(10.0)
        .build()
    );

    private final Setting<Boolean> requireBlock = sgGeneral.add(new BoolSetting.Builder()
        .name("require-block")
        .description("Требовать блок перед игроком для активации.")
        .defaultValue(true)
        .build()
    );

    private final Setting<Double> blockDistance = sgGeneral.add(new DoubleSetting.Builder()
        .name("block-distance")
        .description("Максимальное расстояние до блока для активации.")
        .defaultValue(3.0)
        .min(1.0)
        .max(3.0)
        .visible(requireBlock::get)
        .build()
    );

    private final Setting<Boolean> checkBlockFace = sgGeneral.add(new BoolSetting.Builder()
        .name("check-block-face")
        .description("Проверять, что игрок смотрит на грань блока.")
        .defaultValue(true)
        .visible(requireBlock::get)
        .build()
    );

    private int boostMotion = 0;
    private double launchY = 0;

    public MatrixFly() {
        super(Categories.Movement, "matrix-fly", "Буст Fly под Matrix 7.16.2");
    }

    @Override
    public void onActivate() {
        boostMotion = 0;
        launchY = mc.player.getY();
    }

    @Override
    public void onDeactivate() {
        
    }

    @EventHandler
    private void onTick(TickEvent.Pre event) {
        if (mc.player == null || mc.world == null) return;

        
        if (requireBlock.get() && !isBlockInFront()) {
            return;
        }

        switch (boostMotion) {
            case 0:
                
                double yaw = Math.toRadians(mc.player.getYaw());

                mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    mc.player.getX(),
                    mc.player.getY(),
                    mc.player.getZ(),
                    true
                ));

                mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    mc.player.getX() + -Math.sin(yaw) * 1.5,
                    mc.player.getY() + 1,
                    mc.player.getZ() + Math.cos(yaw) * 1.5,
                    false
                ));

                boostMotion = 1;
                break;

            case 1:
                
                break;

            case 2:
                
                mc.player.setVelocity(mc.player.getVelocity().x, calculateJumpVelocity(), mc.player.getVelocity().z);
                boostMotion = 3;
                break;

            case 3:
                
                if (mc.player.getY() < launchY - 1.0) {
                    boostMotion = 0;
                    launchY = mc.player.getY();
                }
                break;
        }
    }

    @EventHandler
    private void onPacketReceive(PacketEvent.Receive event) {
        if (event.packet instanceof PlayerPositionLookS2CPacket) {
            if (boostMotion == 1) {
                boostMotion = 2;
            }
        }
    }

    private boolean isBlockInFront() {
        HitResult hit = mc.crosshairTarget;

        if (hit == null || hit.getType() != HitResult.Type.BLOCK) {
            return false;
        }

        BlockHitResult blockHit = (BlockHitResult) hit;
        BlockPos blockPos = blockHit.getBlockPos();
        
        double distance = mc.player.getPos().distanceTo(blockPos.toCenterPos());
        if (distance > blockDistance.get()) {
            return false;
        }
        
        if (checkBlockFace.get()) {
            Direction facing = blockHit.getSide();
            return facing != null;
        }

        return true;
    }

    private double calculateJumpVelocity() {
        return Math.sqrt(2 * 0.08 * jumpHeight.get());
    }
}
 
Назад
Сверху Снизу