спастил с thunderhack по итогу флагает как сделать обход как в catlean
Код:
package ru.night.module.impl.combat;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.common.CommonPongC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import net.minecraft.network.packet.c2s.play.AdvancementTabC2SPacket;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import net.minecraft.network.packet.c2s.play.ClientStatusC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket;
import net.minecraft.util.math.Vec3d;
import ru.night.event.EventInit;
import ru.night.event.impl.EventPacket;
import ru.night.event.impl.EventUpdate;
import ru.night.module.api.Category;
import ru.night.module.api.IModule;
import ru.night.module.api.Module;
import ru.night.module.api.setting.Setting;
import ru.night.module.api.setting.impl.BooleanSetting;
import ru.night.module.api.setting.impl.SliderSetting;
import ru.night.util.player.NetworkUtil;
import ru.night.util.player.PlayerUtil;
import java.util.LinkedList;
import java.util.Queue;
@IModule(
name = "FakeLag",
description = "Задерживает пакеты движения",
category = Category.Combat,
bind = -1
)
@Environment(EnvType.CLIENT)
public class FakeLag extends Module {
private final BooleanSetting pulse = new BooleanSetting("Pulse", false);
private final BooleanSetting autoDisable = new BooleanSetting("AutoDisable", false);
private final BooleanSetting disableOnVelocity = new BooleanSetting("DisableOnVelocity", false);
private final SliderSetting disablePackets = new SliderSetting("DisablePackets", 17.0f, 1.0f, 1000.0f, 1.0f, false);
private final SliderSetting pulsePackets = new SliderSetting("PulsePackets", 20.0f, 1.0f, 1000.0f, 1.0f, false);
public static Vec3d lastPos = Vec3d.ZERO;
private Vec3d prevVelocity = Vec3d.ZERO;
private float prevYaw = 0;
private boolean prevSprinting = false;
private final Queue<Packet<?>> storedPackets = new LinkedList<>();
private final Queue<Packet<?>> storedTransactions = new LinkedList<>();
private boolean sending = false;
public FakeLag() {
this.addSettings(new Setting[]{pulse, autoDisable, disableOnVelocity, disablePackets, pulsePackets});
}
@Override
public void onEnable() {
super.onEnable();
if (mc.player == null || mc.world == null || mc.getNetworkHandler() == null) {
toggle();
return;
}
storedTransactions.clear();
storedPackets.clear();
lastPos = mc.player.getPos();
prevVelocity = mc.player.getVelocity();
prevYaw = mc.player.getYaw();
prevSprinting = mc.player.isSprinting();
sending = false;
}
@Override
public void onDisable() {
if (mc.world == null || mc.player == null) {
super.onDisable();
return;
}
sending = true;
while (!storedPackets.isEmpty()) {
Packet<?> packet = storedPackets.poll();
if (packet != null) {
NetworkUtil.sendSilentPacket(packet);
}
}
sending = false;
super.onDisable();
}
@EventInit
public void onPacket(EventPacket e) {
if (PlayerUtil.nullCheck()) return;
if (mc.player == null) return;
Packet<?> packet = e.getPacket();
if (!e.isSend()) {
if (packet instanceof EntityVelocityUpdateS2CPacket vel) {
if (vel.getEntityId() == mc.player.getId() && disableOnVelocity.get()) {
toggle();
}
}
return;
}
if (sending) {
return;
}
if (packet instanceof CommonPongC2SPacket) {
storedTransactions.add(packet);
}
if (pulse.get()) {
if (packet instanceof PlayerMoveC2SPacket) {
e.cancel();
storedPackets.add(packet);
}
} else {
if (!(packet instanceof ChatMessageC2SPacket
|| packet instanceof KeepAliveC2SPacket
|| packet instanceof AdvancementTabC2SPacket
|| packet instanceof ClientStatusC2SPacket)) {
e.cancel();
storedPackets.add(packet);
}
}
}
@EventInit
public void onUpdate(EventUpdate e) {
if (PlayerUtil.nullCheck()) return;
if (mc.player == null) return;
if (pulse.get()) {
if (storedPackets.size() >= (int) pulsePackets.get()) {
sendPackets();
}
}
if (autoDisable.get()) {
if (storedPackets.size() >= (int) disablePackets.get()) {
toggle();
}
}
}
private void sendPackets() {
if (mc.player == null) return;
sending = true;
while (!storedPackets.isEmpty()) {
Packet<?> packet = storedPackets.poll();
if (packet != null) {
NetworkUtil.sendSilentPacket(packet);
if (packet instanceof PlayerMoveC2SPacket movePacket
&& !(packet instanceof PlayerMoveC2SPacket.LookAndOnGround)) {
lastPos = new Vec3d(
movePacket.getX(mc.player.getX()),
movePacket.getY(mc.player.getY()),
movePacket.getZ(mc.player.getZ())
);
}
}
}
sending = false;
storedPackets.clear();
}
}