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

Визуальная часть Топовый SurroundModule | EvaWare v3

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

Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS:
1772872461189.png



DW:



SurroundModule:
Expand Collapse Copy
package sweetie.evaware.client.features.modules.combat;

import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.*;
import sweetie.evaware.api.event.EventListener;
import sweetie.evaware.api.event.Listener;
import sweetie.evaware.api.event.events.player.other.UpdateEvent;
import sweetie.evaware.api.event.events.render.Render3DEvent;
import sweetie.evaware.api.module.Category;
import sweetie.evaware.api.module.Module;
import sweetie.evaware.api.module.ModuleRegister;
import sweetie.evaware.api.module.setting.BooleanSetting;
import sweetie.evaware.api.module.setting.ModeSetting;
import sweetie.evaware.api.module.setting.SliderSetting;
import sweetie.evaware.api.utils.color.UIColors;
import sweetie.evaware.api.utils.player.InventoryUtil;
import sweetie.evaware.api.utils.render.RenderUtil;
import sweetie.evaware.api.utils.render.display.BoxRender;
import sweetie.evaware.api.utils.rotation.RotationUtil;
import sweetie.evaware.api.utils.rotation.manager.Rotation;
import sweetie.evaware.api.utils.rotation.manager.RotationManager;
import sweetie.evaware.api.utils.rotation.manager.RotationStrategy;
import sweetie.evaware.api.utils.rotation.rotations.SmoothRotation;
import sweetie.evaware.api.utils.task.TaskPriority;
import sweetie.evaware.api.utils.world.HoleUtility;
import sweetie.evaware.client.features.modules.movement.MoveFixModule;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

@ModuleRegister(name = "Surround", category = Category.COMBAT)
public class SurroundModule extends Module {

    @Getter public static SurroundModule instance = new SurroundModule();

    private final SliderSetting blocksPerTick = new SliderSetting("Blocks/Tick").value(4f).range(1f, 12f).step(1f);
    private final SliderSetting placeDelay = new SliderSetting("Delay").value(1f).range(0f, 10f).step(1f);
    private final ModeSetting centerMode = new ModeSetting("Center").value("Motion").values("Teleport", "Motion", "Disabled");
    private final BooleanSetting onYChange = new BooleanSetting("Disable on Jump").value(true);
    private final BooleanSetting rotate = new BooleanSetting("Rotate").value(true);
    private final BooleanSetting render = new BooleanSetting("Render").value(true);

    private int tickDelay;
    private double lastY;
    private int startSlot = -1;

    // Списки для логики и рендера
    private final List<BlockPos> placingPos = new ArrayList<>();
    private final List<BlockPos> completedPos = new ArrayList<>();

    public SurroundModule() {
        addSettings(blocksPerTick, placeDelay, centerMode, onYChange, rotate, render);
    }

