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