From e8a4c03e8c19994fa0665ffd01587b77fafc2888 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Wed, 7 May 2025 17:51:59 +0700 Subject: [PATCH] feat: tick using debug sample refactor: remove onAlwaysTick because no one uses it --- build-number.txt | 2 +- .../chomens_bot/data/listener/Listener.java | 2 +- .../chomens_bot/plugins/BruhifyPlugin.java | 2 +- .../chomens_bot/plugins/CorePlugin.java | 7 +- .../chomens_bot/plugins/TickPlugin.java | 64 ++++++++++++++----- 5 files changed, 57 insertions(+), 20 deletions(-) diff --git a/build-number.txt b/build-number.txt index dca4f667..d1c3966d 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -3156 \ No newline at end of file +3165 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/data/listener/Listener.java b/src/main/java/me/chayapak1/chomens_bot/data/listener/Listener.java index fc2e4601..506669c2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/data/listener/Listener.java +++ b/src/main/java/me/chayapak1/chomens_bot/data/listener/Listener.java @@ -29,7 +29,7 @@ public interface Listener { // ticker default void onTick () { } - default void onAlwaysTick () { } + default void onLocalTick () { } default void onSecondTick () { } default void onLocalSecondTick () { } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/BruhifyPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/BruhifyPlugin.java index 8c1b7d26..6fc8480c 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/BruhifyPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/BruhifyPlugin.java @@ -25,7 +25,7 @@ public class BruhifyPlugin implements Listener { } @Override - public void onTick () { + public void onLocalTick () { if (bruhifyText.isBlank()) return; final int increment = 360 / Math.max(bruhifyText.length(), 20); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java index 5aefe619..998e0532 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java @@ -94,8 +94,6 @@ public class CorePlugin implements Listener { @Override public void onTick () { - if (commandsPerTick.get() > 0) commandsPerTick.decrementAndGet(); - if (!pendingCommands.isEmpty() && exists) { // people that pre-order on TEMU application. Shop Like A Billionaire!!! if (pendingCommands.size() > 256) { @@ -121,6 +119,11 @@ public class CorePlugin implements Listener { forceRunPlaceBlock(command); } + @Override + public void onLocalTick () { + if (commandsPerTick.get() > 0) commandsPerTick.decrementAndGet(); + } + @Override public void onLocalSecondTick () { resizeTick(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java index 3956d29b..af4394ba 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java @@ -3,8 +3,12 @@ package me.chayapak1.chomens_bot.plugins; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.listener.Listener; import org.geysermc.mcprotocollib.network.Session; +import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; import org.geysermc.mcprotocollib.network.packet.Packet; +import org.geysermc.mcprotocollib.protocol.data.game.RemoteDebugSampleType; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundDebugSamplePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundSetTimePacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundDebugSampleSubscriptionPacket; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -15,6 +19,9 @@ public class TickPlugin implements Listener { public final AtomicLong lastTickTime = new AtomicLong(); public final AtomicLong lastSecondTickTime = new AtomicLong(); + private boolean receivedDebugSample = false; + private final AtomicLong lastDebugSubscriptionTime = new AtomicLong(); + public TickPlugin (final Bot bot) { this.bot = bot; @@ -24,18 +31,49 @@ public class TickPlugin implements Listener { bot.executor.scheduleAtFixedRate(this::tickLocalSecond, 0, 1, TimeUnit.SECONDS); } + @Override + public void connected (final ConnectedEvent event) { + resubscribeDebug(); + } + private void tick () { + if (!bot.loggedIn) return; + bot.listener.dispatch(listener -> { try { - listener.onAlwaysTick(); + listener.onLocalTick(); } catch (final Throwable e) { - bot.logger.error("Caught exception in an always tick listener!"); + bot.logger.error("Caught exception in a local tick listener!"); bot.logger.error(e); } }); + if (!receivedDebugSample) dispatchTick(); + } + + private void tickLocalSecond () { if (!bot.loggedIn) return; + if (System.currentTimeMillis() - lastDebugSubscriptionTime.get() >= 5 * 1000) { + resubscribeDebug(); + lastDebugSubscriptionTime.set(System.currentTimeMillis()); + } + + bot.listener.dispatch(listener -> { + try { + listener.onLocalSecondTick(); + } catch (final Throwable e) { + bot.logger.error("Caught exception in a local second tick listener!"); + bot.logger.error(e); + } + }); + } + + private void resubscribeDebug () { + bot.session.send(new ServerboundDebugSampleSubscriptionPacket(RemoteDebugSampleType.TICK_TIME)); + } + + private void dispatchTick () { bot.listener.dispatch(listener -> { try { listener.onTick(); @@ -48,22 +86,10 @@ public class TickPlugin implements Listener { lastTickTime.set(System.currentTimeMillis()); } - private void tickLocalSecond () { - if (!bot.loggedIn) return; - - bot.listener.dispatch(listener -> { - try { - listener.onLocalSecondTick(); - } catch (final Throwable e) { - bot.logger.error("Caught exception in a local second tick listener!"); - bot.logger.error(e); - } - }); - } - @Override public void packetReceived (final Session session, final Packet packet) { if (packet instanceof final ClientboundSetTimePacket t_packet) packetReceived(t_packet); + else if (packet instanceof final ClientboundDebugSamplePacket t_packet) packetReceived(t_packet); } private void packetReceived (final ClientboundSetTimePacket ignoredPacket) { @@ -78,4 +104,12 @@ public class TickPlugin implements Listener { lastSecondTickTime.set(System.currentTimeMillis()); } + + private void packetReceived (final ClientboundDebugSamplePacket packet) { + if (packet.getDebugSampleType() != RemoteDebugSampleType.TICK_TIME) return; + + receivedDebugSample = true; + + dispatchTick(); + } }