    @Override
    public void onEnable() {
        if (mc.player == null) return;
        tickDelay = 0;
        lastY = mc.player.getY();
        startSlot = mc.player.getInventory().selectedSlot;

        int obsidian = findObsidian();
        if (obsidian != -1 && obsidian != startSlot) {
            InventoryUtil.swapToSlot(obsidian, true);
        }

        if (centerMode.is("Teleport")) {
            double x = MathHelper.floor(mc.player.getX()) + 0.5;
            double z = MathHelper.floor(mc.player.getZ()) + 0.5;
            mc.player.updatePosition(x, mc.player.getY(), z);
            mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    x, mc.player.getY(), z, mc.player.isOnGround(), mc.player.horizontalCollision
            ));
        }
    }

    @Override
    public void onDisable() {
        if (mc.player != null && startSlot != -1 && startSlot != mc.player.getInventory().selectedSlot) {
            InventoryUtil.swapToSlot(startSlot, true);
        }
        startSlot = -1;
        placingPos.clear();
        completedPos.clear();
    }

    @Override
    public void onEvent() {
        EventListener updateEvent = UpdateEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.player == null || mc.world == null) return;

            if (onYChange.getValue() && mc.player.getY() != lastY) {
                toggle();
                return;
            }
            lastY = mc.player.getY();

            if (centerMode.is("Motion")) doMotionCenter();

            List<BlockPos> allTargets = HoleUtility.getSurroundPoses(mc.player.getPos());

            placingPos.clear();
            completedPos.clear();

            for (BlockPos pos : allTargets) {
                BlockState state = mc.world.getBlockState(pos);
                if (!state.isReplaceable()) {
                    if (state.getBlock() == Blocks.OBSIDIAN || state.getBlock() == Blocks.CRYING_OBSIDIAN || state.getBlock() == Blocks.BEDROCK) {
                        completedPos.add(pos);
                    }
                    continue;
                }
                placingPos.add(pos);
            }

            if (tickDelay > 0) {
                tickDelay--;
                return;
            }

            int slot = findObsidian();
            if (slot == -1) return;

            int placed = 0;
            for (BlockPos pos : placingPos) {
                if (placed >= blocksPerTick.getValue().intValue()) break;

                if (!mc.world.getBlockState(pos).isReplaceable()) continue;

                if (placeBlockManual(pos)) {
                    placed++;
                }
            }

            tickDelay = placeDelay.getValue().intValue();
        }));

        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (!render.getValue() || mc.player == null) return;

            RenderUtil.BOX.setup3DRender(event.matrixStack());

            Color placingColor = new Color(255, 0, 0, 100);
            for (BlockPos pos : placingPos) {
                drawCenteredBox(pos, placingColor);
            }

            Color uiColor = UIColors.positiveColor(100);
            for (BlockPos pos : completedPos) {
                drawCenteredBox(pos, uiColor);
            }
        }));

        addEvents(updateEvent, renderEvent);
    }

    private void drawCenteredBox(BlockPos pos, Color color) {
        float x = (float) pos.getX();
        float y = (float) pos.getY();
        float z = (float) pos.getZ();

        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 1.5f, color, BoxRender.Render.FILL, 0f);
        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 2.0f, color.darker(), BoxRender.Render.OUTLINE, 0f);
    }
    private boolean placeBlockManual(BlockPos pos) {
        for (Direction side : Direction.values()) {
            BlockPos neighbor = pos.offset(side);
            if (!mc.world.getBlockState(neighbor).isReplaceable()) {
                Vec3d hitVec = Vec3d.ofCenter(neighbor).add(Vec3d.of(side.getOpposite().getVector()).multiply(0.5));

                if (rotate.getValue()) {
                    Rotation r = RotationUtil.rotationAt(hitVec);
                    RotationManager.getInstance().addRotation(
                            new Rotation.VecRotation(r, hitVec),
                            null,
                            new RotationStrategy(new SmoothRotation(), MoveFixModule.enabled(), true),
                            TaskPriority.CRITICAL,
                            this
                    );
                }

                mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(hitVec, side.getOpposite(), neighbor, false));
                mc.player.swingHand(Hand.MAIN_HAND);
                return true;
            }
        }
        return false;
    }

    private void doMotionCenter() {
        double targetX = MathHelper.floor(mc.player.getX()) + 0.5;
        double targetZ = MathHelper.floor(mc.player.getZ()) + 0.5;
        double dx = targetX - mc.player.getX();
        double dz = targetZ - mc.player.getZ();

        if (Math.abs(dx) > 0.1 || Math.abs(dz) > 0.1) {
            mc.player.setVelocity(dx * 0.45, mc.player.getVelocity().y, dz * 0.45);
        }
    }

    private int findObsidian() {
        for (int i = 0; i < 9; i++) {
            if (mc.player.getInventory().getStack(i).isOf(Items.OBSIDIAN)) return i;
        }
        return -1;
    }
}
 
Не гпт, не гемини, не клауд, не кодекс

Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS: Посмотреть вложение 329623


