Обход античита Water Speed FT | Zenith 1.21.4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Май 2025
Сообщения
187
Реакции
1
Выберите загрузчик игры
  1. Fabric
вот ватер спиды от стенок
Пожалуйста, авторизуйтесь для просмотра ссылки.

pastaaaaaaaaa:
Expand Collapse Copy
package ru.client.modules.impl.movement;

import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.registry.tag.FluidTags;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import ru.client.api.event.EventHandler;
import ru.client.implement.events.player.SwimmingEvent;
import ru.client.implement.events.player.TickEvent;
import ru.client.modules.api.Module;
import ru.client.modules.api.ModuleCategory;
import ru.client.modules.impl.combat.killaura.rotation.RotationController;
import ru.client.modules.setting.implement.SelectSetting;
import ru.client.util.entity.MovingUtil;

@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class WaterSpeed extends Module {

    private static final double WALL_BOOST = 0.08;
    private static final double WALL_VERTICAL = 0.05;
    private static final double WALL_RADIUS = 0.5;

    SelectSetting modeSetting = new SelectSetting("Mode", "Select bypass mode").value("FunTime", "FTWall");

    public WaterSpeed() {
        super("WaterSpeed", "Water Speed", ModuleCategory.MOVEMENT);
        setup(modeSetting);
    }

    @EventHandler
    public void onTick(TickEvent e) {
        if (mc.player == null || mc.world == null) return;

        switch (modeSetting.getSelected()) {
            case "FunTime" -> handleFunTimeTick();
            case "FTWall" -> handleFTWall();
        }
    }

    private void handleFunTimeTick() {
        if (mc.player.isSwimming() && mc.player.isOnGround()) {
            mc.player.jump();
            mc.player.velocity.y = 0.1;
        }
    }

    private void handleFTWall() {
        if (!mc.player.isTouchingWater()) return;
        if (!mc.player.horizontalCollision) return;
        if (!isWaterNearFeet()) return;

        Direction face = mc.player.getHorizontalFacing();
        Direction collisionFace = getCollisionFace();
        if (collisionFace != null) {
            face = collisionFace;
        }

        Vec3d pushDir = new Vec3d(-face.getOffsetX(), 0.0, -face.getOffsetZ());
        if (pushDir.lengthSquared() < 1e-6) {
            return;
        }

        double[] moveDir = MovingUtil.calculateDirection(mc.player.input.movementForward, mc.player.input.movementSideways, WALL_BOOST);
        Vec3d combined = new Vec3d(moveDir[0], 0.0, moveDir[1])
                .add(pushDir.normalize().multiply(WALL_BOOST * 0.6));

        Vec3d velocity = mc.player.getVelocity();
        Vec3d result = velocity.add(combined);

        double vertical = Math.max(velocity.y, WALL_VERTICAL);

        mc.player.setVelocity(result.x, vertical, result.z);
        mc.player.fallDistance = 0;
    }

    private Direction getCollisionFace() {
        Box box = mc.player.getBoundingBox();
        for (Direction dir : Direction.Type.HORIZONTAL) {
            Box shifted = box.offset(dir.getOffsetX() * 0.05, 0, dir.getOffsetZ() * 0.05);
            if (!mc.world.isSpaceEmpty(mc.player, shifted)) {
                return dir;
            }
        }
        return null;
    }

    private boolean isWaterNearFeet() {
        Box box = mc.player.getBoundingBox();
        int minX = MathHelper.floor(box.minX - WALL_RADIUS);
        int maxX = MathHelper.floor(box.maxX + WALL_RADIUS);
        int minY = MathHelper.floor(box.minY - 0.2);
        int maxY = MathHelper.floor(box.minY + 0.2);
        int minZ = MathHelper.floor(box.minZ - WALL_RADIUS);
        int maxZ = MathHelper.floor(box.maxZ + WALL_RADIUS);

        for (BlockPos pos : BlockPos.iterate(minX, minY, minZ, maxX, maxY, maxZ)) {
            if (mc.world.getFluidState(pos).isIn(FluidTags.WATER)) {
                return true;
            }
        }
        return false;
    }

    @EventHandler
    public void onSwimming(SwimmingEvent e) {
        if (modeSetting.isSelected("FunTime")) {
            if (mc.options.jumpKey.isPressed()) {
                float pitch = RotationController.INSTANCE.getRotation().getPitch();
                float boost = pitch >= 0 ? MathHelper.clamp(pitch / 45, 1, 2) : 1;
                e.getVector().y = 1 * boost;
            } else if (mc.options.sneakKey.isPressed()) {
                e.getVector().y = -0.8;
            }
        }
    }
}
 
Назад
Сверху Снизу