Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Апр 2025
- Сообщения
- 22
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Накалякал гуи мув, всякие вонтамы, спукичи, и тому подобные сервачки обходит спокойно, под ач с более строгими чеками есть Legit
UPD: DrugHack base
UPD: DrugHack base
Жоски бупас:
package main.syntax.modules.impl.movement;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import main.syntax.api.event.api.EventTarget;
import main.syntax.api.event.impl.EventPacket;
import main.syntax.api.event.impl.EventPlayerTick;
import main.syntax.modules.api.Category;
import main.syntax.modules.api.Module;
import main.syntax.modules.settings.api.Nameable;
import main.syntax.modules.settings.impl.EnumSetting;
import main.syntax.utils.network.NetworkUtils;
import main.syntax.utils.script.ScriptManager;
import main.syntax.utils.script.ScriptTask;
import main.syntax.utils.movement.InputUtils;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.screen.ingame.AnvilScreen;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.gui.screen.ingame.SignEditScreen;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket;
import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket;
public class GuiMove extends Module {
public enum Mode implements Nameable {
DEFAULT("settings.guimove.default"),
BYPASS("settings.guimove.bypass"),
LEGIT("settings.guimove.legit");
private final String name;
Mode(String name) { this.name = name; }
@Override
public String getName() { return name; }
}
private final EnumSetting<Mode> mode = new EnumSetting<>("settings.guimove.mode", Mode.DEFAULT);
private final List<Packet<?>> delayedPackets = new CopyOnWriteArrayList<>();
private final ScriptManager scriptManager = new ScriptManager();
private boolean processingPackets = false;
public GuiMove() {
super("GuiMove", Category.Movement);
}
@EventTarget
public void onPlayerTick(EventPlayerTick e) {
if (fullNullCheck()) {
cleanup();
return;
}
scriptManager.tick(e);
if (mc.currentScreen == null
|| mc.currentScreen instanceof ChatScreen
|| mc.currentScreen instanceof SignEditScreen
|| mc.currentScreen instanceof AnvilScreen) return;
for (KeyBinding binding : new KeyBinding[]{mc.options.forwardKey, mc.options.backKey, mc.options.rightKey, mc.options.leftKey, mc.options.jumpKey}) {
if (InputUtil.isKeyPressed(mc.getWindow().getHandle(), binding.getDefaultKey().getCode())) {
binding.setPressed(true);
}
}
}
@EventTarget
public void onPacketSend(EventPacket.Send e) {
if (fullNullCheck() || mode.getValue() == Mode.DEFAULT) return;
if (e.getPacket() instanceof ClickSlotC2SPacket clickPacket
&& mc.currentScreen instanceof InventoryScreen
&& hasPlayerMovement() && shouldAllowMovement()) {
delayedPackets.add(clickPacket);
e.setCancelled(true);
} else if (e.getPacket() instanceof CloseHandledScreenC2SPacket closePacket
&& closePacket.getSyncId() == 0 && !delayedPackets.isEmpty() && !processingPackets) {
delayedPackets.add(closePacket);
e.setCancelled(true);
processDelayedPackets();
}
}
private void processDelayedPackets() {
processingPackets = true;
ScriptTask task = new ScriptTask();
scriptManager.addTask(task);
if (mode.getValue() == Mode.BYPASS) {
// Эта фифа бупасит фантайм, спукич, и остальной сброд.
task.schedule(EventPlayerTick.class, e -> {
InputUtils.LockMovement();
return true;
}).schedule(EventPlayerTick.class, e -> {
for (Packet<?> p : delayedPackets) NetworkUtils.sendSilentPacket(p);
delayedPackets.clear();
processingPackets = false;
InputUtils.UnlockMovement();
return true;
});
} else {
// Legit мод чисто для матрикса, или еще какого либо ач который чекает задержки а не только инпут.
task.schedule(EventPlayerTick.class, e -> {
InputUtils.LockMovement();
return true;
}).schedule(EventPlayerTick.class, e -> {
return true;
}).schedule(EventPlayerTick.class, e -> {
return true;
}).schedule(EventPlayerTick.class, e -> {
for (Packet<?> p : delayedPackets) {
if (!(p instanceof CloseHandledScreenC2SPacket)) NetworkUtils.sendSilentPacket(p);
}
return true;
}).schedule(EventPlayerTick.class, e -> {
return true;
}).schedule(EventPlayerTick.class, e -> {
for (Packet<?> p : delayedPackets) {
if (p instanceof CloseHandledScreenC2SPacket) NetworkUtils.sendSilentPacket(p);
}
delayedPackets.clear();
return true;
}).schedule(EventPlayerTick.class, e -> {
return true;
}).schedule(EventPlayerTick.class, e -> {
InputUtils.UnlockMovement();
processingPackets = false;
return true;
});
}
}
private boolean hasPlayerMovement() {
return mc.player != null && mc.player.input != null
&& (mc.player.input.movementForward != 0f || mc.player.input.movementSideways != 0f);
}
private boolean shouldAllowMovement() {
return mc.player != null && mc.player.currentScreenHandler != null
&& mc.player.currentScreenHandler.slots.size() >= 27;
}
private void cleanup() {
delayedPackets.clear();
processingPackets = false;
InputUtils.UnlockMovement();
scriptManager.clear();
}
@Override
public void onEnable() {
super.onEnable();
}
@Override
public void onDisable() {
super.onDisable();
cleanup();
}
}