DW:



SurroundModule:
Expand Collapse Copy
package sweetie.evaware.client.features.modules.combat;

import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.*;
import sweetie.evaware.api.event.EventListener;
import sweetie.evaware.api.event.Listener;
import sweetie.evaware.api.event.events.player.other.UpdateEvent;
import sweetie.evaware.api.event.events.render.Render3DEvent;
import sweetie.evaware.api.module.Category;
import sweetie.evaware.api.module.Module;
import sweetie.evaware.api.module.ModuleRegister;
import sweetie.evaware.api.module.setting.BooleanSetting;
import sweetie.evaware.api.module.setting.ModeSetting;
import sweetie.evaware.api.module.setting.SliderSetting;
import sweetie.evaware.api.utils.color.UIColors;
import sweetie.evaware.api.utils.player.InventoryUtil;
import sweetie.evaware.api.utils.render.RenderUtil;
import sweetie.evaware.api.utils.render.display.BoxRender;
import sweetie.evaware.api.utils.rotation.RotationUtil;
import sweetie.evaware.api.utils.rotation.manager.Rotation;
import sweetie.evaware.api.utils.rotation.manager.RotationManager;
import sweetie.evaware.api.utils.rotation.manager.RotationStrategy;
import sweetie.evaware.api.utils.rotation.rotations.SmoothRotation;
import sweetie.evaware.api.utils.task.TaskPriority;
import sweetie.evaware.api.utils.world.HoleUtility;
import sweetie.evaware.client.features.modules.movement.MoveFixModule;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

@ModuleRegister(name = "Surround", category = Category.COMBAT)
public class SurroundModule extends Module {

    @Getter public static SurroundModule instance = new SurroundModule();

    private final SliderSetting blocksPerTick = new SliderSetting("Blocks/Tick").value(4f).range(1f, 12f).step(1f);
    private final SliderSetting placeDelay = new SliderSetting("Delay").value(1f).range(0f, 10f).step(1f);
    private final ModeSetting centerMode = new ModeSetting("Center").value("Motion").values("Teleport", "Motion", "Disabled");
    private final BooleanSetting onYChange = new BooleanSetting("Disable on Jump").value(true);
    private final BooleanSetting rotate = new BooleanSetting("Rotate").value(true);
    private final BooleanSetting render = new BooleanSetting("Render").value(true);

    private int tickDelay;
    private double lastY;
    private int startSlot = -1;

    // Списки для логики и рендера
    private final List<BlockPos> placingPos = new ArrayList<>();
    private final List<BlockPos> completedPos = new ArrayList<>();

    public SurroundModule() {
        addSettings(blocksPerTick, placeDelay, centerMode, onYChange, rotate, render);
    }

