diff --git a/src/main/java/net/respawnbackoff/RespawnBackoffData.java b/src/main/java/net/respawnbackoff/RespawnBackoffData.java index 3dae382..987c2d8 100644 --- a/src/main/java/net/respawnbackoff/RespawnBackoffData.java +++ b/src/main/java/net/respawnbackoff/RespawnBackoffData.java @@ -25,4 +25,9 @@ public record RespawnBackoffData( public boolean hasActiveCooldown(long nowMs) { return cooldownEndEpochMs > nowMs; } + + /** True once wall-clock time has reached the scheduled end (timer at zero or past). */ + public boolean isCooldownFinished(long nowMs) { + return cooldownEndEpochMs > 0L && nowMs >= cooldownEndEpochMs; + } } diff --git a/src/main/java/net/respawnbackoff/RespawnBackoffMod.java b/src/main/java/net/respawnbackoff/RespawnBackoffMod.java index 47eeb48..5da57e2 100644 --- a/src/main/java/net/respawnbackoff/RespawnBackoffMod.java +++ b/src/main/java/net/respawnbackoff/RespawnBackoffMod.java @@ -55,6 +55,10 @@ public class RespawnBackoffMod implements ModInitializer { ServerPlayer player = handler.player; long now = System.currentTimeMillis(); RespawnBackoffData data = player.getAttachedOrElse(RESPAWN_BACKOFF, RespawnBackoffData.DEFAULT); + if (data.isCooldownFinished(now)) { + clearCooldownAndRestore(player, data); + return; + } if (data.hasActiveCooldown(now)) { if (!player.isSpectator()) { player.setGameMode(GameType.SPECTATOR); @@ -126,19 +130,13 @@ public class RespawnBackoffMod implements ModInitializer { private static void tickPlayer(ServerPlayer player, long nowMs) { RespawnBackoffData data = player.getAttachedOrElse(RESPAWN_BACKOFF, RespawnBackoffData.DEFAULT); + if (data.isCooldownFinished(nowMs)) { + clearCooldownAndRestore(player, data); + return; + } if (data.hasActiveCooldown(nowMs)) { data.deathLock().ifPresent(lock -> enforceDeathLock(player, lock)); } - - if (!data.hasActiveCooldown(nowMs)) { - return; - } - - if (nowMs < data.cooldownEndEpochMs()) { - return; - } - - clearCooldownAndRestore(player, data); } /** @@ -159,6 +157,7 @@ public class RespawnBackoffMod implements ModInitializer { Optional.empty() ); player.setAttached(RESPAWN_BACKOFF, cleared); + player.setCamera(player); teleportToRespawnPoint(player); if (player.isSpectator()) { player.setGameMode(GameType.SURVIVAL);