- Выберите загрузчик игры
- Fabric
Не гпт, не гемини, не клауд, не кодекс
Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS:
DW:
Присутствует рендер и обход вонтайма и тестового сервера на гриме.
SS:
DW:
SurroundModule:
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;
}
}