    @Override
    public void onEnable() {
        if (mc.player == null) return;
        tickDelay = 0;
        lastY = mc.player.getY();
        startSlot = mc.player.getInventory().selectedSlot;

        int obsidian = findObsidian();
        if (obsidian != -1 && obsidian != startSlot) {
            InventoryUtil.swapToSlot(obsidian, true);
        }

        if (centerMode.is("Teleport")) {
            double x = MathHelper.floor(mc.player.getX()) + 0.5;
            double z = MathHelper.floor(mc.player.getZ()) + 0.5;
            mc.player.updatePosition(x, mc.player.getY(), z);
            mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    x, mc.player.getY(), z, mc.player.isOnGround(), mc.player.horizontalCollision
            ));
        }
    }

    @Override
    public void onDisable() {
        if (mc.player != null && startSlot != -1 && startSlot != mc.player.getInventory().selectedSlot) {
            InventoryUtil.swapToSlot(startSlot, true);
        }
        startSlot = -1;
        placingPos.clear();
        completedPos.clear();
    }

    @Override
    public void onEvent() {
        EventListener updateEvent = UpdateEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.player == null || mc.world == null) return;

            if (onYChange.getValue() && mc.player.getY() != lastY) {
                toggle();
                return;
            }
            lastY = mc.player.getY();

            if (centerMode.is("Motion")) doMotionCenter();

            List<BlockPos> allTargets = HoleUtility.getSurroundPoses(mc.player.getPos());

            placingPos.clear();
            completedPos.clear();

            for (BlockPos pos : allTargets) {
                BlockState state = mc.world.getBlockState(pos);
                if (!state.isReplaceable()) {
                    if (state.getBlock() == Blocks.OBSIDIAN || state.getBlock() == Blocks.CRYING_OBSIDIAN || state.getBlock() == Blocks.BEDROCK) {
                        completedPos.add(pos);
                    }
                    continue;
                }
                placingPos.add(pos);
            }

            if (tickDelay > 0) {
                tickDelay--;
                return;
            }

            int slot = findObsidian();
            if (slot == -1) return;

            int placed = 0;
            for (BlockPos pos : placingPos) {
                if (placed >= blocksPerTick.getValue().intValue()) break;

                if (!mc.world.getBlockState(pos).isReplaceable()) continue;

                if (placeBlockManual(pos)) {
                    placed++;
                }
            }

            tickDelay = placeDelay.getValue().intValue();
        }));

        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (!render.getValue() || mc.player == null) return;

            RenderUtil.BOX.setup3DRender(event.matrixStack());

            Color placingColor = new Color(255, 0, 0, 100);
            for (BlockPos pos : placingPos) {
                drawCenteredBox(pos, placingColor);
            }

            Color uiColor = UIColors.positiveColor(100);
            for (BlockPos pos : completedPos) {
                drawCenteredBox(pos, uiColor);
            }
        }));

        addEvents(updateEvent, renderEvent);
    }

    private void drawCenteredBox(BlockPos pos, Color color) {
        float x = (float) pos.getX();
        float y = (float) pos.getY();
        float z = (float) pos.getZ();

        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 1.5f, color, BoxRender.Render.FILL, 0f);
        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 2.0f, color.darker(), BoxRender.Render.OUTLINE, 0f);
    }
    private boolean placeBlockManual(BlockPos pos) {
        for (Direction side : Direction.values()) {
            BlockPos neighbor = pos.offset(side);
            if (!mc.world.getBlockState(neighbor).isReplaceable()) {
                Vec3d hitVec = Vec3d.ofCenter(neighbor).add(Vec3d.of(side.getOpposite().getVector()).multiply(0.5));

                if (rotate.getValue()) {
                    Rotation r = RotationUtil.rotationAt(hitVec);
                    RotationManager.getInstance().addRotation(
                            new Rotation.VecRotation(r, hitVec),
                            null,
                            new RotationStrategy(new SmoothRotation(), MoveFixModule.enabled(), true),
                            TaskPriority.CRITICAL,
                            this
                    );
                }

                mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(hitVec, side.getOpposite(), neighbor, false));
                mc.player.swingHand(Hand.MAIN_HAND);
                return true;
            }
        }
        return false;
    }

    private void doMotionCenter() {
        double targetX = MathHelper.floor(mc.player.getX()) + 0.5;
        double targetZ = MathHelper.floor(mc.player.getZ()) + 0.5;
        double dx = targetX - mc.player.getX();
        double dz = targetZ - mc.player.getZ();

        if (Math.abs(dx) > 0.1 || Math.abs(dz) > 0.1) {
            mc.player.setVelocity(dx * 0.45, mc.player.getVelocity().y, dz * 0.45);
        }
    }

    private int findObsidian() {
        for (int i = 0; i < 9; i++) {
            if (mc.player.getInventory().getStack(i).isOf(Items.OBSIDIAN)) return i;
        }
        return -1;
    }
}
Чувак, а чо за сервер www mioclient me?

Ну точнее есть ли там дебаг инфа о флагах?
 
Последнее редактирование:
Не гпт, не гемини, не клауд, не кодекс

Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS: Посмотреть вложение 329623


