refactor: use time updates from the server for second tick
This commit is contained in:
@@ -1 +1 @@
|
||||
2936
|
||||
2938
|
||||
@@ -31,6 +31,7 @@ public interface Listener {
|
||||
default void onTick () { }
|
||||
default void onAlwaysTick () { }
|
||||
default void onSecondTick () { }
|
||||
default void onLocalSecondTick () { }
|
||||
|
||||
// core
|
||||
default void onCoreReady () { }
|
||||
|
||||
@@ -91,7 +91,7 @@ public class CommandHandlerPlugin implements Listener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSecondTick () {
|
||||
public void onLocalSecondTick () {
|
||||
commandPerSecond = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public class FilterManagerPlugin implements Listener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSecondTick () {
|
||||
public void onLocalSecondTick () {
|
||||
removeLeftPlayers();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user