diff --git a/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/QueueConstant.java b/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/QueueConstant.java index 505022227..241f40ea0 100644 --- a/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/QueueConstant.java +++ b/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/QueueConstant.java @@ -4,4 +4,5 @@ public class QueueConstant { public static final String SERVICE_MESSENGER_IDENTIFIER = "Queue System"; public static final int BYPASS_QUEUE_WEIGHT = -1; + public static final int MAX_TRANSFERS_PER_UPDATE = 5; } \ No newline at end of file diff --git a/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/messages/ClansServerStatusMessage.java b/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/messages/ClansServerStatusMessage.java index 929e084ee..f8e0d7119 100644 --- a/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/messages/ClansServerStatusMessage.java +++ b/Plugins/Mineplex.ClansQueue.Common/src/com/mineplex/clansqueue/common/messages/ClansServerStatusMessage.java @@ -6,4 +6,5 @@ public class ClansServerStatusMessage extends ClansQueueMessageBody { public String ServerName; public int OpenSlots; + public boolean Online; } \ No newline at end of file diff --git a/Plugins/Mineplex.ClansQueue/pom.xml b/Plugins/Mineplex.ClansQueue/pom.xml index e1e058ba4..a202846c3 100644 --- a/Plugins/Mineplex.ClansQueue/pom.xml +++ b/Plugins/Mineplex.ClansQueue/pom.xml @@ -5,12 +5,12 @@ com.mineplex - mineplex-parent + mineplex-plugin dev-SNAPSHOT ../plugin.xml - ClansQueue-Common + ClansQueue mineplex-clansqueue @@ -20,4 +20,29 @@ ${project.version} + + + + org.apache.maven.plugins + maven-shade-plugin + + false + + + com.mineplex.clansqueue.service.QueueService + + + + + + package + + shade + + + + + + diff --git a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/QueueService.java b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/QueueService.java index c2168c01e..aea90d00d 100644 --- a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/QueueService.java +++ b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/QueueService.java @@ -26,7 +26,8 @@ public class QueueService { QueueService service = new QueueService(new File("eu.dat").exists()); service.start(); - while (service.isRunning()) {}; + while (service.isRunning()) {} + System.exit(0); } private final Region _region; @@ -63,7 +64,7 @@ public class QueueService messenger.registerListener(QueuePauseUpdateMessage.class, (pause, origin) -> _queueManager.handleQueuePause(pause.ServerName, pause.Paused)); messenger.registerListener(PlayerJoinQueueMessage.class, (join, origin) -> _queueManager.joinQueue(join.TargetServer, origin, join.PlayerUUID, join.PlayerPriority)); messenger.registerListener(PlayerLeaveQueueMessage.class, (leave, origin) -> _queueManager.leaveQueue(leave.TargetServer, leave.PlayerUUID)); - messenger.registerListener(ClansServerStatusMessage.class, (status, origin) -> _queueManager.handleServerUpdate(status.ServerName, status.OpenSlots)); + messenger.registerListener(ClansServerStatusMessage.class, (status, origin) -> _queueManager.handleServerUpdate(status.ServerName, status.OpenSlots, status.Online)); } public ClansQueueManager getQueueManager() diff --git a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/CommandSystem.java b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/CommandSystem.java index 832a55097..e02409633 100644 --- a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/CommandSystem.java +++ b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/CommandSystem.java @@ -22,6 +22,7 @@ public class CommandSystem extends Thread _service.registerCommand(new DeleteQueueCommand(_service)); _service.registerCommand(new ListQueuesCommand(_service)); _service.registerCommand(new PauseQueueCommand(_service)); + _service.registerCommand(new UnpauseQueueCommand(_service)); } private boolean matches(String key, String input) diff --git a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/UnpauseQueueCommand.java b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/UnpauseQueueCommand.java new file mode 100644 index 000000000..1f7369362 --- /dev/null +++ b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/commands/UnpauseQueueCommand.java @@ -0,0 +1,38 @@ +package com.mineplex.clansqueue.service.commands; + +import com.mineplex.clansqueue.service.QueueService; +import com.mineplex.clansqueue.service.queue.ClansServer; + +public class UnpauseQueueCommand extends ConsoleCommand +{ + private final QueueService _service; + + public UnpauseQueueCommand(QueueService service) + { + super("unpause", "Resumes an existing queue"); + + _service = service; + } + + @Override + protected void use(String[] arguments) + { + if (arguments.length < 1) + { + addOutput("Usage: pause "); + sendOutput(); + return; + } + ClansServer server = _service.getQueueManager().getLoadedServer(arguments[0]); + if (server == null) + { + addOutput("Server '" + arguments[0] + "' was not found. Run 'list' for a list of servers."); + sendOutput(); + return; + } + + _service.getQueueManager().handleQueuePause(server.getName(), false); + addOutput("Queue unpaused."); + sendOutput(); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/queue/ClansQueueManager.java b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/queue/ClansQueueManager.java index 5c63540b2..bf08084a3 100644 --- a/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/queue/ClansQueueManager.java +++ b/Plugins/Mineplex.ClansQueue/src/com/mineplex/clansqueue/service/queue/ClansQueueManager.java @@ -52,6 +52,8 @@ public class ClansQueueManager snapshot.ServerName = queue.getServer().getName(); snapshot.Queue = new HashMap<>(); queue.getPlayers().values().forEach(player -> snapshot.Queue.put(player.PlayerUUID, player.Position)); + + message.Snapshots.add(snapshot); }); return message; @@ -64,7 +66,7 @@ public class ClansQueueManager queues.forEach(q -> { - q.updatePositions(q.getServer().getOpenSlots()); + q.updatePositions(Math.min(q.getServer().getOpenSlots(), QueueConstant.MAX_TRANSFERS_PER_UPDATE)); if (q.getServer().isOnline()) { q.getNextSend().entrySet().forEach(entry -> @@ -125,16 +127,18 @@ public class ClansQueueManager }).setOnline(false); } - public synchronized void handleServerUpdate(String serverName, int openSlots) + public synchronized void handleServerUpdate(String serverName, int openSlots, boolean online) { - _servers.computeIfAbsent(serverName, (name) -> + ClansServer server = _servers.computeIfAbsent(serverName, (name) -> { - ClansServer server = new ClansServer(name); + ClansServer s = new ClansServer(name); - _queues.put(server, new ServerQueue(server)); + _queues.put(s, new ServerQueue(s)); - return server; - }).setOpenSlots(openSlots); + return s; + }); + server.setOpenSlots(openSlots); + server.setOnline(online); } public synchronized void handleQueuePause(String serverName, boolean pause) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 8c739a2a3..3b78c8dfc 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -275,6 +275,8 @@ public class ClansManager extends MiniClientPlugin implements IRelat public ClanTips ClanTips; + private boolean _disabling = false; + // Spawn area public ClansManager(JavaPlugin plugin, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, InventoryManager inventoryManager) @@ -525,7 +527,6 @@ public class ClansManager extends MiniClientPlugin implements IRelat private void generatePermissions() { - PermissionGroup.MOD.revokePermission(Teleport.Perm.TELEPORT_COMMAND); PermissionGroup.ADMIN.setPermission(Teleport.Perm.TELEPORT_COMMAND, true, true); @@ -1313,6 +1314,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat // disable event to WorldEventManager // This is so that we can prevent any permanent world changes with // events + _disabling = true; _blockRestore.onDisable(); _worldEvent.onDisable(); _goldManager.onDisable(); @@ -1350,6 +1352,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat ClansServerStatusMessage message = new ClansServerStatusMessage(); message.ServerName = UtilServer.getServerName(); message.OpenSlots = Math.max(0, Bukkit.getMaxPlayers() - online); + message.Online = !_restartManager.isRestarting() && !_disabling; ClansQueueMessenger.getMessenger(UtilServer.getServerName()).transmitMessage(message, QueueConstant.SERVICE_MESSENGER_IDENTIFIER); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java index bee703e6e..0467948bd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/ItemListener.java @@ -12,6 +12,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -180,6 +181,18 @@ public class ItemListener implements Listener, Runnable } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onJoin(PlayerJoinEvent event) + { + GearManager.getInstance().runSyncLater(() -> + { + if (event.getPlayer().isOnline()) + { + getGear(event.getPlayer()).updateCache(true); + } + }, 5); + } + @EventHandler(priority = EventPriority.MONITOR) public void onRespawn(PlayerRespawnEvent event) { diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerPage.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerPage.java index 62620ca77..3e301fe9b 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerPage.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansServerPage.java @@ -124,26 +124,31 @@ public class ClansServerPage extends ShopPageBase @@ -139,6 +140,7 @@ public class HubQueueManager extends MiniClientPlugin Player player = Bukkit.getPlayer(callback.PlayerUUID); if (player != null) { + Get(player).Queued = false; player.leaveVehicle(); player.eject(); _portal.sendPlayerToServer(player, callback.TargetServer, Intent.FORCE_TRANSFER); @@ -161,7 +163,10 @@ public class HubQueueManager extends MiniClientPlugin if (player != null) { Get(player).QueuePosition = entry.getValue(); - UtilPlayer.message(player, F.main(getName(), "Your position: " + F.greenElem("#" + entry.getValue()))); + if (Recharge.Instance.use(player, "Queue Status Update", 7000, false, false)) + { + UtilPlayer.message(player, F.main(getName(), "Your position: " + F.greenElem("#" + entry.getValue()))); + } } }); }); @@ -318,9 +323,12 @@ public class HubQueueManager extends MiniClientPlugin public void leaveQueue(Player player, boolean informFailure) { - if (!Get(player).Queued && informFailure) + if (!Get(player).Queued) { - UtilPlayer.message(player, F.main(getName(), "You are not part of a queue!")); + if (informFailure) + { + UtilPlayer.message(player, F.main(getName(), "You are not part of a queue!")); + } return; } PlayerLeaveQueueMessage message = new PlayerLeaveQueueMessage();