DW:



SurroundModule:
Expand Collapse Copy
package sweetie.evaware.client.features.modules.combat;

import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.*;
import sweetie.evaware.api.event.EventListener;
import sweetie.evaware.api.event.Listener;
import sweetie.evaware.api.event.events.player.other.UpdateEvent;
import sweetie.evaware.api.event.events.render.Render3DEvent;
import sweetie.evaware.api.module.Category;
import sweetie.evaware.api.module.Module;
import sweetie.evaware.api.module.ModuleRegister;
import sweetie.evaware.api.module.setting.BooleanSetting;
import sweetie.evaware.api.module.setting.ModeSetting;
import sweetie.evaware.api.module.setting.SliderSetting;
import sweetie.evaware.api.utils.color.UIColors;
import sweetie.evaware.api.utils.player.InventoryUtil;
import sweetie.evaware.api.utils.render.RenderUtil;
import sweetie.evaware.api.utils.render.display.BoxRender;
import sweetie.evaware.api.utils.rotation.RotationUtil;
import sweetie.evaware.api.utils.rotation.manager.Rotation;
import sweetie.evaware.api.utils.rotation.manager.RotationManager;
import sweetie.evaware.api.utils.rotation.manager.RotationStrategy;
import sweetie.evaware.api.utils.rotation.rotations.SmoothRotation;
import sweetie.evaware.api.utils.task.TaskPriority;
import sweetie.evaware.api.utils.world.HoleUtility;
import sweetie.evaware.client.features.modules.movement.MoveFixModule;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

@ModuleRegister(name = "Surround", category = Category.COMBAT)
public class SurroundModule extends Module {

    @Getter public static SurroundModule instance = new SurroundModule();

    private final SliderSetting blocksPerTick = new SliderSetting("Blocks/Tick").value(4f).range(1f, 12f).step(1f);
    private final SliderSetting placeDelay = new SliderSetting("Delay").value(1f).range(0f, 10f).step(1f);
    private final ModeSetting centerMode = new ModeSetting("Center").value("Motion").values("Teleport", "Motion", "Disabled");
    private final BooleanSetting onYChange = new BooleanSetting("Disable on Jump").value(true);
    private final BooleanSetting rotate = new BooleanSetting("Rotate").value(true);
    private final BooleanSetting render = new BooleanSetting("Render").value(true);

    private int tickDelay;
    private double lastY;
    private int startSlot = -1;

    // Списки для логики и рендера
    private final List<BlockPos> placingPos = new ArrayList<>();
    private final List<BlockPos> completedPos = new ArrayList<>();

    public SurroundModule() {
        addSettings(blocksPerTick, placeDelay, centerMode, onYChange, rotate, render);
    }

