diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml
index a7374c9d7..59c86a2af 100644
--- a/Plugins/BuildFiles/common.xml
+++ b/Plugins/BuildFiles/common.xml
@@ -264,6 +264,9 @@
+
+
+
@@ -272,14 +275,18 @@
value="mineplex.bungee.BungeeRotator"/>
+
-
+
+
+
+
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java
index 9a1526d1c..92fe1a11e 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/Mineplexer.java
@@ -19,7 +19,7 @@ public class Mineplexer extends Plugin
PlayerCount playerCount = new PlayerCount(this);
new FileUpdater(this);
new PlayerStats(this);
- new InternetStatus(this);
+ //new InternetStatus(this);
new PlayerTracker(this);
new AccountManager(this, playerCount);
}
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java
index 1d723e808..36c4b6745 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java
@@ -8,10 +8,10 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import mineplex.serverdata.MinecraftServer;
import mineplex.serverdata.Region;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.MinecraftServer;
import net.md_5.bungee.api.event.ServerConnectEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbySorter.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbySorter.java
index 056d79af4..dd9751731 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbySorter.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/lobbyBalancer/LobbySorter.java
@@ -2,7 +2,7 @@ package mineplex.bungee.lobbyBalancer;
import java.util.Comparator;
-import mineplex.serverdata.MinecraftServer;
+import mineplex.serverdata.data.MinecraftServer;
public class LobbySorter implements Comparator
{
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
index 4a05869c9..78a3f0efe 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
@@ -47,14 +47,14 @@ public class MotdManager implements Listener, Runnable, CustomMotdFactory
{
_motdLines = _repository.retrieveMotd();
- if (_repository.retrieveMotdAnimated())
- {
+ //if (true)
+ //{
InitialHandler.setCustomMotdFactory(this);
- }
- else
- {
- InitialHandler.setCustomMotdFactory(null);
- }
+ //}
+ //else
+ //{
+ // InitialHandler.setCustomMotdFactory(null);
+ //}
}
public List getMotdLines()
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java
index 40b615104..237625935 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCount.java
@@ -1,7 +1,12 @@
package mineplex.bungee.playerCount;
+import java.io.File;
import java.util.concurrent.TimeUnit;
+import mineplex.serverdata.Region;
+import mineplex.serverdata.ServerManager;
+import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.BungeeServer;
import net.md_5.bungee.api.ServerPing.Players;
import net.md_5.bungee.api.config.ListenerInfo;
import net.md_5.bungee.api.event.ProxyPingEvent;
@@ -12,7 +17,8 @@ import net.md_5.bungee.event.EventHandler;
public class PlayerCount implements Listener, Runnable
{
private Plugin _plugin;
- private PlayerCountRepository _repository;
+ private ServerRepository _repository;
+ private ListenerInfo _listenerInfo;
private int _totalPlayers = -1;
@@ -20,22 +26,25 @@ public class PlayerCount implements Listener, Runnable
{
_plugin = plugin;
- _plugin.getProxy().getScheduler().schedule(_plugin, this, 1L, 1L, TimeUnit.SECONDS);
+ _plugin.getProxy().getScheduler().schedule(_plugin, this, 500L, 500L, TimeUnit.MILLISECONDS);
_plugin.getProxy().getPluginManager().registerListener(_plugin, this);
- ListenerInfo listenerInfo = _plugin.getProxy().getConfigurationAdapter().getListeners().iterator().next();
+ _listenerInfo = _plugin.getProxy().getConfigurationAdapter().getListeners().iterator().next();
- _repository = new PlayerCountRepository(listenerInfo.getHost().getAddress().getHostAddress() + ":" + listenerInfo.getHost().getPort(), listenerInfo.getMaxPlayers());
- _repository.initialize();
+ Region region = !new File("eu.dat").exists() ? Region.US : Region.EU;
+ _repository = ServerManager.getServerRepository(region);
}
public void run()
{
- _repository.updatePlayerCountInDatabase(_plugin.getProxy().getOnlineCount());
+ _repository.updateBungeeStatus(new BungeeServer(_listenerInfo.getHost().getAddress().getHostAddress(), _listenerInfo.getHost().getAddress().getHostAddress(), _listenerInfo.getHost().getPort(), _plugin.getProxy().getOnlineCount(), 1250, (int) ((Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / 1048576), (int) (Runtime.getRuntime().maxMemory() / 1048576)), 15);
+
+ _totalPlayers = 0;
- PlayerTotalData playerTotalData = _repository.retrievePlayerCount();
-
- _totalPlayers = playerTotalData.CurrentPlayers;
+ for (BungeeServer server : _repository.getGlobalBungeeStatuses())
+ {
+ _totalPlayers += server.getPlayerCount();
+ }
}
@EventHandler
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCountRepository.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCountRepository.java
index 479d6fcf4..5826f6afa 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCountRepository.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerCount/PlayerCountRepository.java
@@ -7,6 +7,8 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import mineplex.serverdata.Region;
+
public class PlayerCountRepository
{
private Connection _connection = null;
@@ -14,18 +16,20 @@ public class PlayerCountRepository
private String _userName = "root";
private String _password = "tAbechAk3wR7tuTh";
- private static String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS BungeeServers (id INT NOT NULL AUTO_INCREMENT, address VARCHAR(256), updated LONG, players INT, maxPlayers INT, ram INT, maxRam INT, PRIMARY KEY (id));";
- private static String INSERT_PLAYER_COUNT = "INSERT INTO BungeeServers(address, updated, players, maxPlayers, ram, maxRam) values(?, now(), ?, ?, ?, ?);";
+ private static String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS BungeeServers (id INT NOT NULL AUTO_INCREMENT, address VARCHAR(256), updated LONG, players INT, US BOOLEAN, maxPlayers INT, ram INT, maxRam INT, PRIMARY KEY (id));";
+ private static String INSERT_PLAYER_COUNT = "INSERT INTO BungeeServers(address, updated, US, players, maxPlayers, ram, maxRam) values(?, now(), ?, ?, ?, ?);";
private static String UPDATE_PLAYER_COUNT = "UPDATE BungeeServers SET updated = now(), players = ?, maxPlayers = ?, ram = ?, maxRam = ? WHERE id = ?;";
private static String RETRIEVE_ID = "SELECT id FROM BungeeServers WHERE address = ?;";
private static String RETRIEVE_PLAYER_COUNT = "SELECT SUM(players) AS playerCount, SUM(maxPlayers) AS maxPlayerCount FROM BungeeServers WHERE TIME_TO_SEC(TIMEDIFF(now(), BungeeServers.updated)) < 10;";
private int _id = -1;
+ private Region _region;
private String _address;
private int _maxPlayers = 0;
- public PlayerCountRepository(String address, int maxPlayers)
+ public PlayerCountRepository(Region region, String address, int maxPlayers)
{
+ _region = region;
_address = address;
_maxPlayers = maxPlayers;
}
@@ -65,8 +69,9 @@ public class PlayerCountRepository
preparedStatementInsert.setString(1, _address);
preparedStatementInsert.setInt(2, 0);
preparedStatementInsert.setInt(3, _maxPlayers);
- preparedStatementInsert.setInt(4, (int) ((Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / 1048576));
- preparedStatementInsert.setInt(5, (int) (Runtime.getRuntime().maxMemory() / 1048576));
+ preparedStatementInsert.setBoolean(4, _region == Region.US);
+ preparedStatementInsert.setInt(5, (int) ((Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()) / 1048576));
+ preparedStatementInsert.setInt(6, (int) (Runtime.getRuntime().maxMemory() / 1048576));
int affectedRows = preparedStatementInsert.executeUpdate();
diff --git a/Plugins/Mineplex.BungeeRotator/.classpath b/Plugins/Mineplex.BungeeRotator/.classpath
index feffdd123..d664420d1 100644
--- a/Plugins/Mineplex.BungeeRotator/.classpath
+++ b/Plugins/Mineplex.BungeeRotator/.classpath
@@ -8,5 +8,6 @@
+
diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRepository.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRepository.java
deleted file mode 100644
index 6a172e1a2..000000000
--- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRepository.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package mineplex.bungee;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-public class BungeeRepository
-{
- // Yip Yip actual IP because if null route happens we can't resolve the HOSTNAME DERP FACE DEFEK7!!! -defek7
- private String _connectionString = "jdbc:mysql://db.mineplex.com:3306/BungeeServers?autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
- private String _userName = "root";
- private String _password = "tAbechAk3wR7tuTh";
-
- private static String CREATE_ONLINE_TABLE = "CREATE TABLE IF NOT EXISTS bungeeOnlineStatus (id INT NOT NULL AUTO_INCREMENT, address VARCHAR(40), online BOOLEAN NOT NULL DEFAULT 0, updated LONG, us BOOLEAN NOT NULL DEFAULT 1, lastOnline LONG, PRIMARY KEY (id), UNIQUE INDEX addressIndex(address));";
- private static String CREATE_PLAYER_TABLE = "CREATE TABLE IF NOT EXISTS BungeeServers (id INT NOT NULL AUTO_INCREMENT, address VARCHAR(256), updated LONG, players INT, maxPlayers INT, ram INT, maxRam INT, PRIMARY KEY (id));";
-
- private static String RETRIEVE_SERVERS_PLAYERCOUNTS = "SELECT bos.address, players, maxPlayers, BungeeServers.updated, bos.lastOnline, BungeeServers.US, now() FROM BungeeServers INNER JOIN bungeeOnlineStatus AS bos ON bos.address = BungeeServers.address WHERE TIME_TO_SEC(TIMEDIFF(now(), BungeeServers.updated)) < 15;";
-
- public void initialize()
- {
- Connection connection = null;
- PreparedStatement preparedStatement = null;
-
- try
- {
- connection = DriverManager.getConnection(_connectionString, _userName, _password);
-
- // Create table
- preparedStatement = connection.prepareStatement(CREATE_ONLINE_TABLE);
- preparedStatement.execute();
-
- preparedStatement.close();
-
- preparedStatement = connection.prepareStatement(CREATE_PLAYER_TABLE);
- preparedStatement.execute();
- }
- catch (Exception exception)
- {
- exception.printStackTrace();
- }
- finally
- {
- if (preparedStatement != null)
- {
- try
- {
- preparedStatement.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
-
- if (connection != null)
- {
- try
- {
- connection.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
-
- public List getBungeeServers()
- {
- List bungeeServers = new ArrayList();
- Connection connection = null;
- PreparedStatement preparedStatement = null;
- ResultSet resultSet = null;
-
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
- try
- {
- connection = DriverManager.getConnection(_connectionString, _userName, _password);
-
- preparedStatement = connection.prepareStatement(RETRIEVE_SERVERS_PLAYERCOUNTS);
-
- resultSet = preparedStatement.executeQuery();
-
- while (resultSet.next())
- {
- long current = dateFormat.parse(resultSet.getString(7)).getTime();
- long updated = dateFormat.parse(resultSet.getString(4)).getTime();
- long lastOnline = dateFormat.parse(resultSet.getString(5)).getTime();
-
- if (current - updated <= 15000 && current - lastOnline <= 300000)
- {
- BungeeServer server = new BungeeServer();
- server.Address = resultSet.getString(1).split(":")[0];
- server.Players = resultSet.getInt(2);
- server.MaxPlayers = resultSet.getInt(3);
- server.US = resultSet.getBoolean(6);
-
- bungeeServers.add(server);
- }
- }
- }
- catch (Exception exception)
- {
- exception.printStackTrace();
- }
- finally
- {
- if (preparedStatement != null)
- {
- try
- {
- preparedStatement.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
-
- if (connection != null)
- {
- try
- {
- connection.close();
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- }
- }
- }
-
- return bungeeServers;
- }
-}
diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java
index 5cd4b495f..69da61d93 100644
--- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java
+++ b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeRotator.java
@@ -1,8 +1,10 @@
package mineplex.bungee;
+import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
@@ -18,10 +20,14 @@ import mineplex.bungee.api.ApiPostCall;
import mineplex.bungee.api.token.ARecord;
import mineplex.bungee.api.token.DnsRecord;
import mineplex.bungee.api.token.DomainRecords;
+import mineplex.serverdata.Region;
+import mineplex.serverdata.ServerManager;
+import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.BungeeServer;
public class BungeeRotator
{
- private static BungeeRepository _repository = null;
+ private static ServerRepository _repository = null;
private static SimpleDateFormat _dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
private static Logger _logger = Logger.getLogger("BungeeRotator");
@@ -56,7 +62,8 @@ public class BungeeRotator
e1.printStackTrace();
}
- _repository = new BungeeRepository();
+ Region region = !new File("eu.dat").exists() ? Region.US : Region.EU;
+ _repository = ServerManager.getServerRepository(region);
BungeeSorter bungeeSorter = new BungeeSorter();
int maxRecordCount = 10;
@@ -64,7 +71,7 @@ public class BungeeRotator
{
try
{
- List bungeeServers = _repository.getBungeeServers();
+ List bungeeServers = new ArrayList(_repository.getGlobalBungeeStatuses());
HashSet usServers = new HashSet();
HashSet euServers = new HashSet();
@@ -72,21 +79,21 @@ public class BungeeRotator
for (BungeeServer server : bungeeServers)
{
- if (usServers.size() < maxRecordCount && server.US)
+ if (usServers.size() < maxRecordCount && server.getRegion() == Region.US)
{
- if (usServers.size() >= 2 && server.Players > 900)
+ if (usServers.size() >= 2 && server.getPlayerCount() > 900)
continue;
- log("SELECTED " + server.Address + " " + (server.US ? "us" : "eu") + " " + server.Players + "/" + server.MaxPlayers);
- usServers.add(server.Address);
+ log("SELECTED " + server.getPublicAddress() + " " + (server.getRegion() == Region.US ? "us" : "eu") + " " + server.getPlayerCount() + "/" + server.getMaxPlayerCount());
+ usServers.add(server.getPublicAddress());
}
- else if (euServers.size() < maxRecordCount && !server.US)
+ else if (euServers.size() < maxRecordCount && server.getRegion() != Region.US)
{
- if (euServers.size() >= 2 && server.Players > 900)
+ if (euServers.size() >= 2 && server.getPlayerCount() > 900)
continue;
- log("SELECTED " + server.Address + " " + (server.US ? "us" : "eu") + " " + server.Players + "/" + server.MaxPlayers);
- euServers.add(server.Address);
+ log("SELECTED " + server.getPublicAddress() + " " + (server.getRegion() == Region.US ? "us" : "eu") + " " + server.getPlayerCount() + "/" + server.getMaxPlayerCount());
+ euServers.add(server.getPublicAddress());
}
}
diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeServer.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeServer.java
deleted file mode 100644
index dc56124f8..000000000
--- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeServer.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package mineplex.bungee;
-
-public class BungeeServer
-{
- public String Address;
- public int Players;
- public int MaxPlayers;
- public boolean US;
-}
diff --git a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeSorter.java b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeSorter.java
index c42f31f04..4bcdf55d7 100644
--- a/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeSorter.java
+++ b/Plugins/Mineplex.BungeeRotator/src/mineplex/bungee/BungeeSorter.java
@@ -2,14 +2,16 @@ package mineplex.bungee;
import java.util.Comparator;
+import mineplex.serverdata.data.BungeeServer;
+
public class BungeeSorter implements Comparator
{
public int compare(BungeeServer a, BungeeServer b)
{
- if (a.Players < b.Players)
+ if (a.getPlayerCount() < b.getPlayerCount())
return -1;
- if (b.Players < a.Players)
+ if (b.getPlayerCount() < a.getPlayerCount())
return 1;
return 0;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/DBPool.java b/Plugins/Mineplex.Core/src/mineplex/core/database/DBPool.java
index d7747d086..c60003b03 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/database/DBPool.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/database/DBPool.java
@@ -24,8 +24,8 @@ public final class DBPool
source.setUrl(url);
source.setUsername(username);
source.setPassword(password);
- source.setMaxTotal(3);
- source.setMaxIdle(3);
+ source.setMaxTotal(5);
+ source.setMaxIdle(5);
source.setTimeBetweenEvictionRunsMillis(180 * 1000);
source.setSoftMinEvictableIdleTimeMillis(180 * 1000);
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java
index e476b48c2..2ae1055a8 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java
@@ -16,8 +16,8 @@ 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 mineplex.serverdata.data.ServerGroup;
import mineplex.serverdata.transfers.ServerTransfer;
import mineplex.serverdata.transfers.TransferCommand;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java
index ca7477137..3808b59e2 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java
@@ -23,9 +23,9 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.recharge.Recharge;
import mineplex.serverdata.Region;
-import mineplex.serverdata.ServerGroup;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.ServerGroup;
public class PersonalServerManager extends MiniPlugin
{
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java
index 6ffb71e89..b575ae048 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java
@@ -23,11 +23,11 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTabTitle;
import mineplex.core.portal.Commands.SendCommand;
import mineplex.core.portal.Commands.ServerCommand;
-import mineplex.serverdata.MinecraftServer;
import mineplex.serverdata.Region;
import mineplex.serverdata.ServerCommandManager;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.MinecraftServer;
import mineplex.serverdata.transfers.ServerTransfer;
import mineplex.serverdata.transfers.TransferCommand;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java b/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java
index 2cfdaf6ba..f20166fc4 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/serverConfig/ServerConfiguration.java
@@ -14,8 +14,8 @@ import mineplex.core.MiniPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
import mineplex.serverdata.Region;
-import mineplex.serverdata.ServerGroup;
import mineplex.serverdata.ServerManager;
+import mineplex.serverdata.data.ServerGroup;
public class ServerConfiguration extends MiniPlugin
{
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/status/ServerStatusManager.java b/Plugins/Mineplex.Core/src/mineplex/core/status/ServerStatusManager.java
index e8dba0b5f..5a78732dc 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/status/ServerStatusManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/status/ServerStatusManager.java
@@ -14,13 +14,13 @@ import mineplex.core.common.util.Callback;
import mineplex.core.monitor.LagMeter;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-import mineplex.serverdata.MinecraftServer;
import mineplex.serverdata.Region;
import mineplex.serverdata.ServerCommandManager;
-import mineplex.serverdata.ServerGroup;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
import mineplex.serverdata.Utility;
+import mineplex.serverdata.data.MinecraftServer;
+import mineplex.serverdata.data.ServerGroup;
import mineplex.serverdata.transfers.SuicideCommand;
public class ServerStatusManager extends MiniPlugin
diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java
index 5b7aa65f4..597de1c2b 100644
--- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java
+++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java
@@ -57,8 +57,8 @@ import mineplex.hub.queue.ui.QueueShop;
import mineplex.hub.server.ui.LobbyShop;
import mineplex.hub.server.ui.QuickShop;
import mineplex.hub.server.ui.ServerNpcShop;
-import mineplex.serverdata.MinecraftServer;
-import mineplex.serverdata.ServerGroup;
+import mineplex.serverdata.data.MinecraftServer;
+import mineplex.serverdata.data.ServerGroup;
public class ServerManager extends MiniPlugin
{
diff --git a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java
index e7226c5c8..0d24ad671 100644
--- a/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java
+++ b/Plugins/Mineplex.Queuer/src/mineplex/queuer/QueueRepository.java
@@ -11,12 +11,12 @@ import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import mineplex.serverdata.ConnectionData;
import mineplex.serverdata.DataRepository;
-import mineplex.serverdata.MinecraftServer;
import mineplex.serverdata.RedisDataRepository;
import mineplex.serverdata.Region;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
import mineplex.serverdata.Utility;
+import mineplex.serverdata.data.MinecraftServer;
import mineplex.serverdata.transfers.ServerTransfer;
import mineplex.serverdata.transfers.TransferCommand;
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/DedicatedServerSorter.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/DedicatedServerSorter.java
index f6ef77ed6..3b8221407 100644
--- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/DedicatedServerSorter.java
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/DedicatedServerSorter.java
@@ -2,6 +2,8 @@ package mineplex.serverdata;
import java.util.Comparator;
+import mineplex.serverdata.data.DedicatedServer;
+
public class DedicatedServerSorter implements Comparator
{
@Override
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/RedisServerRepository.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/RedisServerRepository.java
index 87bd41db6..349677316 100644
--- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/RedisServerRepository.java
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/RedisServerRepository.java
@@ -9,9 +9,13 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import mineplex.serverdata.data.BungeeServer;
+import mineplex.serverdata.data.DedicatedServer;
+import mineplex.serverdata.data.MinecraftServer;
+import mineplex.serverdata.data.PlayerStatus;
+import mineplex.serverdata.data.ServerGroup;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
-import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
@@ -552,6 +556,311 @@ public class RedisServerRepository implements ServerRepository
return server;
}
+ @Override
+ public void updateBungeeStatus(BungeeServer serverData, int timeout)
+ {
+ Jedis jedis = _writePool.getResource();
+
+ try
+ {
+ String serializedData = Utility.serialize(serverData);
+ String serverName = serverData.getName();
+ String setKey = concatenate("bungeestatus", "minecraft", _region.toString());
+ String dataKey = concatenate(setKey, serverName);
+ long expiry = Utility.currentTimeSeconds() + timeout;
+
+ Transaction transaction = jedis.multi();
+ transaction.set(dataKey, serializedData);
+ transaction.zadd(setKey, expiry, serverName);
+ transaction.exec();
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _writePool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _writePool.returnResource(jedis);
+ }
+ }
+ }
+
+ @Override
+ public void removeBungeeStatus(BungeeServer serverData)
+ {
+ Jedis jedis = _writePool.getResource();
+
+ try
+ {
+ String serverName = serverData.getName();
+ String setKey = concatenate("bungeestatus", "minecraft", _region.toString());
+ String dataKey = concatenate(setKey, serverName);
+
+ Transaction transaction = jedis.multi();
+ transaction.del(dataKey);
+ transaction.zrem(setKey, serverName);
+ transaction.exec();
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _writePool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _writePool.returnResource(jedis);
+ }
+ }
+ }
+
+ @Override
+ public Collection getBungeeStatuses()
+ {
+ Collection servers = new HashSet();
+ Jedis jedis = _readPool.getResource();
+
+ try
+ {
+ String setKey = concatenate("bungeestatus", "minecraft", _region.toString());
+ Pipeline pipeline = jedis.pipelined();
+
+ List> responses = new ArrayList>();
+ for (String serverName : getActiveNames(setKey))
+ {
+ String dataKey = concatenate(setKey, serverName);
+ responses.add(pipeline.get(dataKey));
+ }
+
+ pipeline.sync();
+
+ for (Response response : responses)
+ {
+ String serializedData = response.get();
+ BungeeServer server = Utility.deserialize(serializedData, BungeeServer.class);
+
+ if (server != null)
+ {
+ servers.add(server);
+ }
+ }
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _readPool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _readPool.returnResource(jedis);
+ }
+ }
+
+ return servers;
+ }
+
+ @Override
+ public void updatePlayerStatus(PlayerStatus serverData, int timeout)
+ {
+ Jedis jedis = _writePool.getResource();
+
+ try
+ {
+ String serializedData = Utility.serialize(serverData);
+ String serverName = serverData.getName();
+ String setKey = concatenate("playerstatus", "minecraft", _region.toString());
+ String dataKey = concatenate(setKey, serverName);
+ long expiry = Utility.currentTimeSeconds() + timeout;
+
+ Transaction transaction = jedis.multi();
+ transaction.set(dataKey, serializedData);
+ transaction.zadd(setKey, expiry, serverName);
+ transaction.exec();
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _writePool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _writePool.returnResource(jedis);
+ }
+ }
+ }
+
+ @Override
+ public void removePlayerStatus(PlayerStatus serverData)
+ {
+ Jedis jedis = _writePool.getResource();
+
+ try
+ {
+ String serverName = serverData.getName();
+ String setKey = concatenate("playerstatus", "minecraft", _region.toString());
+ String dataKey = concatenate(setKey, serverName);
+
+ Transaction transaction = jedis.multi();
+ transaction.del(dataKey);
+ transaction.zrem(setKey, serverName);
+ transaction.exec();
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _writePool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _writePool.returnResource(jedis);
+ }
+ }
+ }
+
+ @Override
+ public PlayerStatus getPlayerStatus(String playerName)
+ {
+ PlayerStatus status = null;
+ Jedis jedis = _readPool.getResource();
+
+ try
+ {
+ String setKey = concatenate("playerstatus", "minecraft", _region.toString());
+ String dataKey = concatenate(setKey, playerName);
+ String serializedData = jedis.get(dataKey);
+ status = Utility.deserialize(serializedData, PlayerStatus.class);
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _readPool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _readPool.returnResource(jedis);
+ }
+ }
+
+ return status;
+ }
+
+ @Override
+ public Collection getPlayerStatuses()
+ {
+ Collection servers = new HashSet();
+ Jedis jedis = _readPool.getResource();
+
+ try
+ {
+ String setKey = concatenate("playerstatus", "minecraft", _region.toString());
+ Pipeline pipeline = jedis.pipelined();
+
+ List> responses = new ArrayList>();
+ for (String serverName : getActiveNames(setKey))
+ {
+ String dataKey = concatenate(setKey, serverName);
+ responses.add(pipeline.get(dataKey));
+ }
+
+ pipeline.sync();
+
+ for (Response response : responses)
+ {
+ String serializedData = response.get();
+ PlayerStatus server = Utility.deserialize(serializedData, PlayerStatus.class);
+
+ if (server != null)
+ {
+ servers.add(server);
+ }
+ }
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _readPool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _readPool.returnResource(jedis);
+ }
+ }
+
+ return servers;
+ }
+
+ @Override
+ public Collection getGlobalBungeeStatuses()
+ {
+ Collection servers = new HashSet();
+ Jedis jedis = _readPool.getResource();
+
+ try
+ {
+ for (Region region : Region.values())
+ {
+ String setKey = concatenate("bungeestatus", "minecraft", region.toString());
+ Pipeline pipeline = jedis.pipelined();
+
+ List> responses = new ArrayList>();
+ for (String serverName : getActiveNames(setKey))
+ {
+ String dataKey = concatenate(setKey, serverName);
+ responses.add(pipeline.get(dataKey));
+ }
+
+ pipeline.sync();
+
+ for (Response response : responses)
+ {
+ String serializedData = response.get();
+ BungeeServer server = Utility.deserialize(serializedData, BungeeServer.class);
+ server.setRegion(region);
+ if (server != null)
+ {
+ servers.add(server);
+ }
+ }
+ }
+ }
+ catch (JedisConnectionException exception)
+ {
+ exception.printStackTrace();
+ _readPool.returnBrokenResource(jedis);
+ jedis = null;
+ }
+ finally
+ {
+ if (jedis != null)
+ {
+ _readPool.returnResource(jedis);
+ }
+ }
+
+ return servers;
+ }
+
/*
* = "US" or "EU"
* serverstatus.minecraft.. stores the JSON encoded information of an active MinecraftServer instance.
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/ServerRepository.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/ServerRepository.java
index 1c2bd5146..8e9ba831e 100644
--- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/ServerRepository.java
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/ServerRepository.java
@@ -1,6 +1,13 @@
package mineplex.serverdata;
import java.util.Collection;
+import java.util.List;
+
+import mineplex.serverdata.data.BungeeServer;
+import mineplex.serverdata.data.DedicatedServer;
+import mineplex.serverdata.data.MinecraftServer;
+import mineplex.serverdata.data.PlayerStatus;
+import mineplex.serverdata.data.ServerGroup;
/**
* The ServerRepository is used for storing/retrieving active sessions
@@ -46,6 +53,14 @@ public interface ServerRepository
*/
public void removeServerStatus(MinecraftServer serverData);
+ public void updateBungeeStatus(BungeeServer serverData, int timeout);
+ public void removeBungeeStatus(BungeeServer serverData);
+ public Collection getBungeeStatuses();
+
+ public void updatePlayerStatus(PlayerStatus serverData, int timeout);
+ public void removePlayerStatus(PlayerStatus serverData);
+ public Collection getPlayerStatuses();
+
/**
* @param serverName - the name of the server whose existence is being checked.
* @return true, if there exists an active {@link MinecraftServer} session with a
@@ -73,4 +88,8 @@ public interface ServerRepository
public void removeServerGroup(ServerGroup serverGroup);
+ PlayerStatus getPlayerStatus(String playerName);
+
+ public Collection getGlobalBungeeStatuses();
+
}
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/BungeeServer.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/BungeeServer.java
new file mode 100644
index 000000000..fdd403ed7
--- /dev/null
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/BungeeServer.java
@@ -0,0 +1,77 @@
+package mineplex.serverdata.data;
+
+import mineplex.serverdata.Region;
+
+public class BungeeServer
+{
+ // The name of this server.
+ private String _name;
+ public String getName() { return _name; }
+
+ private Region _region;
+ public Region getRegion() { return _region; }
+
+ // The number of players currently online.
+ private int _playerCount;
+ public int getPlayerCount() { return _playerCount; }
+ public void incrementPlayerCount(int amount) { this._playerCount += amount; }
+
+ // The maximum number of players allowed on the server.
+ private int _maxPlayerCount;
+ public int getMaxPlayerCount() { return _maxPlayerCount; }
+
+ // The current amount of RAM allocated to the server.
+ private int _ram;
+ public int getRam() { return _ram; }
+
+ // The maximum amount of available RAM that can be allocated to the server.
+ private int _maxRam;
+ public int getMaxRam() { return _maxRam; }
+
+ // The public I.P address used by players to connect to the server.
+ private String _publicAddress;
+ public String getPublicAddress() { return _publicAddress; }
+
+ // The port the server is currently running/listening on.
+ private int _port;
+ public int getPort() { return _port; }
+
+ /**
+ * Class constructor
+ * @param name
+ * @param publicAddress
+ * @param port
+ * @param playerCount
+ * @param maxPlayerCount
+ * @param ram
+ * @param maxRam
+ */
+ public BungeeServer(String name, String publicAddress, int port,
+ int playerCount, int maxPlayerCount, int ram, int maxRam)
+ {
+ _name = name;
+ _playerCount = playerCount;
+ _maxPlayerCount = maxPlayerCount;
+ _ram = ram;
+ _maxRam = maxRam;
+ _publicAddress = publicAddress;
+ _port = port;
+ }
+
+ /**
+ * @return true, if {@value _playerCount} equals 0, false otherwise.
+ */
+ public boolean isEmpty()
+ {
+ return _playerCount == 0;
+ }
+
+ public void setName(String name)
+ {
+ _name = name;
+ }
+ public void setRegion(Region region)
+ {
+ _region = region;
+ }
+}
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/DedicatedServer.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/DedicatedServer.java
new file mode 100644
index 000000000..59191a7f4
--- /dev/null
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/DedicatedServer.java
@@ -0,0 +1,111 @@
+package mineplex.serverdata.data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import mineplex.serverdata.Region;
+
+public class DedicatedServer
+{
+
+ // The default amount of available CPU usage.
+ public static final int DEFAULT_CPU = 32;
+
+ // The default amount of available ram usage.
+ public static final int DEFAULT_RAM = 14000;
+
+ // The unique name representing this server
+ private String _name;
+ public String getName() { return _name; }
+
+ // The public I.P address used to connect to this server
+ private String _publicAddress;
+ public String getPublicAddress() { return _publicAddress; }
+
+ // The private I.P address of this server
+ private String _privateAddress;
+ public String getPrivateAddress() { return _privateAddress; }
+
+ // The geographical region that this dedicated server is located in
+ private Region _region;
+ public Region getRegion() { return _region; }
+ public boolean isUsRegion() { return _region == Region.US; }
+
+ // The amount of available CPU usage on this server box.
+ private int _availableCpu;
+ public int getAvailableCpu() { return _availableCpu; }
+
+ // The amount of available ram usage on this server box.
+ private int _availableRam;
+ public int getAvailableRam() { return _availableRam; }
+
+ // The amount of available CPU usage on this server box.
+ private int _maxCpu;
+ public int getMaxCpu() { return _maxCpu; }
+
+ // The amount of available ram usage on this server box.
+ private int _maxRam;
+ public int getMaxRam() { return _maxRam; }
+
+ // A mapping of server group names (Key) to the number of server instances (Value)
+ private Map _serverCounts;
+
+ /**
+ * Class constructor
+ * @param data - the set of serialized data values representing
+ * the internal state of this DedicatedServer.
+ */
+ public DedicatedServer(Map data)
+ {
+ _name = data.get("name");
+ _publicAddress = data.get("publicAddress");
+ _privateAddress = data.get("privateAddress");
+ _region = Region.valueOf(data.get("region").toUpperCase());
+ _availableCpu = Integer.valueOf(data.get("cpu"));
+ _availableRam = Integer.valueOf(data.get("ram"));
+ _maxCpu = Integer.valueOf(data.get("cpu"));
+ _maxRam = Integer.valueOf(data.get("ram"));
+ _serverCounts = new HashMap();
+ }
+
+ /**
+ * Set the number of {@link MinecraftServer} instances on this server
+ * for a specific {@link ServerGroup} type.
+ * @param serverGroup - the {@link ServerGroup} whose server instance count is being set.
+ * @param serverCount - the number of {@link MinecraftServer} instances active on this server.
+ */
+ public void setServerCount(ServerGroup serverGroup, int serverCount)
+ {
+ if (_serverCounts.containsKey(serverGroup.getName()))
+ {
+ int currentAmount = _serverCounts.get(serverGroup.getName());
+ _availableCpu += serverGroup.getRequiredCpu() * currentAmount;
+ _availableRam += serverGroup.getRequiredRam() * currentAmount;
+ }
+
+ _serverCounts.put(serverGroup.getName(), serverCount);
+ _availableCpu -= serverGroup.getRequiredCpu() * serverCount;
+ _availableRam -= serverGroup.getRequiredRam() * serverCount;
+ }
+
+ /**
+ * @param serverGroup - the server group whose server count on this dedicated server is being fetched.
+ * @return the number of active {@link MinecraftServer}s on this dedicated server
+ * that belong to {@code serverGroup}.
+ */
+ public int getServerCount(ServerGroup serverGroup)
+ {
+ String groupName = serverGroup.getName();
+ return _serverCounts.containsKey(groupName) ? _serverCounts.get(groupName) : 0;
+ }
+
+ /**
+ * Increment the number of {@link MinecraftServer} instances on this server
+ * for a specific {@link ServerGroup} type by 1.
+ * @param serverGroup - the {@link ServerGroup} whose server instance count is being incremented
+ */
+ public void incrementServerCount(ServerGroup serverGroup)
+ {
+ setServerCount(serverGroup, getServerCount(serverGroup) + 1);
+ }
+}
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/MinecraftServer.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/MinecraftServer.java
similarity index 98%
rename from Plugins/Mineplex.ServerData/src/mineplex/serverdata/MinecraftServer.java
rename to Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/MinecraftServer.java
index 1bc052f88..b1aaf1c97 100644
--- a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/MinecraftServer.java
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/MinecraftServer.java
@@ -1,4 +1,4 @@
-package mineplex.serverdata;
+package mineplex.serverdata.data;
public class MinecraftServer
{
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/PlayerStatus.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/PlayerStatus.java
new file mode 100644
index 000000000..ff438a3b4
--- /dev/null
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/PlayerStatus.java
@@ -0,0 +1,23 @@
+package mineplex.serverdata.data;
+
+public class PlayerStatus
+{
+ // The name of this server.
+ private String _name;
+ public String getName() { return _name; }
+
+ // The current message of the day (MOTD) of the server.
+ private String _server;
+ public String getServer() { return _server; }
+
+ /**
+ * Class constructor
+ * @param name
+ * @param server
+ */
+ public PlayerStatus(String name, String server)
+ {
+ _name = name;
+ _server = server;
+ }
+}
diff --git a/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/ServerGroup.java b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/ServerGroup.java
new file mode 100644
index 000000000..d2081d667
--- /dev/null
+++ b/Plugins/Mineplex.ServerData/src/mineplex/serverdata/data/ServerGroup.java
@@ -0,0 +1,353 @@
+package mineplex.serverdata.data;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import mineplex.serverdata.Region;
+
+public class ServerGroup
+{
+ private HashMap _dataMap = null;
+
+ private String _name;
+ private String _host;
+ private String _prefix;
+
+ private int _minPlayers;
+ private int _maxPlayers;
+
+ private int _requiredRam;
+ private int _requiredCpu;
+ private int _requiredTotalServers;
+ private int _requiredJoinableServers;
+
+ private boolean _arcadeGroup;
+ private String _worldZip;
+ private String _plugin;
+ private String _configPath;
+ private int _portSection;
+
+ private boolean _pvp;
+ private boolean _tournament;
+ private boolean _tournamentPoints;
+ private boolean _teamRejoin;
+ private boolean _teamAutoJoin;
+ private boolean _teamForceBalance;
+
+ private boolean _gameAutoStart;
+ private boolean _gameTimeout;
+ private boolean _rewardGems;
+ private boolean _rewardItems;
+
+ private boolean _rewardStats;
+ private boolean _rewardAchievements;
+ private boolean _hotbarInventory;
+ private boolean _hotbarHubClock;
+ private boolean _playerKickIdle;
+ private boolean _generateFreeVersions;
+
+ private String _games;
+ private String _serverType;
+ private boolean _addNoCheat;
+ private boolean _whitelist;
+ private boolean _staffOnly;
+ private String _resourcePack = "";
+
+ private Region _region;
+
+ private Set _servers;
+
+ public ServerGroup(Map data, Collection serverStatuses)
+ {
+ _name = data.get("name");
+ _prefix = data.get("prefix");
+ _requiredRam = Integer.valueOf(data.get("ram"));
+ _requiredCpu = Integer.valueOf(data.get("cpu"));
+ _requiredTotalServers = Integer.valueOf(data.get("totalServers"));
+ _requiredJoinableServers = Integer.valueOf(data.get("joinableServers"));
+ _portSection = Integer.valueOf(data.get("portSection"));
+ _arcadeGroup = Boolean.valueOf(data.get("arcadeGroup"));
+ _worldZip = data.get("worldZip");
+ _plugin = data.get("plugin");
+ _configPath = data.get("configPath");
+ _minPlayers = Integer.valueOf(data.get("minPlayers"));
+ _maxPlayers = Integer.valueOf(data.get("maxPlayers"));
+ _pvp = Boolean.valueOf(data.get("pvp"));
+ _tournament = Boolean.valueOf(data.get("tournament"));
+ _tournamentPoints = Boolean.valueOf(data.get("tournamentPoints"));
+ _generateFreeVersions = Boolean.valueOf(data.get("generateFreeVersions"));
+ _games = data.get("games");
+ _serverType = data.get("serverType");
+ _addNoCheat = Boolean.valueOf(data.get("addNoCheat"));
+ _teamRejoin = Boolean.valueOf(data.get("teamRejoin"));
+ _teamAutoJoin = Boolean.valueOf(data.get("teamAutoJoin"));
+ _teamForceBalance = Boolean.valueOf(data.get("teamForceBalance"));
+ _gameAutoStart = Boolean.valueOf(data.get("gameAutoStart"));
+ _gameTimeout = Boolean.valueOf(data.get("gameTimeout"));
+ _rewardGems = Boolean.valueOf(data.get("rewardGems"));
+ _rewardItems = Boolean.valueOf(data.get("rewardItems"));
+ _rewardStats = Boolean.valueOf(data.get("rewardStats"));
+ _rewardAchievements = Boolean.valueOf(data.get("rewardAchievements"));
+ _hotbarInventory = Boolean.valueOf(data.get("hotbarInventory"));
+ _hotbarHubClock = Boolean.valueOf(data.get("hotbarHubClock"));
+ _playerKickIdle = Boolean.valueOf(data.get("playerKickIdle"));
+ _staffOnly = Boolean.valueOf(data.get("staffOnly"));
+ _whitelist = Boolean.valueOf(data.get("whitelist"));
+ _resourcePack = data.containsKey("resourcePack") ? data.get("resourcePack") : "";
+ _host = data.get("host");
+ _region = data.containsKey("region") ? Region.valueOf(data.get("region")) : Region.ALL;
+
+ if (serverStatuses != null)
+ parseServers(serverStatuses);
+ }
+
+ public ServerGroup(String name, String prefix, String host, int ram, int cpu, int totalServers, int joinable, int portSection, boolean arcade, String worldZip, String plugin, String configPath
+ , int minPlayers, int maxPlayers, boolean pvp, boolean tournament, boolean tournamentPoints, String games, String serverType, boolean noCheat, boolean teamRejoin
+ , boolean teamAutoJoin, boolean teamForceBalance, boolean gameAutoStart, boolean gameTimeout, boolean rewardGems, boolean rewardItems, boolean rewardStats
+ , boolean rewardAchievements, boolean hotbarInventory, boolean hotbarHubClock, boolean playerKickIdle, boolean staffOnly, boolean whitelist, String resourcePack, Region region)
+ {
+ _name = name;
+ _prefix = prefix;
+ _host = host;
+ _requiredRam = ram;
+ _requiredCpu = cpu;
+ _requiredTotalServers = totalServers;
+ _requiredJoinableServers = joinable;
+ _portSection = portSection;
+ _arcadeGroup = arcade;
+ _worldZip = worldZip;
+ _plugin = plugin;
+ _configPath = configPath;
+ _minPlayers = minPlayers;
+ _maxPlayers = maxPlayers;
+ _pvp = pvp;
+ _tournament = tournament;
+ _tournamentPoints = tournamentPoints;
+ _games = games;
+ _serverType = serverType;
+ _addNoCheat = noCheat;
+ _teamRejoin = teamRejoin;
+ _teamAutoJoin = teamAutoJoin;
+ _teamForceBalance = teamForceBalance;
+ _gameAutoStart = gameAutoStart;
+ _gameTimeout = gameTimeout;
+ _rewardGems = rewardGems;
+ _rewardItems = rewardItems;
+ _rewardStats = rewardStats;
+ _rewardAchievements = rewardAchievements;
+ _hotbarInventory = hotbarInventory;
+ _hotbarHubClock = hotbarHubClock;
+ _playerKickIdle = playerKickIdle;
+ _staffOnly = staffOnly;
+ _whitelist = whitelist;
+ _resourcePack = resourcePack;
+ _region = region;
+ }
+
+ public String getName() { return _name; }
+ public String getHost() { return _host; }
+ public String getPrefix() { return _prefix; }
+
+ public int getMinPlayers() { return _minPlayers; }
+ public int getMaxPlayers() { return _maxPlayers; }
+
+ public int getRequiredRam() { return _requiredRam; }
+ public int getRequiredCpu() { return _requiredCpu; }
+ public int getRequiredTotalServers() { return _requiredTotalServers; }
+ public int getRequiredJoinableServers() { return _requiredJoinableServers; }
+ public int getPortSection() { return _portSection; }
+
+ public boolean getArcadeGroup() { return _arcadeGroup; }
+ public String getWorldZip() { return _worldZip; }
+ public String getPlugin() { return _plugin; }
+ public String getConfigPath() { return _configPath; }
+
+ public boolean getPvp() { return _pvp; }
+ public boolean getTournament() { return _tournament; }
+ public boolean getTournamentPoints() { return _tournamentPoints; }
+ public boolean getTeamRejoin() { return _teamRejoin; }
+ public boolean getTeamAutoJoin() { return _teamAutoJoin; }
+
+ public boolean getTeamForceBalance() { return _teamForceBalance; }
+ public boolean getGameAutoStart() { return _gameAutoStart; }
+ public boolean getGameTimeout() { return _gameTimeout; }
+ public boolean getRewardGems() { return _rewardGems; }
+ public boolean getRewardItems() { return _rewardItems; }
+
+ public boolean getRewardStats() { return _rewardStats; }
+ public boolean getRewardAchievements() { return _rewardAchievements; }
+ public boolean getHotbarInventory() { return _hotbarInventory; }
+ public boolean getHotbarHubClock() { return _hotbarHubClock; }
+ public boolean getPlayerKickIdle() { return _playerKickIdle; }
+ public boolean getGenerateFreeVersions() { return _generateFreeVersions; }
+
+ public String getGames() { return _games; }
+ public String getServerType() { return _serverType; }
+ public boolean getAddNoCheat() { return _addNoCheat; }
+ public boolean getWhitelist() { return _whitelist; }
+ public boolean getStaffOnly() { return _staffOnly; }
+ public String getResourcePack() { return _resourcePack; }
+ public Region getRegion() { return _region; }
+
+ public Set getServers() { return _servers; }
+
+ public int getServerCount()
+ {
+ return _servers.size();
+ }
+
+ public int getJoinableCount()
+ {
+ int joinable = 0;
+
+ for (MinecraftServer server : _servers)
+ {
+ if (server.isJoinable())
+ {
+ joinable++;
+ }
+ }
+
+ return joinable;
+ }
+
+ public int getPlayerCount()
+ {
+ int playerCount = 0;
+
+ for (MinecraftServer server : _servers)
+ {
+ playerCount += server.getPlayerCount();
+ }
+
+ return playerCount;
+ }
+
+ public int getMaxPlayerCount()
+ {
+ int maxPlayerCount = 0;
+
+ for (MinecraftServer server : _servers)
+ {
+ maxPlayerCount += server.getMaxPlayerCount();
+ }
+
+ return maxPlayerCount;
+ }
+
+ public Collection getEmptyServers()
+ {
+ Collection emptyServers = new HashSet();
+
+ for (MinecraftServer server : _servers)
+ {
+ if (server.isEmpty() && server.getUptime() >= 150) // Only return empty servers that have been online for >150 seconds
+ {
+ emptyServers.add(server);
+ }
+ }
+
+ return emptyServers;
+ }
+
+ private void parseServers(Collection servers)
+ {
+ _servers = new HashSet();
+
+ for (MinecraftServer server : servers)
+ {
+ if (_name.equalsIgnoreCase(server.getGroup()))
+ {
+ _servers.add(server);
+ }
+ }
+ }
+
+ public int generateUniqueId(int startId)
+ {
+ int id = startId;
+
+ while (true)
+ {
+ boolean uniqueId = true;
+
+ for (MinecraftServer server : _servers)
+ {
+ String serverName = server.getName();
+ try
+ {
+ int serverNum = Integer.parseInt(serverName.split("-")[1]);
+
+ if (serverNum == id)
+ {
+ uniqueId = false;
+ break;
+ }
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace();
+ }
+ }
+
+ if (uniqueId)
+ {
+ return id;
+ }
+ else
+ {
+ id++;
+ }
+ }
+ }
+
+ public HashMap getDataMap()
+ {
+ if (_dataMap == null)
+ {
+ _dataMap = new HashMap();
+
+ _dataMap.put("name", _name);
+ _dataMap.put("prefix", _prefix);
+ _dataMap.put("ram", _requiredRam + "");
+ _dataMap.put("cpu", _requiredCpu + "");
+ _dataMap.put("totalServers", _requiredTotalServers + "");
+ _dataMap.put("joinableServers", _requiredJoinableServers + "");
+ _dataMap.put("portSection", _portSection + "");
+ _dataMap.put("arcadeGroup", _arcadeGroup + "");
+ _dataMap.put("worldZip", _worldZip);
+ _dataMap.put("plugin", _plugin);
+ _dataMap.put("configPath", _configPath);
+ _dataMap.put("minPlayers", _minPlayers + "");
+ _dataMap.put("maxPlayers", _maxPlayers + "");
+ _dataMap.put("pvp", _pvp + "");
+ _dataMap.put("tournament", _tournament + "");
+ _dataMap.put("tournamentPoints", _tournamentPoints + "");
+ _dataMap.put("games", _games);
+ _dataMap.put("serverType", _serverType);
+ _dataMap.put("addNoCheat", _addNoCheat + "");
+ _dataMap.put("teamRejoin", _teamRejoin + "");
+ _dataMap.put("teamAutoJoin", _teamAutoJoin + "");
+ _dataMap.put("teamForceBalance", _teamForceBalance + "");
+ _dataMap.put("gameAutoStart", _gameAutoStart + "");
+ _dataMap.put("gameTimeout", _gameTimeout + "");
+ _dataMap.put("rewardGems", _rewardGems + "");
+ _dataMap.put("rewardItems", _rewardItems + "");
+ _dataMap.put("rewardStats", _rewardStats + "");
+ _dataMap.put("rewardAchievements", _rewardAchievements + "");
+ _dataMap.put("hotbarInventory", _hotbarInventory + "");
+ _dataMap.put("hotbarHubClock", _hotbarHubClock + "");
+ _dataMap.put("playerKickIdle", _playerKickIdle + "");
+ _dataMap.put("staffOnly", _staffOnly + "");
+ _dataMap.put("whitelist", _whitelist + "");
+ _dataMap.put("resourcePack", _resourcePack);
+ _dataMap.put("host", _host);
+ _dataMap.put("region", _region.name());
+ }
+
+ return _dataMap;
+ }
+}
diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java
index b5be2bbb8..17e9837f1 100644
--- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java
+++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java
@@ -20,13 +20,13 @@ import java.util.logging.FileHandler;
import java.util.logging.Logger;
import mineplex.core.common.util.NautHashMap;
-import mineplex.serverdata.DedicatedServer;
import mineplex.serverdata.DedicatedServerSorter;
-import mineplex.serverdata.MinecraftServer;
import mineplex.serverdata.Region;
-import mineplex.serverdata.ServerGroup;
import mineplex.serverdata.ServerManager;
import mineplex.serverdata.ServerRepository;
+import mineplex.serverdata.data.DedicatedServer;
+import mineplex.serverdata.data.MinecraftServer;
+import mineplex.serverdata.data.ServerGroup;
import mineplex.serverdata.transfers.RestartCommand;
import mineplex.serverdata.transfers.SuicideCommand;
@@ -54,6 +54,18 @@ public class ServerMonitor
public static void main (String args[])
{
+ /*
+ MinecraftPingReply data = null;
+ try
+ {
+ data = new MinecraftPing().getPing(new MinecraftPingOptions().setHostname("127.0.0.1").setPort(25565));
+ }
+ catch (IOException e2)
+ {
+ e2.printStackTrace();
+ }
+ System.out.println(data.getDescription() + " " + data.getPlayers().getOnline());
+ */
_region = !new File("eu.dat").exists() ? Region.US : Region.EU;
_debug = new File("debug.dat").exists();
_repository = ServerManager.getServerRepository(_region); // Fetches and connects to server repo
diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerSorter.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerSorter.java
index 9f07a6127..06ea39063 100644
--- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerSorter.java
+++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerSorter.java
@@ -2,7 +2,7 @@ package mineplex.servermonitor;
import java.util.Comparator;
-import mineplex.serverdata.MinecraftServer;
+import mineplex.serverdata.data.MinecraftServer;
public class ServerSorter implements Comparator
{
diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java
index 8917d302a..49d625531 100644
--- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java
+++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java
@@ -9,9 +9,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import mineplex.serverdata.DedicatedServer;
import mineplex.serverdata.Region;
-import mineplex.serverdata.ServerGroup;
+import mineplex.serverdata.data.DedicatedServer;
+import mineplex.serverdata.data.ServerGroup;
import mineplex.servermonitor.data.BungeeStatusData;
public class StatusHistoryRepository