From d29b43d6453b9467ce5520f99a54781989813cf6 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Tue, 17 Feb 2015 15:17:14 +1300 Subject: [PATCH] Parties now persist cross-server, staff messages now display on the sending server for other staff for staff cross-messages. --- .../mineplex/core/message/MessageManager.java | 38 ++- .../message/redis/RedisMessageCallback.java | 15 +- .../src/mineplex/core}/party/Party.java | 300 ++++++++++-------- .../mineplex/core}/party/PartyManager.java | 106 +++++-- .../core}/party/commands/PartyCommand.java | 12 +- .../core/party/redis/RedisPartyData.java | 29 ++ .../core/party/redis/RedisPartyHandler.java | 25 ++ .../src/mineplex/core/portal/Portal.java | 3 + .../core/portal/ServerTransferEvent.java | 40 +++ .../Mineplex.Hub/src/mineplex/hub/Hub.java | 5 +- .../src/mineplex/hub/HubManager.java | 4 +- .../src/mineplex/hub/queue/QueueManager.java | 2 +- .../src/mineplex/hub/queue/ui/QueuePage.java | 2 +- .../src/mineplex/hub/queue/ui/QueueShop.java | 2 +- .../mineplex/hub/server/ServerManager.java | 52 +-- .../mineplex/hub/server/ui/ServerNpcShop.java | 2 +- .../src/nautilus/game/arcade/Arcade.java | 3 + 17 files changed, 413 insertions(+), 227 deletions(-) rename Plugins/{Mineplex.Hub/src/mineplex/hub => Mineplex.Core/src/mineplex/core}/party/Party.java (52%) rename Plugins/{Mineplex.Hub/src/mineplex/hub => Mineplex.Core/src/mineplex/core}/party/PartyManager.java (60%) rename Plugins/{Mineplex.Hub/src/mineplex/hub => Mineplex.Core/src/mineplex/core}/party/commands/PartyCommand.java (97%) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyHandler.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java index 35dd7cb17..db9aa7367 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/message/MessageManager.java @@ -310,6 +310,8 @@ public class MessageManager extends MiniClientPlugin to.playSound(to.getLocation(), Sound.NOTE_PIANO, 2f, 2f); + String senderRank = F.rank(_clientManager.Get(to).GetRank()); + // Inform Admins for (Player staff : UtilServer.getPlayers()) { @@ -321,7 +323,7 @@ public class MessageManager extends MiniClientPlugin globalMessage.getRank() + " " + globalMessage.getSender() + C.cPurple + " -> " - + F.rank(_clientManager.Get(to).GetRank()) + " " + to.getName() + " " + + senderRank + " " + to.getName() + " " + C.cPurple + globalMessage.getMessage()); } @@ -329,9 +331,8 @@ public class MessageManager extends MiniClientPlugin } // Message the sender - RedisMessageCallback message = new RedisMessageCallback(globalMessage, C.cPurple + "-> " - + F.rank(_clientManager.Get(to).GetRank()) + " " + to.getName() + " " + C.cPurple - + globalMessage.getMessage(), to.getName()); + RedisMessageCallback message = new RedisMessageCallback(globalMessage, senderRank, to.getName(), C.cPurple + "-> " + + senderRank + " " + to.getName() + " " + C.cPurple + globalMessage.getMessage()); message.publish(); } @@ -342,7 +343,7 @@ public class MessageManager extends MiniClientPlugin if (canMessage != null) { - RedisMessageCallback message = new RedisMessageCallback(globalMessage, canMessage, null); + RedisMessageCallback message = new RedisMessageCallback(globalMessage, null, null, canMessage); message.publish(); @@ -356,8 +357,8 @@ public class MessageManager extends MiniClientPlugin to.playSound(to.getLocation(), Sound.NOTE_PIANO, 2f, 2f); // Message the sender - RedisMessageCallback message = new RedisMessageCallback(globalMessage, C.cGold + "§l" + globalMessage.getSender() - + " > " + to.getName() + C.cYellow + " §l" + globalMessage.getMessage(), to.getName()); + RedisMessageCallback message = new RedisMessageCallback(globalMessage, null, to.getName(), C.cGold + "§l" + + globalMessage.getSender() + " > " + to.getName() + C.cYellow + " §l" + globalMessage.getMessage()); message.publish(); } @@ -391,6 +392,29 @@ public class MessageManager extends MiniClientPlugin Get(target).LastTo = message.getLastReplied(); } } + + if (message.isStaffMessage() && message.getLastReplied() != null) + { + String recevierRank = F.rank(_clientManager.Get(target).GetRank()); + + // Inform Admins + for (Player staff : UtilServer.getPlayers()) + { + if (!target.equals(staff)) + { + if (_clientManager.Get(staff).GetRank().Has(Rank.HELPER)) + { + UtilPlayer.message(staff, + + recevierRank + " " + message.getLastReplied() + C.cPurple + " -> " + + + message.getRank() + " " + message.getLastReplied() + " " + + + C.cPurple + message.getMessage()); + } + } + } + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/message/redis/RedisMessageCallback.java b/Plugins/Mineplex.Core/src/mineplex/core/message/redis/RedisMessageCallback.java index 7c9b5a37e..0e60ba4bd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/message/redis/RedisMessageCallback.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/message/redis/RedisMessageCallback.java @@ -12,16 +12,16 @@ public class RedisMessageCallback extends ServerCommand private String _message; private String _setLastMessage; private String _target; + private String _rank; private UUID _uuid; - private boolean _staffMessage; - public RedisMessageCallback(RedisMessage globalMessage, String message, String setLastReplied) + public RedisMessageCallback(RedisMessage globalMessage, String rank, String receivedPlayer, String message) { _target = globalMessage.getSender(); _message = message; - _setLastMessage = setLastReplied; + _setLastMessage = receivedPlayer; _uuid = globalMessage.getUUID(); - _staffMessage = globalMessage.isStaffMessage(); + _rank = rank; if (globalMessage.getSendingServer() != null) { @@ -29,9 +29,14 @@ public class RedisMessageCallback extends ServerCommand } } + public String getRank() + { + return _rank; + } + public boolean isStaffMessage() { - return _staffMessage; + return getRank() != null; } public String getLastReplied() diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java similarity index 52% rename from Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java rename to Plugins/Mineplex.Core/src/mineplex/core/party/Party.java index 11b6d6a1c..6984ac6fe 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java @@ -1,6 +1,7 @@ -package mineplex.hub.party; +package mineplex.core.party; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Iterator; @@ -10,6 +11,10 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; +import mineplex.core.party.redis.RedisPartyData; +import mineplex.serverdata.Region; +import mineplex.serverdata.ServerGroup; +import mineplex.serverdata.ServerManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -19,59 +24,81 @@ import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; -public class Party +public class Party { - private PartyManager Manager; - + private PartyManager _manager; + private boolean _isHub; + private String _creator = null; - + private ArrayList _players = new ArrayList(); private NautHashMap _invitee = new NautHashMap(); private Scoreboard _scoreboard; private Objective _scoreboardObj; private ArrayList _scoreboardLast = new ArrayList(); - + private long _partyOfflineTimer = -1; - + private long _informNewLeaderTimer = -1; + + public Party(PartyManager manager, RedisPartyData partyData) + { + this(manager); + + _players = new ArrayList(Arrays.asList(partyData.getPlayers())); + _creator = partyData.getLeader(); + } + public Party(PartyManager manager) { - Manager = manager; - - //Scoreboard - _scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); - _scoreboardObj = _scoreboard.registerNewObjective("Party", "dummy"); - _scoreboardObj.setDisplaySlot(DisplaySlot.SIDEBAR); - - _scoreboard.registerNewTeam(ChatColor.GREEN + "Members"); - - //Scoreboard Ranks - for (Rank rank : Rank.values()) + _manager = manager; + Region region = manager.GetPlugin().getConfig().getBoolean("serverstatus.us") ? Region.US : Region.EU; + String groupName = manager.GetPlugin().getConfig().getString("serverstatus.group"); + + ServerGroup serverGroup = ServerManager.getServerRepository(region).getServerGroup(groupName); + + if (serverGroup == null) + return; + + _isHub = !serverGroup.getArcadeGroup(); + + if (_isHub) { - if (rank != Rank.ALL) - _scoreboard.registerNewTeam(rank.Name).setPrefix(rank.GetTag(true, false) + ChatColor.RESET + " "); - else - _scoreboard.registerNewTeam(rank.Name).setPrefix(""); - } - - _scoreboard.registerNewTeam("Party").setPrefix(ChatColor.LIGHT_PURPLE + C.Bold + "Party" + ChatColor.RESET + " "); - - //Add Players - for (Player player : Bukkit.getOnlinePlayers()) - { - _scoreboard.getTeam(Manager.GetClients().Get(player).GetRank().Name).addPlayer(player); + // Scoreboard + _scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + _scoreboardObj = _scoreboard.registerNewObjective("Party", "dummy"); + _scoreboardObj.setDisplaySlot(DisplaySlot.SIDEBAR); + + _scoreboard.registerNewTeam(ChatColor.GREEN + "Members"); + + // Scoreboard Ranks + for (Rank rank : Rank.values()) + { + if (rank != Rank.ALL) + _scoreboard.registerNewTeam(rank.Name).setPrefix(rank.GetTag(true, false) + ChatColor.RESET + " "); + else + _scoreboard.registerNewTeam(rank.Name).setPrefix(""); + } + + _scoreboard.registerNewTeam("Party").setPrefix(ChatColor.LIGHT_PURPLE + C.Bold + "Party" + ChatColor.RESET + " "); + + // Add Players + for (Player player : Bukkit.getOnlinePlayers()) + { + _scoreboard.getTeam(_manager.GetClients().Get(player).GetRank().Name).addPlayer(player); + } } } - + public void JoinParty(Player player) { - //Add Leader + // Add Leader if (_players.isEmpty()) { _players.add(player.getName()); UtilPlayer.message(player, F.main("Party", "You created a new Party.")); - + _creator = player.getName(); } else @@ -81,85 +108,94 @@ public class Party Announce(F.elem(player.getName()) + " has joined the party!"); } - - _scoreboard.getTeam("Party").addPlayer(player); + + if (_isHub) + { + _scoreboard.getTeam("Party").addPlayer(player); + } } public void InviteParty(Player player, boolean inviteeInParty) { _invitee.put(player.getName(), System.currentTimeMillis()); - //Decline + // Decline if (_players.contains(player.getName())) { UtilPlayer.message(player, F.main("Party", F.name(player.getName()) + " is already in the Party.")); player.playSound(player.getLocation(), Sound.NOTE_BASS, 1f, 1.5f); } - //Announce + // Announce Announce(F.name(player.getName()) + " has been invited to your Party."); - //Inform + // Inform UtilPlayer.message(player, F.main("Party", F.name(GetLeader()) + " invited you to their Party.")); - - //Instruct + + // Instruct if (inviteeInParty) { - UtilPlayer.message(player, F.main("Party", "Type " + F.link("/party leave") + " then " + F.link("/party " + GetLeader()) + " to join.")); + UtilPlayer.message(player, + F.main("Party", "Type " + F.link("/party leave") + " then " + F.link("/party " + GetLeader()) + " to join.")); } else { UtilPlayer.message(player, F.main("Party", "Type " + F.link("/party " + GetLeader()) + " to join.")); } - player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1.5f); } public void LeaveParty(Player player) { - //Announce + // Announce Announce(F.name(player.getName()) + " has left the Party."); boolean leader = player.equals(GetLeader()); _players.remove(player.getName()); - - //Set Scoreboard - _scoreboard.getTeam(Manager.GetClients().Get(player).GetRank().Name).addPlayer(player); - + + if (_isHub) + { + // Set Scoreboard + _scoreboard.getTeam(_manager.GetClients().Get(player).GetRank().Name).addPlayer(player); + } + if (leader && _players.size() > 0) { Announce("Party Leadership passed on to " + F.name(GetLeader()) + "."); } } - + public void KickParty(String player) { - //Announce + // Announce Announce(F.name(player) + " was kicked from the Party."); - + _players.remove(player); } public void PlayerJoin(Player player) { - //Scoreboard - if (_players.contains(player.getName())) - _scoreboard.getTeam("Party").addPlayer(player); - else if (Manager.GetClients().Get(player) != null) - _scoreboard.getTeam(Manager.GetClients().Get(player).GetRank().Name).addPlayer(player); - + if (_isHub) + { + // Scoreboard + if (_players.contains(player.getName())) + _scoreboard.getTeam("Party").addPlayer(player); + else if (_manager.GetClients().Get(player) != null) + _scoreboard.getTeam(_manager.GetClients().Get(player).GetRank().Name).addPlayer(player); + } + if (_creator.equals(player.getName())) { _players.remove(player.getName()); _players.add(0, player.getName()); - + Announce("Party Leadership returned to " + F.name(GetLeader()) + "."); } } - //Shuffle Leader + // Shuffle Leader public void PlayerQuit(Player player) { if (player.getName().equals(GetLeader())) @@ -167,7 +203,10 @@ public class Party _players.remove(player.getName()); _players.add(0, player.getName()); - Announce("Party Leadership passed on to " + F.name(GetLeader()) + "."); + if (_informNewLeaderTimer < System.currentTimeMillis()) + { + Announce("Party Leadership passed on to " + F.name(GetLeader()) + "."); + } } } @@ -176,7 +215,7 @@ public class Party for (String name : _players) { Player player = UtilPlayer.searchExact(name); - + if (player != null && player.isOnline()) { UtilPlayer.message(player, F.main("Party", message)); @@ -192,7 +231,7 @@ public class Party while (inviteeIterator.hasNext()) { String name = inviteeIterator.next(); - + if (UtilTime.elapsed(_invitee.get(name), 60000)) { Announce(F.name(name) + " did not respond to the Party invite."); @@ -205,7 +244,7 @@ public class Party { if (_players.isEmpty()) return _creator; - + return _players.get(0); } @@ -213,11 +252,11 @@ public class Party { return _players; } - + public Collection GetPlayersOnline() { ArrayList players = new ArrayList(); - + for (String name : _players) { Player player = UtilPlayer.searchExact(name); @@ -235,77 +274,80 @@ public class Party public void UpdateScoreboard() { - _scoreboardObj.setDisplayName(GetLeader() + "'s Party"); - - //Clear Past - for (String pastLine : _scoreboardLast) - _scoreboard.resetScores(pastLine); - _scoreboardLast.clear(); - - int i=16; - - //Add New - for (int j=0 ; j<_players.size() ; j++) + if (_isHub) { - String name = _players.get(j); - Player player = UtilPlayer.searchExact(name); - - ChatColor col = ChatColor.GREEN; - if (player == null) - col = ChatColor.RED; - - String line = col + name; - - if (line.length() > 16) - line = line.substring(0, 16); + _scoreboardObj.setDisplayName(GetLeader() + "'s Party"); - _scoreboardObj.getScore(line).setScore(i); + // Clear Past + for (String pastLine : _scoreboardLast) + _scoreboard.resetScores(pastLine); + _scoreboardLast.clear(); - _scoreboardLast.add(line); + int i = 16; - i--; - } - - //Add New - for (String name : _invitee.keySet()) - { - int time = 1 + (int) ((60000 - (System.currentTimeMillis() - _invitee.get(name)))/1000); - - String line = time + " " + ChatColor.GRAY + name; - - if (line.length() > 16) - line = line.substring(0, 16); - - _scoreboardObj.getScore(line).setScore(i); - - _scoreboardLast.add(line); - - i--; - } - - //Set Scoreboard - for (String name : _players) - { - Player player = UtilPlayer.searchExact(name); - - if (player != null) + // Add New + for (int j = 0; j < _players.size(); j++) { - if (!player.getScoreboard().equals(_scoreboard)) + String name = _players.get(j); + Player player = UtilPlayer.searchExact(name); + + ChatColor col = ChatColor.GREEN; + if (player == null) + col = ChatColor.RED; + + String line = col + name; + + if (line.length() > 16) + line = line.substring(0, 16); + + _scoreboardObj.getScore(line).setScore(i); + + _scoreboardLast.add(line); + + i--; + } + + // Add New + for (String name : _invitee.keySet()) + { + int time = 1 + (int) ((60000 - (System.currentTimeMillis() - _invitee.get(name))) / 1000); + + String line = time + " " + ChatColor.GRAY + name; + + if (line.length() > 16) + line = line.substring(0, 16); + + _scoreboardObj.getScore(line).setScore(i); + + _scoreboardLast.add(line); + + i--; + } + + // Set Scoreboard + for (String name : _players) + { + Player player = UtilPlayer.searchExact(name); + + if (player != null) { - player.setScoreboard(_scoreboard); - } + if (!player.getScoreboard().equals(_scoreboard)) + { + player.setScoreboard(_scoreboard); + } + } } } } - public boolean IsDead() + public boolean IsDead() { if (_players.size() == 0) return true; - + if (_players.size() == 1 && _invitee.size() == 0) return true; - + int online = 0; for (String name : _players) { @@ -313,9 +355,8 @@ public class Party if (player != null) online++; } - - //One or Less Members Online - Expirey Countdown + // One or Less Members Online - Expirey Countdown if (online <= 1) { if (_partyOfflineTimer == -1) @@ -324,13 +365,24 @@ public class Party } else { - if (UtilTime.elapsed(_partyOfflineTimer, 3600000)) // 1 hour + if (UtilTime.elapsed(_partyOfflineTimer, online == 0 ? 15000 : 120000)) // 15 seconds for no players, 2 minutes if + // one player. { return true; } } } - + return false; } + + public void resetWaitingTime() + { + _partyOfflineTimer = System.currentTimeMillis(); + } + + public void switchedServer() + { + _informNewLeaderTimer = System.currentTimeMillis() + 5000; + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/party/PartyManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java similarity index 60% rename from Plugins/Mineplex.Hub/src/mineplex/hub/party/PartyManager.java rename to Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java index 17d25a8fb..8d10394d5 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/party/PartyManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java @@ -1,8 +1,20 @@ -package mineplex.hub.party; +package mineplex.core.party; import java.util.HashSet; import java.util.Iterator; +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.party.commands.PartyCommand; +import mineplex.core.party.redis.RedisPartyData; +import mineplex.core.party.redis.RedisPartyHandler; +import mineplex.core.portal.Portal; +import mineplex.core.portal.ServerTransferEvent; +import mineplex.core.preferences.PreferencesManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.serverdata.ServerCommandManager; + import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -10,39 +22,37 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; -import mineplex.core.MiniPlugin; -import mineplex.core.account.CoreClientManager; -import mineplex.core.preferences.PreferencesManager; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.hub.party.commands.PartyCommand; - public class PartyManager extends MiniPlugin { private CoreClientManager _clientManager; private PreferencesManager _preferenceManager; - + private Portal _portal; + public HashSet _parties = new HashSet(); - - public PartyManager(JavaPlugin plugin, CoreClientManager clientManager, PreferencesManager preferenceManager) + + public PartyManager(JavaPlugin plugin, Portal portal, CoreClientManager clientManager, PreferencesManager preferenceManager) { super("Party Manager", plugin); - + + _portal = portal; _clientManager = clientManager; _preferenceManager = preferenceManager; + + ServerCommandManager.getInstance().registerCommandType("RedisPartyData", RedisPartyData.class, + new RedisPartyHandler(this)); } - + @Override - public void AddCommands() + public void AddCommands() { addCommand(new PartyCommand(this)); } - + public CoreClientManager GetClients() { return _clientManager; } - + public PreferencesManager getPreferenceManager() { return _preferenceManager; @@ -53,10 +63,50 @@ public class PartyManager extends MiniPlugin Party party = new Party(this); party.JoinParty(player); _parties.add(party); - + return party; } - + + public void addParty(Party party) + { + for (Party parties : _parties) + { + if (parties.GetLeader().equalsIgnoreCase(party.GetLeader())) + { + parties.resetWaitingTime(); + + return; + } + } + + _parties.add(party); + } + + @EventHandler + public void serverTransfer(ServerTransferEvent event) + { + for (Party party : _parties) + { + if (party.GetLeader().equals(event.getPlayer().getName())) + { + party.switchedServer(); + + RedisPartyData data = new RedisPartyData(party, event.getServer()); + data.publish(); + + for (Player player : party.GetPlayersOnline()) + { + if (player != event.getPlayer()) + { + _portal.sendPlayerToServer(player, event.getServer()); + } + } + + break; + } + } + } + @EventHandler(priority = EventPriority.MONITOR) public void PlayerJoin(PlayerJoinEvent event) { @@ -72,7 +122,7 @@ public class PartyManager extends MiniPlugin throw ex; } } - + @EventHandler public void PlayerQuit(PlayerQuitEvent event) { @@ -81,31 +131,31 @@ public class PartyManager extends MiniPlugin party.PlayerQuit(event.getPlayer()); } } - + @EventHandler public void Update(UpdateEvent event) { if (event.getType() != UpdateType.FAST) return; - + ExpireParties(); - + for (Party party : _parties) { party.ExpireInvitees(); party.UpdateScoreboard(); } } - + public void ExpireParties() { Iterator partyIterator = _parties.iterator(); - + while (partyIterator.hasNext()) { Party party = partyIterator.next(); - - //Empty Party + + // Empty Party if (party.IsDead()) { party.Announce("Your Party has been closed."); @@ -114,7 +164,7 @@ public class PartyManager extends MiniPlugin } } - public Party GetParty(Player player) + public Party GetParty(Player player) { for (Party party : _parties) { @@ -123,7 +173,7 @@ public class PartyManager extends MiniPlugin return party; } } - + return null; } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/party/commands/PartyCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java similarity index 97% rename from Plugins/Mineplex.Hub/src/mineplex/hub/party/commands/PartyCommand.java rename to Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java index c9f61da49..4755ad168 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/party/commands/PartyCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java @@ -1,15 +1,15 @@ -package mineplex.hub.party.commands; - -import org.bukkit.Sound; -import org.bukkit.entity.Player; +package mineplex.core.party.commands; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; -import mineplex.hub.party.Party; -import mineplex.hub.party.PartyManager; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; public class PartyCommand extends CommandBase { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java new file mode 100644 index 000000000..bf2a7313e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java @@ -0,0 +1,29 @@ +package mineplex.core.party.redis; + +import mineplex.core.party.Party; +import mineplex.serverdata.ServerCommand; + +public class RedisPartyData extends ServerCommand +{ + + private String[] _players; + private String _leader; + + public RedisPartyData(Party party, String newServer) + { + _players = party.GetPlayers().toArray(new String[0]); + _leader = party.GetLeader(); + + setTargetServers(newServer); + } + + public String[] getPlayers() + { + return _players; + } + + public String getLeader() + { + return _leader; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyHandler.java new file mode 100644 index 000000000..fbd3a4bc2 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyHandler.java @@ -0,0 +1,25 @@ +package mineplex.core.party.redis; + +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; +import mineplex.serverdata.CommandCallback; +import mineplex.serverdata.ServerCommand; + +public class RedisPartyHandler implements CommandCallback +{ + private PartyManager _partyManager; + + public RedisPartyHandler(PartyManager partyManager) + { + _partyManager = partyManager; + } + + @Override + public void run(ServerCommand command) + { + RedisPartyData data = (RedisPartyData) command; + + _partyManager.addParty(new Party(_partyManager, data)); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java index ad20ccd38..e5af7622c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java @@ -80,6 +80,9 @@ public class Portal extends MiniPlugin if (_connectingPlayers.contains(player.getName())) return; + ServerTransferEvent event = new ServerTransferEvent(player, serverName); + Bukkit.getPluginManager().callEvent(event); + final boolean override = serverName.equalsIgnoreCase("Lobby"); final Rank playerRank = _clientManager.Get(player).GetRank(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java new file mode 100644 index 000000000..69ddf086f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/ServerTransferEvent.java @@ -0,0 +1,40 @@ +package mineplex.core.portal; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ServerTransferEvent extends Event +{ + + private static final HandlerList _handlers = new HandlerList(); + private Player _player; + private String _server; + + public ServerTransferEvent(Player player, String server) + { + _player = player; + _server = server; + } + + public HandlerList getHandlers() + { + return _handlers; + } + + public static HandlerList getHandlerList() + { + return _handlers; + } + + public Player getPlayer() + { + return _player; + } + + public String getServer() + { + return _server; + } + +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index ee7d7f774..ffef99e72 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -26,6 +26,7 @@ import mineplex.core.monitor.LagMeter; import mineplex.core.movement.Movement; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; +import mineplex.core.party.PartyManager; import mineplex.core.personalServer.PersonalServerManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; @@ -42,7 +43,6 @@ import mineplex.core.teleport.Teleport; import mineplex.core.updater.FileUpdater; import mineplex.core.updater.Updater; import mineplex.hub.modules.StackerManager; -import mineplex.hub.party.PartyManager; import mineplex.hub.poll.PollManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -98,9 +98,10 @@ public class Hub extends JavaPlugin implements IRelation //Main Modules ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager)); - PartyManager partyManager = new PartyManager(this, clientManager, preferenceManager); Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName()); + + PartyManager partyManager = new PartyManager(this, portal, clientManager, preferenceManager); AntiHack.Initialize(this, punish, portal, preferenceManager, clientManager); IgnoreManager ignoreManager = new IgnoreManager(this, clientManager, preferenceManager, portal); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index ed6ad295c..ff27f0f1d 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -70,6 +70,8 @@ import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.mount.MountManager; import mineplex.core.mount.event.MountActivateEvent; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; @@ -92,8 +94,6 @@ import mineplex.hub.modules.TextManager; import mineplex.hub.modules.UHCManager; import mineplex.hub.modules.VisibilityManager; import mineplex.hub.modules.WorldManager; -import mineplex.hub.party.Party; -import mineplex.hub.party.PartyManager; import mineplex.hub.poll.PollManager; import mineplex.hub.tutorial.TutorialManager; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/QueueManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/QueueManager.java index 628c7c0fe..0a7ebb32d 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/QueueManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/QueueManager.java @@ -17,9 +17,9 @@ import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.NautHashMap; import mineplex.core.donation.DonationManager; import mineplex.core.elo.EloManager; +import mineplex.core.party.PartyManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.hub.party.PartyManager; public class QueueManager extends MiniPlugin { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java index 10f1a967e..e6b3db74c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueuePage.java @@ -6,10 +6,10 @@ import java.util.List; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.UtilPlayer; import mineplex.core.donation.DonationManager; +import mineplex.core.party.Party; import mineplex.core.shop.item.IButton; import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.page.ShopPageBase; -import mineplex.hub.party.Party; import mineplex.hub.queue.PlayerMatchStatus; import mineplex.hub.queue.QueueManager; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java index 49eccdaf9..ab458968b 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/queue/ui/QueueShop.java @@ -5,11 +5,11 @@ import java.util.Iterator; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.party.Party; import mineplex.core.shop.ShopBase; import mineplex.core.shop.page.ShopPageBase; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.hub.party.Party; import mineplex.hub.queue.QueueManager; import org.bukkit.ChatColor; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 555f9e63e..59fe446b9 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -42,6 +42,8 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.donation.DonationManager; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.party.Party; +import mineplex.core.party.PartyManager; import mineplex.core.portal.Portal; import mineplex.core.recharge.Recharge; import mineplex.core.shop.ShopBase; @@ -50,8 +52,6 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.hub.HubManager; import mineplex.hub.modules.StackerManager; -import mineplex.hub.party.Party; -import mineplex.hub.party.PartyManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.queue.ui.QueueShop; import mineplex.hub.server.ui.LobbyShop; @@ -505,53 +505,7 @@ public class ServerManager extends MiniPlugin { Party party = _partyManager.GetParty(player); - if (party != null) - { - if (player.getName().equals(party.GetLeader())) - { - for (String name : party.GetPlayers()) - { - Player partyPlayer = UtilPlayer.searchExact(name); - - if (partyPlayer == null) - continue; - - if (!_clientManager.Get(partyPlayer).GetRank().Has(Rank.MODERATOR) && serverInfo.CurrentPlayers >= serverInfo.MaxPlayers * 1.5) - continue; - - if (_clientManager.Get(partyPlayer).GetRank().Has(Rank.ULTRA) || _donationManager.Get(partyPlayer.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA")) - continue; - - if (serverInfo.Name.contains("T_")) - continue; - - partyPlayer.leaveVehicle(); - partyPlayer.eject(); - - _portal.sendPlayerToServer(partyPlayer, serverInfo.Name); - } - - for (String name : party.GetPlayers()) - { - Player partyPlayer = UtilPlayer.searchExact(name); - - if (partyPlayer == null) - continue; - - if (!_clientManager.Get(partyPlayer).GetRank().Has(Rank.MODERATOR) && serverInfo.CurrentPlayers >= serverInfo.MaxPlayers * 1.5) - continue; - - if (_clientManager.Get(partyPlayer).GetRank().Has(Rank.ULTRA) || _donationManager.Get(partyPlayer.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA")) - { - partyPlayer.leaveVehicle(); - partyPlayer.eject(); - - _portal.sendPlayerToServer(partyPlayer, serverInfo.Name); - } - } - } - } - else + if (party == null || player.getName().equals(party.GetLeader())) { player.leaveVehicle(); player.eject(); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java index f30d3af6f..8221c7f63 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcShop.java @@ -7,9 +7,9 @@ import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.donation.DonationManager; +import mineplex.core.party.Party; import mineplex.core.shop.ShopBase; import mineplex.core.shop.page.ShopPageBase; -import mineplex.hub.party.Party; import mineplex.hub.server.ServerManager; public class ServerNpcShop extends ShopBase diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index a497d3f1c..c8ddf1dcf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -31,6 +31,7 @@ import mineplex.core.monitor.LagMeter; import mineplex.core.mount.MountManager; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; +import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; @@ -122,6 +123,8 @@ public class Arcade extends JavaPlugin GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager); CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, null); cosmeticManager.setInterfaceSlot(7); + + PartyManager partyManager = new PartyManager(this, portal, _clientManager, preferenceManager); //Arcade Manager _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, webServerAddress);