From e745193228f31b629082abd1bc018e09b51db395 Mon Sep 17 00:00:00 2001 From: Mathieu Strypsteen Date: Sat, 14 Sep 2024 20:27:13 +0200 Subject: [PATCH] Fix handling offline players --- .../mc13dtl/gamestate/GameStateCommand.java | 13 ++----------- .../zeus/mc13dtl/gamestate/GameStateUtil.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateCommand.java b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateCommand.java index 346f019..94df18f 100644 --- a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateCommand.java +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateCommand.java @@ -2,11 +2,9 @@ package gent.zeus.mc13dtl.gamestate; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; import gent.zeus.mc13dtl.MC13DTL; import io.papermc.paper.command.brigadier.BasicCommand; @@ -24,15 +22,8 @@ public class GameStateCommand implements BasicCommand { } world.getPersistentDataContainer().set(key, PersistentDataType.STRING, "active"); GameStateUtil.loadWorld(world); - for (OfflinePlayer i : Bukkit.getOfflinePlayers()) { - Player player = i.getPlayer(); - player.getInventory().clear(); - player.heal(100); - player.getActivePotionEffects().clear(); - for (PotionEffect effect : player.getActivePotionEffects()) { - player.removePotionEffect(effect.getType()); - } - GameStateUtil.loadPlayer(player); + for (Player i : Bukkit.getOnlinePlayers()) { + GameStateUtil.processPlayer(i); } } diff --git a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java index e16b1bf..26983bc 100644 --- a/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java +++ b/src/main/java/gent/zeus/mc13dtl/gamestate/GameStateUtil.java @@ -8,6 +8,7 @@ import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataType; +import org.bukkit.potion.PotionEffect; import gent.zeus.mc13dtl.MC13DTL; import net.md_5.bungee.api.ChatColor; @@ -41,9 +42,26 @@ public class GameStateUtil { player.sendMessage(ChatColor.DARK_PURPLE + "Game hasn't started yet, please wait..."); } if (gameState.equals("active")) { + NamespacedKey processedKey = new NamespacedKey(MC13DTL.instance, "player-processed"); + if (!player.getPersistentDataContainer().getOrDefault(processedKey, PersistentDataType.BOOLEAN, false)) { + processPlayer(player); + return; + } player.setGameMode(GameMode.SURVIVAL); player.setInvulnerable(false); player.sendMessage(ChatColor.DARK_PURPLE + "Game is active, have fun!"); } } + + static void processPlayer(Player player) { + player.getInventory().clear(); + player.heal(100); + player.getActivePotionEffects().clear(); + for (PotionEffect effect : player.getActivePotionEffects()) { + player.removePotionEffect(effect.getType()); + } + NamespacedKey key = new NamespacedKey(MC13DTL.instance, "player-processed"); + player.getPersistentDataContainer().set(key, PersistentDataType.BOOLEAN, true); + loadPlayer(player); + } }