diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 13b582c81..8beee32bc 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -251,5 +251,19 @@ - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml b/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml deleted file mode 100644 index e3bb9f3ea..000000000 --- a/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: DynamicServer -main: mineplex.bungee.dynamicServer.DynamicServer -version: 1 -author: defek7 diff --git a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java b/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java deleted file mode 100644 index 9e69ed8e6..000000000 --- a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package mineplex.bungee.dynamicServer; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.plugin.Command; - -public class ReloadServerListCommand extends Command -{ - private DynamicServer _plugin; - - public ReloadServerListCommand(DynamicServer plugin) - { - super( "reloaddynamicserver", "bungeecord.command.reloadserverlist" ); - - _plugin = plugin; - } - - @Override - public void execute(CommandSender sender, String[] arg1) - { - _plugin.LoadServers(); - sender.sendMessage(ChatColor.BLUE + "DynamicServer>" + ChatColor.GRAY + " Reloaded server list."); - } -} diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/.classpath b/Plugins/Mineplex.Bungee.LobbyBalancer/.classpath deleted file mode 100644 index fbeb69b51..000000000 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Bungee.LobbyBalancer/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7341ab168..000000000 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml b/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml deleted file mode 100644 index df2221356..000000000 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: LobbyBalancer -main: mineplex.bungee.lobbyBalancer.LobbyBalancer -version: 1 -author: defek7 -depends: [DynamicServer] diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java b/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java deleted file mode 100644 index 855e8e2f3..000000000 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package mineplex.bungee.lobbyBalancer; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.plugin.Command; - -public class ReloadLobbyServerListCommand extends Command -{ - private LobbyBalancer _plugin; - - public ReloadLobbyServerListCommand(LobbyBalancer plugin) - { - super( "reloadlobbybalancer", "bungeecord.command.reloadserverlist" ); - - _plugin = plugin; - } - - @Override - public void execute(CommandSender sender, String[] arg1) - { - _plugin.loadLobbyServers(); - sender.sendMessage(ChatColor.BLUE + "LobbyBalancer>" + ChatColor.GRAY + " Reloaded lobby server list."); - } -} diff --git a/Plugins/Mineplex.Bungee.DynamicServer/.classpath b/Plugins/Mineplex.Bungee.Mineplexer/.classpath similarity index 68% rename from Plugins/Mineplex.Bungee.DynamicServer/.classpath rename to Plugins/Mineplex.Bungee.Mineplexer/.classpath index fbeb69b51..8ae052756 100644 --- a/Plugins/Mineplex.Bungee.DynamicServer/.classpath +++ b/Plugins/Mineplex.Bungee.Mineplexer/.classpath @@ -3,5 +3,7 @@ + + diff --git a/Plugins/Mineplex.Bungee.Mineplexer/.externalToolBuilders/Mineplexer.launch b/Plugins/Mineplex.Bungee.Mineplexer/.externalToolBuilders/Mineplexer.launch new file mode 100644 index 000000000..3921867d6 --- /dev/null +++ b/Plugins/Mineplex.Bungee.Mineplexer/.externalToolBuilders/Mineplexer.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Bungee.Mineplexer/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs rename to Plugins/Mineplex.Bungee.Mineplexer/.settings/org.eclipse.jdt.core.prefs diff --git a/Plugins/Mineplex.Bungee.Mineplexer/plugin.yml b/Plugins/Mineplex.Bungee.Mineplexer/plugin.yml new file mode 100644 index 000000000..e2beec573 --- /dev/null +++ b/Plugins/Mineplex.Bungee.Mineplexer/plugin.yml @@ -0,0 +1,4 @@ +name: Mineplexer +main: mineplex.bungee.Mineplexer +version: 1 +author: defek7 diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java new file mode 100644 index 000000000..e0f3f26ab --- /dev/null +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java @@ -0,0 +1,33 @@ +package mineplex.bungee; + +import mineplex.bungee.bungeeSigns.BungeeSigns; +import mineplex.bungee.dynamicServer.DynamicServer; +import mineplex.bungee.lobbyBalancer.LobbyBalancer; +import mineplex.bungee.playerCount.PlayerCount; +import mineplex.bungee.updater.Updater; +import net.md_5.bungee.api.plugin.Plugin; + +public class Mineplexer extends Plugin +{ + private DynamicServer _dynamicServers; + private LobbyBalancer _lobbyBalancer; + private PlayerCount _playerCount; + + @Override + public void onEnable() + { + new BungeeSigns(this); + new Updater(this); + + _dynamicServers = new DynamicServer(this); + _lobbyBalancer = new LobbyBalancer(this); + _playerCount = new PlayerCount(this); + } + + public void ReloadServerLists() + { + _dynamicServers.LoadServers(); + _lobbyBalancer.loadLobbyServers(); + _playerCount.LoadBungeeServers(); + } +} diff --git a/Plugins/BungeeSigns/src/mineplex/bungee/BungeeSigns/BungeeSigns.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/bungeeSigns/BungeeSigns.java similarity index 93% rename from Plugins/BungeeSigns/src/mineplex/bungee/BungeeSigns/BungeeSigns.java rename to Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/bungeeSigns/BungeeSigns.java index 47d5bcbe5..0b83dc262 100644 --- a/Plugins/BungeeSigns/src/mineplex/bungee/BungeeSigns/BungeeSigns.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/bungeeSigns/BungeeSigns.java @@ -1,4 +1,4 @@ -package mineplex.bungee.BungeeSigns; +package mineplex.bungee.bungeeSigns; import java.io.ByteArrayInputStream; import java.io.DataInput; @@ -21,13 +21,16 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.protocol.packet.PacketFAPluginMessage; -public class BungeeSigns extends Plugin implements Listener +public class BungeeSigns implements Listener { - @Override - public void onEnable() + private Plugin _plugin; + + public BungeeSigns(Plugin plugin) { - getProxy().getPluginManager().registerListener(this, this); - getProxy().registerChannel("BungeeSigns"); + _plugin = plugin; + + _plugin.getProxy().getPluginManager().registerListener(_plugin, this); + _plugin.getProxy().registerChannel("BungeeSigns"); } @EventHandler @@ -40,7 +43,7 @@ public class BungeeSigns extends Plugin implements Listener try { in = new DataInputStream(new ByteArrayInputStream(event.getData())); - final ServerInfo serverInfo = getProxy().getServerInfo(in.readUTF()); + final ServerInfo serverInfo = _plugin.getProxy().getServerInfo(in.readUTF()); in.close(); diff --git a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/dynamicServer/DynamicServer.java similarity index 79% rename from Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java rename to Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/dynamicServer/DynamicServer.java index c876dc0a8..6263418e8 100644 --- a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/dynamicServer/DynamicServer.java @@ -10,15 +10,17 @@ import java.net.InetSocketAddress; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; -public class DynamicServer extends Plugin implements Listener +public class DynamicServer implements Listener { - @Override - public void onEnable() + private Plugin _plugin; + + public DynamicServer(Plugin plugin) { + _plugin = plugin; + LoadServers(); - getProxy().getPluginManager().registerListener(this, this); - getProxy().getPluginManager().registerCommand(this, new ReloadServerListCommand(this)); + _plugin.getProxy().getPluginManager().registerListener(_plugin, this); } public void LoadServers() @@ -44,7 +46,7 @@ public class DynamicServer extends Plugin implements Listener Integer port = Integer.parseInt(line.split(",")[1].split(":")[1]); InetSocketAddress socketAddress = new InetSocketAddress(address, port); - getProxy().getServers().put(name, getProxy().constructServerInfo(name, socketAddress, "DynamicServer", false)); + _plugin.getProxy().getServers().put(name, _plugin.getProxy().constructServerInfo(name, socketAddress, "DynamicServer", false)); line = br.readLine(); } } diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java similarity index 67% rename from Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java rename to Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java index 1acc87b23..5ba8a066c 100644 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java @@ -18,19 +18,23 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; -public class LobbyBalancer extends Plugin implements Listener, Runnable +public class LobbyBalancer implements Listener, Runnable { + private Plugin _plugin; private HashMap _lobbyServers = new HashMap(); - - @Override - public void onEnable() + + private String _bestServer = "Lobby"; + + private static Object _serverLock = new Object(); + + public LobbyBalancer(Plugin plugin) { + _plugin = plugin; + loadLobbyServers(); - getProxy().getPluginManager().registerListener(this, this); - getProxy().getScheduler().schedule(this, this, 1L, 1L, TimeUnit.SECONDS); - - getProxy().getPluginManager().registerCommand(this, new ReloadLobbyServerListCommand(this)); + _plugin.getProxy().getPluginManager().registerListener(_plugin, this); + _plugin.getProxy().getScheduler().schedule(_plugin, this, 1L, 1L, TimeUnit.SECONDS); } @EventHandler @@ -39,54 +43,59 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable if (!event.getTarget().getName().equalsIgnoreCase("Lobby")) return; - String bestServer = null; - Entry leastPlayerServer = null; - - for (Entry entry : _lobbyServers.entrySet()) - { - if (entry.getValue() == 999) - continue; - - if (bestServer == null) - { - bestServer = entry.getKey(); - leastPlayerServer = entry; - } - else if (entry.getValue() > _lobbyServers.get(bestServer) && entry.getValue() < 80) - bestServer = entry.getKey(); - - if (entry.getValue() < leastPlayerServer.getValue()) - { - leastPlayerServer = entry; - } - } - - if (_lobbyServers.get(bestServer) > 80) - { - bestServer = leastPlayerServer.getKey(); - } - - event.setTarget(getProxy().getServerInfo(bestServer)); + event.setTarget(_plugin.getProxy().getServerInfo(_bestServer)); } public void run() { - for (String name : _lobbyServers.keySet()) - { - try - { - UpdateServerCount(name); - } - catch (IOException e) - { - e.printStackTrace(); - } - } + synchronized (_serverLock) + { + for (String name : _lobbyServers.keySet()) + { + try + { + UpdateServerCount(name); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + String bestServer = null; + Entry leastPlayerServer = null; + + for (Entry entry : _lobbyServers.entrySet()) + { + if (entry.getValue() == 999) + continue; + + if (bestServer == null) + { + bestServer = entry.getKey(); + leastPlayerServer = entry; + } + else if (entry.getValue() > _lobbyServers.get(bestServer) && entry.getValue() < 80) + bestServer = entry.getKey(); + + if (entry.getValue() < leastPlayerServer.getValue()) + { + leastPlayerServer = entry; + } + } + + if (_lobbyServers.get(bestServer) > 80) + { + bestServer = leastPlayerServer.getKey(); + } + + _bestServer = bestServer; + } } protected void UpdateServerCount(String name) throws IOException { - InetSocketAddress address = getProxy().getServerInfo(name).getAddress(); + InetSocketAddress address = _plugin.getProxy().getServerInfo(name).getAddress(); Socket socket = null; DataInputStream dataInputStream = null; @@ -125,24 +134,36 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable { var27 = var6.substring(1).split("\u0000"); - if (var27[3].contains("Restarting")) - _lobbyServers.put(name, 999); - else - _lobbyServers.put(name, Integer.parseInt(var27[4])); + synchronized (_serverLock) + { + if (var27[3].contains("Restarting")) + _lobbyServers.put(name, 999); + else + _lobbyServers.put(name, Integer.parseInt(var27[4])); + } } } catch (SocketTimeoutException e) { - _lobbyServers.put(name, 999); + synchronized (_serverLock) + { + _lobbyServers.put(name, 999); + } } catch (ConnectException e) { - _lobbyServers.put(name, 999); + synchronized (_serverLock) + { + _lobbyServers.put(name, 999); + } } catch (IOException e) { System.out.println("[LobbyBalancer IOException] Error pinging " + address.getHostString() + ":" + address.getPort()); - _lobbyServers.put(name, 999); + synchronized (_serverLock) + { + _lobbyServers.put(name, 999); + } throw e; } finally @@ -225,14 +246,17 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable public void loadLobbyServers() { - _lobbyServers.clear(); + synchronized (_serverLock) + { + _lobbyServers.clear(); - for (String key : getProxy().getServers().keySet()) - { - if (key.toUpperCase().contains("LOBBY")) - { - _lobbyServers.put(key, 0); - } - } + for (String key : _plugin.getProxy().getServers().keySet()) + { + if (key.toUpperCase().contains("LOBBY")) + { + _lobbyServers.put(key, 0); + } + } + } } } diff --git a/Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/PlayerCount.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java similarity index 79% rename from Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/PlayerCount.java rename to Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java index b46b7ae6a..4b38f4d18 100644 --- a/Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/PlayerCount.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java @@ -1,4 +1,4 @@ -package mineplex.bungee.PlayerCount; +package mineplex.bungee.playerCount; import java.io.BufferedReader; import java.io.DataInput; @@ -22,8 +22,10 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; -public class PlayerCount extends Plugin implements Listener, Runnable +public class PlayerCount implements Listener, Runnable { + private Plugin _plugin; + private HashMap _otherBungeeInstances; private int _totalPlayers; private int _totalMaxPlayers; @@ -31,38 +33,41 @@ public class PlayerCount extends Plugin implements Listener, Runnable private int _tempPlayers; private int _tempMaxPlayers; - @Override - public void onEnable() + private static Object _serverLock = new Object(); + + public PlayerCount(Plugin plugin) { + _plugin = plugin; _otherBungeeInstances = new HashMap(); LoadBungeeServers(); - getProxy().getScheduler().schedule(this, this, 1L, 1L, TimeUnit.SECONDS); - getProxy().getPluginManager().registerListener(this, this); - - getProxy().getPluginManager().registerCommand(this, new ReloadPlayerCountListCommand(this)); + _plugin.getProxy().getScheduler().schedule(_plugin, this, 1L, 1L, TimeUnit.SECONDS); + _plugin.getProxy().getPluginManager().registerListener(_plugin, this); } public void run() { - _tempPlayers = getProxy().getOnlineCount(); + _tempPlayers = _plugin.getProxy().getOnlineCount(); _tempMaxPlayers = 0; - for(ListenerInfo li : getProxy().getConfigurationAdapter().getListeners()) + for(ListenerInfo li : _plugin.getProxy().getConfigurationAdapter().getListeners()) { _tempMaxPlayers += li.getMaxPlayers(); } - for (InetSocketAddress address : _otherBungeeInstances.values()) + synchronized (_serverLock) { - try - { - UpdateServerCount(address); - } catch (IOException e) - { - e.printStackTrace(); - } + for (InetSocketAddress address : _otherBungeeInstances.values()) + { + try + { + UpdateServerCount(address); + } catch (IOException e) + { + e.printStackTrace(); + } + } } _totalPlayers = _tempPlayers; @@ -96,17 +101,18 @@ public class PlayerCount extends Plugin implements Listener, Runnable dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeByte(254); + dataOutputStream.writeByte(1); dataOutputStream.writeByte(254); writeString("MC|PingHost", dataOutputStream); dataOutputStream.writeShort(3 + 2 * address.getAddress().getHostName().length() + 4); - dataOutputStream.writeByte(73); + dataOutputStream.writeByte(74); writeString(address.getAddress().getHostName(), dataOutputStream); dataOutputStream.writeInt(address.getPort()); if (dataInputStream.read() != 255) { - System.out.println("not 255"); + System.out.println("Bad message"); return; } @@ -132,7 +138,7 @@ public class PlayerCount extends Plugin implements Listener, Runnable } catch (IOException e) { - System.out.println("[BungeeSigns] Error pinging " + address.getHostString() + ":" + address.getPort()); + System.out.println("[PlayerCount] Error pinging " + address.getHostName() + ":" + address.getPort()); throw e; } finally @@ -215,6 +221,11 @@ public class PlayerCount extends Plugin implements Listener, Runnable public void LoadBungeeServers() { + synchronized (_serverLock) + { + _otherBungeeInstances.clear(); + } + FileInputStream fstream = null; BufferedReader br = null; @@ -234,7 +245,25 @@ public class PlayerCount extends Plugin implements Listener, Runnable String address = line.split(":")[0]; Integer port = Integer.parseInt(line.split(":")[1]); InetSocketAddress socketAddress = new InetSocketAddress(address, port); - _otherBungeeInstances.put(socketAddress.getAddress().getHostAddress(), socketAddress); + + boolean addAddress = true; + + for (ListenerInfo listenerInfo : _plugin.getProxy().getConfigurationAdapter().getListeners()) + { + if (address.equalsIgnoreCase(listenerInfo.getHost().getAddress().getHostAddress())) + { + addAddress = false; + break; + } + } + + if (addAddress) + { + synchronized (_serverLock) + { + _otherBungeeInstances.put(socketAddress.getAddress().getHostAddress(), socketAddress); + } + } line = br.readLine(); } diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/updater/Updater.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/updater/Updater.java new file mode 100644 index 000000000..716b94342 --- /dev/null +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/updater/Updater.java @@ -0,0 +1,188 @@ +package mineplex.bungee.updater; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.io.FileUtils; + +import mineplex.bungee.Mineplexer; + +public class Updater implements Runnable +{ + private Mineplexer _plugin; + private HashMap _jarMd5Map = new HashMap(); + private File _updateDirectory; + + private boolean _needUpdate = false; + + public Updater(Mineplexer plugin) + { + _plugin = plugin; + _jarMd5Map = new HashMap(); + + getCurrentMd5s(); + + boolean windows = System.getProperty("os.name").startsWith("Windows"); + + _updateDirectory = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update" + File.separator + "bungee"); + + _updateDirectory.mkdirs(); + + _plugin.getProxy().getScheduler().schedule(_plugin, this, 1L, 1L, TimeUnit.SECONDS); + } + + private void getCurrentMd5s() + { + File currentDir = new File("."); + + FilenameFilter statsFilter = new FilenameFilter() + { + public boolean accept(File paramFile, String paramString) + { + if (paramString.endsWith("dat")) + { + return true; + } + + return false; + } + }; + + for (File f : currentDir.listFiles(statsFilter)) + { + FileInputStream fis = null; + + try + { + fis = new FileInputStream(f); + _jarMd5Map.put(f.getName(), DigestUtils.md5Hex(fis)); + } + catch (Exception ex) + { + System.out.println("Updater: Error parsing dat md5's"); + ex.printStackTrace(); + } + finally + { + if (fis != null) + { + try + { + fis.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } + } + + @Override + public void run() + { + FilenameFilter statsFilter = new FilenameFilter() + { + public boolean accept(File paramFile, String paramString) + { + if (paramString.endsWith("dat")) + { + return true; + } + + return false; + } + }; + + for (File f : _updateDirectory.listFiles(statsFilter)) + { + FileInputStream fis = null; + + try + { + if (_jarMd5Map.containsKey(f.getName())) + { + fis = new FileInputStream(f); + String md5 = DigestUtils.md5Hex(fis); + + if (!md5.equals(_jarMd5Map.get(f.getName()))) + { + _needUpdate = true; + } + } + } + catch (Exception ex) + { + System.out.println("Updater: Error parsing dat md5's"); + ex.printStackTrace(); + } + finally + { + if (fis != null) + { + try + { + fis.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } + + if (_needUpdate) + { + updateFiles(); + } + } + + private void updateFiles() + { + _needUpdate = false; + + boolean windows = System.getProperty("os.name").startsWith("Windows"); + + File updateDir = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update" + File.separator + "bungee"); + File currentDir = new File("."); + + updateDir.mkdirs(); + + FilenameFilter statsFilter = new FilenameFilter() + { + public boolean accept(File paramFile, String paramString) + { + if (paramString.endsWith("dat")) + { + return true; + } + + return false; + } + }; + + for (File f : updateDir.listFiles(statsFilter)) + { + try + { + FileUtils.copyFileToDirectory(f, currentDir); + } + catch (Exception ex) + { + System.out.println("Updater: Error updating dats"); + ex.printStackTrace(); + } + } + + getCurrentMd5s(); + _plugin.ReloadServerLists(); + System.out.println("Updater: Updated with new dat files."); + } +} diff --git a/Plugins/Mineplex.Bungee.PlayerCount/.classpath b/Plugins/Mineplex.Bungee.PlayerCount/.classpath deleted file mode 100644 index fbeb69b51..000000000 --- a/Plugins/Mineplex.Bungee.PlayerCount/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/Plugins/Mineplex.Bungee.PlayerCount/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Bungee.PlayerCount/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7341ab168..000000000 --- a/Plugins/Mineplex.Bungee.PlayerCount/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Plugins/Mineplex.Bungee.PlayerCount/plugin.yml b/Plugins/Mineplex.Bungee.PlayerCount/plugin.yml deleted file mode 100644 index 18b6810c7..000000000 --- a/Plugins/Mineplex.Bungee.PlayerCount/plugin.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: PlayerCount -main: mineplex.bungee.PlayerCount.PlayerCount -version: 1 -author: defek7 diff --git a/Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/ReloadPlayerCountListCommand.java b/Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/ReloadPlayerCountListCommand.java deleted file mode 100644 index 84e377e03..000000000 --- a/Plugins/Mineplex.Bungee.PlayerCount/src/mineplex/bungee/PlayerCount/ReloadPlayerCountListCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package mineplex.bungee.PlayerCount; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.plugin.Command; - -public class ReloadPlayerCountListCommand extends Command -{ - private PlayerCount _plugin; - - public ReloadPlayerCountListCommand(PlayerCount plugin) - { - super( "reloadplayercount", "bungeecord.command.reloadserverlist" ); - - _plugin = plugin; - } - - @Override - public void execute(CommandSender sender, String[] arg1) - { - _plugin.LoadBungeeServers(); - sender.sendMessage(ChatColor.BLUE + "PlayerCount>" + ChatColor.GRAY + " Reloaded player count server list."); - } -} diff --git a/Plugins/Mineplex.Hub/.classpath b/Plugins/Mineplex.Hub/.classpath index 3028e8700..8147b149b 100644 --- a/Plugins/Mineplex.Hub/.classpath +++ b/Plugins/Mineplex.Hub/.classpath @@ -10,5 +10,6 @@ + diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 32add05cf..5cab47ba6 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -11,8 +11,8 @@ import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; +import java.util.Collection; +import java.util.HashSet; import java.util.Set; import org.bukkit.Bukkit; @@ -47,7 +47,7 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener private Portal _portal; private PartyManager _partyManager; - private NautHashMap> _serverNpcMap = new NautHashMap>(); + private NautHashMap> _serverNpcMap = new NautHashMap>(); private NautHashMap _serverNpcShopMap = new NautHashMap(); private NautHashMap _serverInfoMap = new NautHashMap(); private NautHashMap _serverUpdate = new NautHashMap(); @@ -69,6 +69,8 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener plugin.getServer().getMessenger().registerIncomingPluginChannel(plugin, "BungeeSigns", this); LoadServers(); + + new ServerManagerUpdater(this); } public void AddCommands() @@ -81,14 +83,16 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener ServerInfo serverInfo = new ServerInfo(); serverInfo.Name = serverName; - _serverNpcMap.get(serverNpcName).add(serverInfo); - - if (!_serverInfoMap.containsKey(serverName)) + if (_serverInfoMap.containsKey(serverName)) { - _serverInfoMap.put(serverName, serverInfo); - _serverUpdate.put(serverName, System.currentTimeMillis()); + _serverInfoMap.remove(serverName); + _serverUpdate.remove(serverName); } + _serverNpcMap.get(serverNpcName).add(serverInfo); + _serverInfoMap.put(serverName, serverInfo); + _serverUpdate.put(serverName, System.currentTimeMillis()); + SaveServers(); } @@ -104,13 +108,13 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener public void AddServerNpc(String serverNpcName) { - _serverNpcMap.put(serverNpcName, new ArrayList()); + _serverNpcMap.put(serverNpcName, new HashSet()); _serverNpcShopMap.put(serverNpcName, new ServerNpcShop(this, _clientManager, _donationManager, serverNpcName)); } public void RemoveServerNpc(String serverNpcName) { - List mappedServers = _serverNpcMap.remove(serverNpcName); + Set mappedServers = _serverNpcMap.remove(serverNpcName); _serverNpcShopMap.remove(serverNpcName); if (mappedServers != null) @@ -140,7 +144,7 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener } } - public List GetServerList(String serverNpcName) + public Collection GetServerList(String serverNpcName) { return _serverNpcMap.get(serverNpcName); } @@ -434,11 +438,21 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener public void LoadServers() { + _serverInfoMap.clear(); + _serverUpdate.clear(); + + for (String npcName : _serverNpcMap.keySet()) + { + _serverNpcMap.get(npcName).clear(); + } + _loading = true; FileInputStream fstream = null; BufferedReader br = null; + HashSet npcNames = new HashSet(); + try { File npcFile = new File("ServerManager.dat"); @@ -461,6 +475,7 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener } AddServer(serverNpcName, server); + npcNames.add(serverNpcName); line = br.readLine(); } @@ -498,6 +513,15 @@ public class ServerManager extends MiniPlugin implements PluginMessageListener _loading = false; } + + for (String npcName : npcNames) + { + if (!_serverNpcShopMap.containsKey(npcName)) + _serverNpcShopMap.remove(npcName); + + if (!_serverNpcMap.containsKey(npcName)) + _serverNpcMap.remove(npcName); + } } public int GetRequiredSlots(Player player, String serverType) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManagerUpdater.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManagerUpdater.java new file mode 100644 index 000000000..d01653872 --- /dev/null +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManagerUpdater.java @@ -0,0 +1,177 @@ +package mineplex.hub.server; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; + +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.io.FileUtils; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import mineplex.core.common.util.NautHashMap; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ServerManagerUpdater implements Listener +{ + private ServerManager _plugin; + private NautHashMap _jarMd5Map = new NautHashMap(); + private File _updateDirectory; + + private boolean _needUpdate = false; + + public ServerManagerUpdater(ServerManager plugin) + { + _plugin = plugin; + + getCurrentMd5s(); + + boolean windows = System.getProperty("os.name").startsWith("Windows"); + + _updateDirectory = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update" + File.separator + "lobby"); + + _updateDirectory.mkdirs(); + + plugin.GetPluginManager().registerEvents(this, plugin.GetPlugin()); + } + + private void getCurrentMd5s() + { + File serverManagerDat = new File("ServerManager.dat"); + + FileInputStream fis = null; + + try + { + fis = new FileInputStream(serverManagerDat); + _jarMd5Map.put(serverManagerDat.getName(), DigestUtils.md5Hex(fis)); + } + catch (Exception ex) + { + System.out.println("ServerManagerUpdater: Error parsing ServerManager dat md5's"); + ex.printStackTrace(); + } + finally + { + if (fis != null) + { + try + { + fis.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } + + @EventHandler + public void checkForNewFiles(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + FilenameFilter statsFilter = new FilenameFilter() + { + public boolean accept(File paramFile, String paramString) + { + if (paramString.endsWith("dat")) + { + return true; + } + + return false; + } + }; + + for (File f : _updateDirectory.listFiles(statsFilter)) + { + FileInputStream fis = null; + + try + { + if (_jarMd5Map.containsKey(f.getName())) + { + fis = new FileInputStream(f); + String md5 = DigestUtils.md5Hex(fis); + + if (!md5.equals(_jarMd5Map.get(f.getName()))) + { + _needUpdate = true; + } + } + } + catch (Exception ex) + { + System.out.println("ServerManagerUpdater: Error parsing dat md5's"); + ex.printStackTrace(); + } + finally + { + if (fis != null) + { + try + { + fis.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } + + if (_needUpdate) + { + updateFiles(); + } + } + + private void updateFiles() + { + _needUpdate = false; + + boolean windows = System.getProperty("os.name").startsWith("Windows"); + + File updateDir = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update" + File.separator + "lobby"); + File currentDir = new File("."); + + updateDir.mkdirs(); + + FilenameFilter statsFilter = new FilenameFilter() + { + public boolean accept(File paramFile, String paramString) + { + if (paramString.endsWith("dat")) + { + return true; + } + + return false; + } + }; + + for (File f : updateDir.listFiles(statsFilter)) + { + try + { + FileUtils.copyFileToDirectory(f, currentDir); + } + catch (Exception ex) + { + System.out.println("ServerManagerUpdater: Error updating dats"); + ex.printStackTrace(); + } + } + + getCurrentMd5s(); + _plugin.LoadServers(); + System.out.println("ServerManagerUpdater: Updated with new dat file."); + } + +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerSorter.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerSorter.java index 330862997..01a9aaeb0 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerSorter.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerSorter.java @@ -22,7 +22,7 @@ public class ServerSorter implements Comparator if ((a.MOTD.contains("Recruiting") || a.MOTD.contains("Waiting") || a.MOTD.contains("Starting") || a.MOTD.contains("Cup")) && !b.MOTD.contains("Recruiting") && !b.MOTD.contains("Waiting") && !b.MOTD.contains("Starting") && !b.MOTD.contains("Cup")) return -1; - if ((b.MOTD.contains("Recruiting") || b.MOTD.contains("Waiting") || a.MOTD.contains("Starting") || b.MOTD.contains("Cup")) && !a.MOTD.contains("Recruiting") && !a.MOTD.contains("Waiting") && !a.MOTD.contains("Starting") && !a.MOTD.contains("Cup")) + if ((b.MOTD.contains("Recruiting") || b.MOTD.contains("Waiting") || b.MOTD.contains("Starting") || b.MOTD.contains("Cup")) && !a.MOTD.contains("Recruiting") && !a.MOTD.contains("Waiting") && !a.MOTD.contains("Starting") && !a.MOTD.contains("Cup")) return 1; if (a.MaxPlayers - a.CurrentPlayers < _requiredSlots && b.MaxPlayers - b.CurrentPlayers >= _requiredSlots) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcPage.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcPage.java index 4f01ada8c..ac49e3179 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcPage.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerNpcPage.java @@ -7,6 +7,7 @@ import java.util.List; import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; import mineplex.core.donation.DonationManager; import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.page.ShopPageBase; @@ -34,7 +35,7 @@ public class ServerNpcPage extends ShopPageBase @Override protected void BuildPage() { - List serverList = Plugin.GetServerList(_serverNpcKey); + List serverList = new ArrayList(Plugin.GetServerList(_serverNpcKey)); int slots = 1; @@ -43,7 +44,19 @@ public class ServerNpcPage extends ShopPageBase slots = Plugin.GetRequiredSlots(Player, serverList.get(0).ServerType); } - Collections.sort(serverList, new ServerSorter(slots)); + try + { + Collections.sort(serverList, new ServerSorter(slots)); + } + catch (Exception exception) + { + exception.printStackTrace(); + + for (ServerInfo serverInfo : serverList) + { + System.out.println(F.main("ServerNpcPage", ChatColor.YELLOW + serverInfo.Name + ": " + serverInfo.MOTD + " " + serverInfo.CurrentPlayers + "/" + serverInfo.MaxPlayers)); + } + } int slot = 9; int greenCount = 0; @@ -151,6 +164,7 @@ public class ServerNpcPage extends ShopPageBase { ButtonMap.clear(); BuildPage(); + System.out.println("Updated " + Player.getName() + "'s page."); } public void SelectServer(Player player, ServerInfo serverInfo) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 66fc5fead..b9db5a440 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -587,7 +587,8 @@ public class GameFlagManager implements Listener GameTeam team = game.GetTeam(event.getPlayer()); - team.SetPlayerState(event.getPlayer(), PlayerState.OUT); + if (team != null) + team.SetPlayerState(event.getPlayer(), PlayerState.OUT); } @EventHandler diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index c2101b0a3..2c8849e17 100644 Binary files a/Website/LOCWebsite.suo and b/Website/LOCWebsite.suo differ