    @Override
    public void onEnable() {
        if (mc.player == null) return;
        tickDelay = 0;
        lastY = mc.player.getY();
        startSlot = mc.player.getInventory().selectedSlot;

        int obsidian = findObsidian();
        if (obsidian != -1 && obsidian != startSlot) {
            InventoryUtil.swapToSlot(obsidian, true);
        }

        if (centerMode.is("Teleport")) {
            double x = MathHelper.floor(mc.player.getX()) + 0.5;
            double z = MathHelper.floor(mc.player.getZ()) + 0.5;
            mc.player.updatePosition(x, mc.player.getY(), z);
            mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    x, mc.player.getY(), z, mc.player.isOnGround(), mc.player.horizontalCollision
            ));
        }
    }

    @Override
    public void onDisable() {
        if (mc.player != null && startSlot != -1 && startSlot != mc.player.getInventory().selectedSlot) {
            InventoryUtil.swapToSlot(startSlot, true);
        }
        startSlot = -1;
        placingPos.clear();
        completedPos.clear();
    }

    @Override
    public void onEvent() {
        EventListener updateEvent = UpdateEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.player == null || mc.world == null) return;

            if (onYChange.getValue() && mc.player.getY() != lastY) {
                toggle();
                return;
            }
            lastY = mc.player.getY();

            if (centerMode.is("Motion")) doMotionCenter();

            List<BlockPos> allTargets = HoleUtility.getSurroundPoses(mc.player.getPos());

            placingPos.clear();
            completedPos.clear();

            for (BlockPos pos : allTargets) {
                BlockState state = mc.world.getBlockState(pos);
                if (!state.isReplaceable()) {
                    if (state.getBlock() == Blocks.OBSIDIAN || state.getBlock() == Blocks.CRYING_OBSIDIAN || state.getBlock() == Blocks.BEDROCK) {
                        completedPos.add(pos);
                    }
                    continue;
                }
                placingPos.add(pos);
            }

            if (tickDelay > 0) {
                tickDelay--;
                return;
            }

            int slot = findObsidian();
            if (slot == -1) return;

            int placed = 0;
            for (BlockPos pos : placingPos) {
                if (placed >= blocksPerTick.getValue().intValue()) break;

                if (!mc.world.getBlockState(pos).isReplaceable()) continue;

                if (placeBlockManual(pos)) {
                    placed++;
                }
            }

            tickDelay = placeDelay.getValue().intValue();
        }));

        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (!render.getValue() || mc.player == null) return;

            RenderUtil.BOX.setup3DRender(event.matrixStack());

            Color placingColor = new Color(255, 0, 0, 100);
            for (BlockPos pos : placingPos) {
                drawCenteredBox(pos, placingColor);
            }

            Color uiColor = UIColors.positiveColor(100);
            for (BlockPos pos : completedPos) {
                drawCenteredBox(pos, uiColor);
            }
        }));

        addEvents(updateEvent, renderEvent);
    }

    private void drawCenteredBox(BlockPos pos, Color color) {
        float x = (float) pos.getX();
        float y = (float) pos.getY();
        float z = (float) pos.getZ();

        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 1.5f, color, BoxRender.Render.FILL, 0f);
        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 2.0f, color.darker(), BoxRender.Render.OUTLINE, 0f);
    }
    private boolean placeBlockManual(BlockPos pos) {
        for (Direction side : Direction.values()) {
            BlockPos neighbor = pos.offset(side);
            if (!mc.world.getBlockState(neighbor).isReplaceable()) {
                Vec3d hitVec = Vec3d.ofCenter(neighbor).add(Vec3d.of(side.getOpposite().getVector()).multiply(0.5));

                if (rotate.getValue()) {
                    Rotation r = RotationUtil.rotationAt(hitVec);
                    RotationManager.getInstance().addRotation(
                            new Rotation.VecRotation(r, hitVec),
                            null,
                            new RotationStrategy(new SmoothRotation(), MoveFixModule.enabled(), true),
                            TaskPriority.CRITICAL,
                            this
                    );
                }

                mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(hitVec, side.getOpposite(), neighbor, false));
                mc.player.swingHand(Hand.MAIN_HAND);
                return true;
            }
        }
        return false;
    }

    private void doMotionCenter() {
        double targetX = MathHelper.floor(mc.player.getX()) + 0.5;
        double targetZ = MathHelper.floor(mc.player.getZ()) + 0.5;
        double dx = targetX - mc.player.getX();
        double dz = targetZ - mc.player.getZ();

        if (Math.abs(dx) > 0.1 || Math.abs(dz) > 0.1) {
            mc.player.setVelocity(dx * 0.45, mc.player.getVelocity().y, dz * 0.45);
        }
    }

    private int findObsidian() {
        for (int i = 0; i < 9; i++) {
            if (mc.player.getInventory().getStack(i).isOf(Items.OBSIDIAN)) return i;
        }
        return -1;
    }
}
что это на картинке
 
Не гпт, не гемини, не клауд, не кодекс

Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS: Посмотреть вложение 329623


DW:



SurroundModule:
Expand Collapse Copy
package sweetie.evaware.client.features.modules.combat;

