diff --git a/build-number.txt b/build-number.txt index 57340e1e..90ab247d 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -2936 \ No newline at end of file +2938 \ 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 c5df42ef..fc2e4601 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 @@ -31,6 +31,7 @@ public interface Listener { default void onTick () { } default void onAlwaysTick () { } default void onSecondTick () { } + default void onLocalSecondTick () { } // core default void onCoreReady () { } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java index 476dfd8d..4307e5ee 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java @@ -91,7 +91,7 @@ public class CommandHandlerPlugin implements Listener { } @Override - public void onSecondTick () { + public void onLocalSecondTick () { commandPerSecond = 0; } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java index d9383b43..759abc62 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java @@ -30,7 +30,7 @@ public class FilterManagerPlugin implements Listener { } @Override - public void onSecondTick () { + public void onLocalSecondTick () { removeLeftPlayers(); } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TPSPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TPSPlugin.java index 572b88ce..d5c10051 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TPSPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TPSPlugin.java @@ -6,12 +6,9 @@ import me.chayapak1.chomens_bot.data.listener.Listener; import me.chayapak1.chomens_bot.util.MathUtilities; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import org.geysermc.mcprotocollib.network.Session; -import org.geysermc.mcprotocollib.network.packet.Packet; +import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; import org.geysermc.mcprotocollib.protocol.data.game.BossBarColor; import org.geysermc.mcprotocollib.protocol.data.game.BossBarDivision; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundLoginPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundSetTimePacket; import java.text.DecimalFormat; import java.util.Arrays; @@ -116,13 +113,9 @@ public class TPSPlugin implements Listener { else return BossBarColor.PURPLE; } + // this is the server time update tick, sent straight from server, not local! @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 ClientboundLoginPacket t_packet) packetReceived(t_packet); - } - - private void packetReceived (final ClientboundSetTimePacket ignoredPacket) { + public void onSecondTick () { final long now = System.currentTimeMillis(); final float timeElapsed = (float) (now - timeLastTimeUpdate) / 1000.0F; tickRates[nextIndex] = MathUtilities.clamp(20.0f / timeElapsed, 0.0f, 20.0f); @@ -130,7 +123,8 @@ public class TPSPlugin implements Listener { timeLastTimeUpdate = now; } - private void packetReceived (final ClientboundLoginPacket ignoredPacket) { + @Override + public void connected (final ConnectedEvent event) { Arrays.fill(tickRates, 0); nextIndex = 0; timeGameJoined = timeLastTimeUpdate = System.currentTimeMillis(); 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 8c7e2835..3956d29b 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TickPlugin.java @@ -1,11 +1,15 @@ 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.packet.Packet; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundSetTimePacket; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; -public class TickPlugin { +public class TickPlugin implements Listener { private final Bot bot; public final AtomicLong lastTickTime = new AtomicLong(); @@ -14,8 +18,10 @@ public class TickPlugin { public TickPlugin (final Bot bot) { this.bot = bot; + bot.listener.addListener(this); + bot.executor.scheduleAtFixedRate(this::tick, 0, 50, TimeUnit.MILLISECONDS); - bot.executor.scheduleAtFixedRate(this::tickSecond, 0, 1, TimeUnit.SECONDS); + bot.executor.scheduleAtFixedRate(this::tickLocalSecond, 0, 1, TimeUnit.SECONDS); } private void tick () { @@ -42,14 +48,30 @@ public class TickPlugin { lastTickTime.set(System.currentTimeMillis()); } - private void tickSecond () { + 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); + } + + private void packetReceived (final ClientboundSetTimePacket ignoredPacket) { bot.listener.dispatch(listener -> { try { listener.onSecondTick(); } catch (final Throwable e) { - bot.logger.error("Caught exception in a second tick listener!"); + bot.logger.error("Caught exception in a server time update listener!"); bot.logger.error(e); } });