diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 3e58d5bdf..89d52dd31 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -161,6 +161,7 @@ import nautilus.game.arcade.managers.GameRewardManager; import nautilus.game.arcade.managers.GameSpectatorManager; import nautilus.game.arcade.managers.GameStatManager; import nautilus.game.arcade.managers.GameWorldManager; +import nautilus.game.arcade.managers.HubClockManager; import nautilus.game.arcade.managers.IdleManager; import nautilus.game.arcade.managers.NextBestGameManager; import nautilus.game.arcade.managers.ServerUptimeManager; @@ -615,6 +616,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation _winStreakManager = require(WinStreakManager.class); _mineplexGameManager = require(MineplexGameManager.class); + if (IsHotbarHubClock()) + { + new HubClockManager(this); + } + new AdminCommands(); generatePermissions(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 59d363645..a7a9e2c10 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -92,7 +92,6 @@ import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; import nautilus.game.arcade.events.PlayerStateChangeEvent; import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.game.modules.AntiExpOrbModule; -import nautilus.game.arcade.game.modules.HubClockModule; import nautilus.game.arcade.game.modules.Module; import nautilus.game.arcade.game.modules.gamesummary.GameSummaryModule; import nautilus.game.arcade.game.team.GameTeamModule; @@ -195,7 +194,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public boolean UseCustomScoreboard = false; // Loaded from Map Config - public WorldData WorldData = null; + public WorldData WorldData; // Game Help private int _helpIndex = 0; @@ -427,7 +426,6 @@ public abstract class Game extends ListenerComponent implements Lifetimed // Scoreboard Scoreboard = new GameScoreboard(this); - WorldData = new WorldData(this); // Stat Trackers registerStatTrackers( @@ -480,12 +478,6 @@ public abstract class Game extends ListenerComponent implements Lifetimed _teamModule = new GameTeamModule(); _teamModule.register(this); - if (getArcadeManager().IsHotbarHubClock()) - { - new HubClockModule() - .register(this); - } - registerDebugCommand("kit", Perm.DEBUG_COMMANDS, PermissionGroup.ADMIN, (caller, args) -> { String kit = Arrays.stream(args).collect(Collectors.joining(" ")); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/HubClockModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HubClockManager.java similarity index 68% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/HubClockModule.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HubClockManager.java index a07a19b54..a9aa162ac 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/HubClockModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/HubClockManager.java @@ -1,13 +1,11 @@ -package nautilus.game.arcade.game.modules; - -import java.util.Arrays; +package nautilus.game.arcade.managers; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; import org.bukkit.event.block.Action; -import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -21,46 +19,37 @@ import mineplex.core.portal.GenericServer; import mineplex.core.portal.Intent; import mineplex.core.recharge.Recharge; +import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerStateChangeEvent; -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.GameTeam; -import nautilus.game.arcade.managers.GameSpectatorManager; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.game.GameTeam.PlayerState; -public class HubClockModule extends Module +public class HubClockManager implements Listener { + private static final int HUB_CLOCK_SLOT = 8; private static final ItemStack HUB_CLOCK_ITEM = ItemStackFactory.Instance.CreateStack(Material.WATCH, (byte) 0, 1, (short) 0, C.cGreen + "Return to Hub", new String[]{"", ChatColor.RESET + "Click while holding this", ChatColor.RESET + "to return to the Hub."}); - public HubClockModule() - { - Player[] players = UtilServer.getPlayers(); + private final ArcadeManager _manager; - if (players.length > 0) - { - Arrays.stream(players).forEach(this::giveClock); - } + public HubClockManager(ArcadeManager manager) + { + _manager = manager; + + UtilServer.getPlayersCollection().forEach(this::giveClock); + manager.registerEvents(this); } public void giveClock(Player player) { - if (getGame() != null && !getGame().GiveClock) - { - return; - } - player.getInventory().setItem(HUB_CLOCK_SLOT, HUB_CLOCK_ITEM); } public void removeClock(Player player) { - if (!player.getInventory().getItem(HUB_CLOCK_SLOT).equals(HUB_CLOCK_ITEM)) - { - return; - } - player.getInventory().remove(HUB_CLOCK_ITEM); } @@ -73,24 +62,24 @@ public class HubClockModule extends Module @EventHandler public void giveOnNextLobby(GameStateChangeEvent event) { - if (event.GetState() != Game.GameState.Recruit) + if (event.GetState() != GameState.Recruit || !canGiveClock()) { return; } - Arrays.stream(UtilServer.getPlayers()).forEach(this::giveClock); + UtilServer.getPlayersCollection().forEach(this::giveClock); } @EventHandler public void giveOnDeath(PlayerStateChangeEvent event) { // Only handle when the player is now out - if (event.GetState() != GameTeam.PlayerState.OUT) + if (event.GetState() != PlayerState.OUT || !canGiveClock()) { return; } - getGame().getArcadeManager().runSyncLater(() -> giveClock(event.GetPlayer()), GameSpectatorManager.ITEM_GIVE_DELAY); + _manager.runSyncLater(() -> giveClock(event.GetPlayer()), GameSpectatorManager.ITEM_GIVE_DELAY); } @EventHandler @@ -98,7 +87,7 @@ public class HubClockModule extends Module { // Only handle when the player is now in. // This should make MS not have a persistent clock after round end - if (event.GetState() != GameTeam.PlayerState.IN) + if (event.GetState() != PlayerState.IN || !canGiveClock()) { return; } @@ -127,13 +116,8 @@ public class HubClockModule extends Module Player player = event.getPlayer(); - if (player.getItemInHand() == null) - { - return; - } - // Only allow this exact clock to be used. - if (!player.getItemInHand().equals(HUB_CLOCK_ITEM)) + if (HUB_CLOCK_ITEM.equals(player.getItemInHand())) { return; } @@ -145,9 +129,11 @@ public class HubClockModule extends Module } // Send to server - getGame() - .getArcadeManager() - .GetPortal() - .sendPlayerToGenericServer(event.getPlayer(), GenericServer.HUB, Intent.PLAYER_REQUEST); + _manager.GetPortal().sendPlayerToGenericServer(event.getPlayer(), GenericServer.HUB, Intent.PLAYER_REQUEST); + } + + private boolean canGiveClock() + { + return _manager.GetGame() == null || _manager.GetGame().GetState() == GameState.Recruit || _manager.GetGame().GiveClock; } }