import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.*;
import sweetie.evaware.api.event.EventListener;
import sweetie.evaware.api.event.Listener;
import sweetie.evaware.api.event.events.player.other.UpdateEvent;
import sweetie.evaware.api.event.events.render.Render3DEvent;
import sweetie.evaware.api.module.Category;
import sweetie.evaware.api.module.Module;
import sweetie.evaware.api.module.ModuleRegister;
import sweetie.evaware.api.module.setting.BooleanSetting;
import sweetie.evaware.api.module.setting.ModeSetting;
import sweetie.evaware.api.module.setting.SliderSetting;
import sweetie.evaware.api.utils.color.UIColors;
import sweetie.evaware.api.utils.player.InventoryUtil;
import sweetie.evaware.api.utils.render.RenderUtil;
import sweetie.evaware.api.utils.render.display.BoxRender;
import sweetie.evaware.api.utils.rotation.RotationUtil;
import sweetie.evaware.api.utils.rotation.manager.Rotation;
import sweetie.evaware.api.utils.rotation.manager.RotationManager;
import sweetie.evaware.api.utils.rotation.manager.RotationStrategy;
import sweetie.evaware.api.utils.rotation.rotations.SmoothRotation;
import sweetie.evaware.api.utils.task.TaskPriority;
import sweetie.evaware.api.utils.world.HoleUtility;
import sweetie.evaware.client.features.modules.movement.MoveFixModule;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

@ModuleRegister(name = "Surround", category = Category.COMBAT)
public class SurroundModule extends Module {

    @Getter public static SurroundModule instance = new SurroundModule();

    private final SliderSetting blocksPerTick = new SliderSetting("Blocks/Tick").value(4f).range(1f, 12f).step(1f);
    private final SliderSetting placeDelay = new SliderSetting("Delay").value(1f).range(0f, 10f).step(1f);
    private final ModeSetting centerMode = new ModeSetting("Center").value("Motion").values("Teleport", "Motion", "Disabled");
    private final BooleanSetting onYChange = new BooleanSetting("Disable on Jump").value(true);
    private final BooleanSetting rotate = new BooleanSetting("Rotate").value(true);
    private final BooleanSetting render = new BooleanSetting("Render").value(true);

    private int tickDelay;
    private double lastY;
    private int startSlot = -1;

    // Списки для логики и рендера
    private final List<BlockPos> placingPos = new ArrayList<>();
    private final List<BlockPos> completedPos = new ArrayList<>();

    public SurroundModule() {
        addSettings(blocksPerTick, placeDelay, centerMode, onYChange, rotate, render);
    }

