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

Часть функционала BlockFly | TH Recode

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Ноя 2025
Сообщения
9
Реакции
0
Выберите загрузчик игры
  1. Fabric
blockfly.java:
Expand Collapse Copy
package thunder.hack.features.modules.movement;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.atomic.AtomicBoolean;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.c2s.play.ClientStatusC2SPacket;
import net.minecraft.network.packet.c2s.common.KeepAliveC2SPacket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import thunder.hack.events.impl.EventTick;
import thunder.hack.events.impl.PacketEvent;
import thunder.hack.features.modules.Module;
import thunder.hack.setting.Setting;

public class BlockFly extends Module {
private static final Logger LOGGER = LoggerFactory.getLogger("BlockFly");

private final Setting<Mode> mode = new Setting<>("Mode", Mode.Smart);
private final Setting<Integer> intervalMs = new Setting<>("Interval", 500, 50, 5000,
v -> this.mode.getValue() == Mode.Normal);
private final Setting<Integer> maxQueueSize = new Setting<>("MaxQueueSize", 1000, 100, 5000);
private final Setting<Boolean> debug = new Setting<>("Debug", false);

private final Queue<Packet<?>> storedPackets = new LinkedList<>();
private final AtomicBoolean sending = new AtomicBoolean(false);
private final Random random = new Random();

private long lastPulseTime = 0L;
private int currentPulseDelayMs = 0;
private int totalPacketsSent = 0;
private int totalPacketsQueued = 0;

public BlockFly() {
super("BlockFly", Module.Category.MOVEMENT);
}

[USER=1367676]@override[/USER]
public void onEnable() {
if (mc.player == null || mc.world == null || mc.isIntegratedServerRunning() || mc.getNetworkHandler() == null) {
disable();
return;
}

storedPackets.clear();
sending.set(false);
lastPulseTime = System.currentTimeMillis();
currentPulseDelayMs = mode.getValue() == Mode.Smart ? rand(150, 250) : intervalMs.getValue();
totalPacketsSent = 0;
totalPacketsQueued = 0;

if (debug.getValue()) {
LOGGER.info("BlockFly: Модуль включен, режим: {}", mode.getValue());
}
}

[USER=1367676]@override[/USER]
public void onDisable() {
if (mc.world == null || mc.player == null) return;

sending.set(true);
int flushedCount = flushPackets();
sending.set(false);

if (debug.getValue()) {
LOGGER.info("BlockFly: Модуль выключен");
LOGGER.info("BlockFly: Статистика - Всего пакетов в очереди: {}", totalPacketsQueued);
LOGGER.info("BlockFly: Статистика - Всего пакетов отправлено: {}", totalPacketsSent);
LOGGER.info("BlockFly: Статистика - Пакетов сброшено при выключении: {}", flushedCount);
}
}

[USER=1489798]@EventHandler[/USER]
public void onUpdate(EventTick event) {
if (mc.player == null || mc.world == null) return;

long now = System.currentTimeMillis();
if (now - lastPulseTime >= currentPulseDelayMs && !storedPackets.isEmpty()) {
flushPackets();
lastPulseTime = now;
currentPulseDelayMs = mode.getValue() == Mode.Smart ? rand(150, 250) : intervalMs.getValue();
}
}

private int flushPackets() {
if (mc.player == null) return 0;

sending.set(true);
int packetCount = storedPackets.size();
int flushedCount = 0;

while (!storedPackets.isEmpty()) {
Packet<?> packet = storedPackets.poll();
sendPacket(packet);
totalPacketsSent++;
flushedCount++;
}

sending.set(false);

if (debug.getValue() && packetCount > 0) {
LOGGER.info("BlockFly: Отправлена пачка пакетов - Количество: {}", packetCount);
}

return flushedCount;
}

private int rand(int min, int max) {
return min + random.nextInt(max - min + 1); // Исправлено
}

[USER=1489798]@EventHandler[/USER]
public void onPacketSend(PacketEvent.Send event) {
if (mc.player == null || mc.world == null || sending.get()) return;

Packet<?> packet = event.getPacket();
if (packet instanceof ClientStatusC2SPacket || packet instanceof KeepAliveC2SPacket) {
return; // Не блокируем важные пакеты
}

// Проверяем размер очереди
if (storedPackets.size() >= maxQueueSize.getValue()) {
if (debug.getValue()) {
LOGGER.warn("BlockFly: Очередь переполнена, отправляем пакет немедленно");
}
return; // Пропускаем пакет для немедленной отправки
}

event.cancel();
storedPackets.add(packet);
totalPacketsQueued++;

if (debug.getValue() && totalPacketsQueued % 50 == 0) {
LOGGER.info("BlockFly: Пакет добавлен в очередь - Всего в очереди: {}, Всего добавлено: {}",
storedPackets.size(), totalPacketsQueued);
}
}

[USER=1367676]@override[/USER]
public String getDisplayInfo() {
return Integer.toString(storedPackets.size());
}

private enum Mode {
Normal,
Smart
}
}
Работает на гриме,использовать со скаффолдом вместе.
Раньше играл с этим на Jenro0 бедварсе,потом сменили античит
Настроки:Normal,1344
 
Назад
Сверху Снизу