From 89a49e2d58c31fa3a50646ac65fcaaf4efaacaec Mon Sep 17 00:00:00 2001 From: Caleb Burke Date: Sat, 4 Jul 2026 18:22:56 -0700 Subject: [PATCH] disconnect if healthcheck fails --- src/client/java/skybot/SkybotClient.java | 8 +++++ .../java/skybot/utilities/TickScheduler.java | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/client/java/skybot/utilities/TickScheduler.java diff --git a/src/client/java/skybot/SkybotClient.java b/src/client/java/skybot/SkybotClient.java index c8a3506..fe6c94e 100644 --- a/src/client/java/skybot/SkybotClient.java +++ b/src/client/java/skybot/SkybotClient.java @@ -14,11 +14,14 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import org.lwjgl.glfw.GLFW; +import net.minecraft.text.Text; + import skybot.commands.CommandManager; import skybot.controller.Controller; import skybot.farmers.Farmer; import skybot.task.TaskQueue; import skybot.utilities.ChatMenu; +import skybot.utilities.TickScheduler; public class SkybotClient implements ClientModInitializer { @@ -93,6 +96,7 @@ public class SkybotClient implements ClientModInitializer { @Override public void onInitializeClient() { KeyBindingHelper.registerKeyBinding(STOP_KEY); + TickScheduler.register(); ClientPlayerBlockBreakEvents.AFTER .register((world, player, pos, state) -> lastBreakTime = System.currentTimeMillis()); @@ -137,7 +141,11 @@ public class SkybotClient implements ClientModInitializer { tickCount++; if (botEnabled && tickCount % HEALTHCHECK_INTERVAL_TICKS == 0 && !activeFarmer.healthcheck()) { ChatMenu.send("§cHealthcheck failed, stopping bot.§r"); + ChatMenu.send("§cDisconnecting in 3 seconds...§r"); stopBot(); + TickScheduler.schedule( + () -> MinecraftClient.getInstance().disconnect(Text.literal("Skybot healthcheck failed")), + 60); } } }); diff --git a/src/client/java/skybot/utilities/TickScheduler.java b/src/client/java/skybot/utilities/TickScheduler.java new file mode 100644 index 0000000..d5f31ea --- /dev/null +++ b/src/client/java/skybot/utilities/TickScheduler.java @@ -0,0 +1,35 @@ +package skybot.utilities; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; + +import java.util.concurrent.ConcurrentLinkedQueue; + +public class TickScheduler { + private record Task(Runnable action, int ticksRemaining) { + } + + private static final ConcurrentLinkedQueue tasks = new ConcurrentLinkedQueue<>(); + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> tick()); + } + + public static void schedule(Runnable action, int delayTicks) { + tasks.add(new Task(action, delayTicks)); + } + + private static void tick() { + int size = tasks.size(); + for (int i = 0; i < size; i++) { + Task t = tasks.poll(); + if (t == null) + break; + int remaining = t.ticksRemaining() - 1; + if (remaining <= 0) { + t.action().run(); + } else { + tasks.add(new Task(t.action(), remaining)); + } + } + } +} \ No newline at end of file