    @Override
    public void onEnable() {
        if (mc.player == null) return;
        tickDelay = 0;
        lastY = mc.player.getY();
        startSlot = mc.player.getInventory().selectedSlot;

        int obsidian = findObsidian();
        if (obsidian != -1 && obsidian != startSlot) {
            InventoryUtil.swapToSlot(obsidian, true);
        }

        if (centerMode.is("Teleport")) {
            double x = MathHelper.floor(mc.player.getX()) + 0.5;
            double z = MathHelper.floor(mc.player.getZ()) + 0.5;
            mc.player.updatePosition(x, mc.player.getY(), z);
            mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(
                    x, mc.player.getY(), z, mc.player.isOnGround(), mc.player.horizontalCollision
            ));
        }
    }

    @Override
    public void onDisable() {
        if (mc.player != null && startSlot != -1 && startSlot != mc.player.getInventory().selectedSlot) {
            InventoryUtil.swapToSlot(startSlot, true);
        }
        startSlot = -1;
        placingPos.clear();
        completedPos.clear();
    }

    @Override
    public void onEvent() {
        EventListener updateEvent = UpdateEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.player == null || mc.world == null) return;

            if (onYChange.getValue() && mc.player.getY() != lastY) {
                toggle();
                return;
            }
            lastY = mc.player.getY();

            if (centerMode.is("Motion")) doMotionCenter();

            List<BlockPos> allTargets = HoleUtility.getSurroundPoses(mc.player.getPos());

            placingPos.clear();
            completedPos.clear();

            for (BlockPos pos : allTargets) {
                BlockState state = mc.world.getBlockState(pos);
                if (!state.isReplaceable()) {
                    if (state.getBlock() == Blocks.OBSIDIAN || state.getBlock() == Blocks.CRYING_OBSIDIAN || state.getBlock() == Blocks.BEDROCK) {
                        completedPos.add(pos);
                    }
                    continue;
                }
                placingPos.add(pos);
            }

            if (tickDelay > 0) {
                tickDelay--;
                return;
            }

            int slot = findObsidian();
            if (slot == -1) return;

            int placed = 0;
            for (BlockPos pos : placingPos) {
                if (placed >= blocksPerTick.getValue().intValue()) break;

                if (!mc.world.getBlockState(pos).isReplaceable()) continue;

                if (placeBlockManual(pos)) {
                    placed++;
                }
            }

            tickDelay = placeDelay.getValue().intValue();
        }));

        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (!render.getValue() || mc.player == null) return;

            RenderUtil.BOX.setup3DRender(event.matrixStack());

            Color placingColor = new Color(255, 0, 0, 100);
            for (BlockPos pos : placingPos) {
                drawCenteredBox(pos, placingColor);
            }

            Color uiColor = UIColors.positiveColor(100);
            for (BlockPos pos : completedPos) {
                drawCenteredBox(pos, uiColor);
            }
        }));

        addEvents(updateEvent, renderEvent);
    }

    private void drawCenteredBox(BlockPos pos, Color color) {
        float x = (float) pos.getX();
        float y = (float) pos.getY();
        float z = (float) pos.getZ();

        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 1.5f, color, BoxRender.Render.FILL, 0f);
        RenderUtil.BOX.drawBox(x, y, z, x + 29f, y + 29f, z + 29f, 2.0f, color.darker(), BoxRender.Render.OUTLINE, 0f);
    }
    private boolean placeBlockManual(BlockPos pos) {
        for (Direction side : Direction.values()) {
            BlockPos neighbor = pos.offset(side);
            if (!mc.world.getBlockState(neighbor).isReplaceable()) {
                Vec3d hitVec = Vec3d.ofCenter(neighbor).add(Vec3d.of(side.getOpposite().getVector()).multiply(0.5));

                if (rotate.getValue()) {
                    Rotation r = RotationUtil.rotationAt(hitVec);
                    RotationManager.getInstance().addRotation(
                            new Rotation.VecRotation(r, hitVec),
                            null,
                            new RotationStrategy(new SmoothRotation(), MoveFixModule.enabled(), true),
                            TaskPriority.CRITICAL,
                            this
                    );
                }

                mc.interactionManager.interactBlock(mc.player, Hand.MAIN_HAND, new BlockHitResult(hitVec, side.getOpposite(), neighbor, false));
                mc.player.swingHand(Hand.MAIN_HAND);
                return true;
            }
        }
        return false;
    }

    private void doMotionCenter() {
        double targetX = MathHelper.floor(mc.player.getX()) + 0.5;
        double targetZ = MathHelper.floor(mc.player.getZ()) + 0.5;
        double dx = targetX - mc.player.getX();
        double dz = targetZ - mc.player.getZ();

        if (Math.abs(dx) > 0.1 || Math.abs(dz) > 0.1) {
            mc.player.setVelocity(dx * 0.45, mc.player.getVelocity().y, dz * 0.45);
        }
    }

    private int findObsidian() {
        for (int i = 0; i < 9; i++) {
            if (mc.player.getInventory().getStack(i).isOf(Items.OBSIDIAN)) return i;
        }
        return -1;
    }
}
молодец братан нихуя не понятно
 
Назад
Сверху Снизу