Merge branch 'master' of http://184.154.0.242:7990/scm/min/mineplex into EventGameUpdates

This commit is contained in:
Sarah 2015-09-12 21:17:45 +02:00
commit b6ffee73f5
20 changed files with 484 additions and 161 deletions

View File

@ -8,6 +8,7 @@ import mineplex.core.common.util.UtilPlayer;
public enum Rank
{
//Staff
LT("LT", ChatColor.DARK_RED),
OWNER("Owner", ChatColor.DARK_RED),
DEVELOPER("Dev", ChatColor.RED),
@ -21,11 +22,13 @@ public enum Rank
MEDIA("Media", ChatColor.BLUE),
EVENT("Event", ChatColor.WHITE),
//Staff ^^
//Media
YOUTUBE("YouTube", ChatColor.RED),
YOUTUBE_SMALL("MooTube", ChatColor.DARK_PURPLE),
TWITCH("Twitch", ChatColor.DARK_PURPLE),
//Player
LEGEND("Legend", ChatColor.GREEN, true),
HERO("Hero", ChatColor.LIGHT_PURPLE, true),
ULTRA("Ultra", ChatColor.AQUA, true),

View File

@ -61,6 +61,9 @@ public class CoreClient
public Rank GetRank()
{
if (_rank == null)
_rank = Rank.ALL;
return _rank;
}

View File

@ -125,7 +125,6 @@ public class CoreClientManager extends MiniPlugin
if (client == null)
{
client = new CoreClient(name);
client.SetRank(Rank.ALL);
}
return client;
@ -305,7 +304,7 @@ public class CoreClientManager extends MiniPlugin
TimingManager.stop(client.GetPlayerName() + " GetClient.");
token = gson.fromJson(response, ClientToken.class);
client.SetRank(Rank.valueOf(token.Rank));
// _repository.updateMysqlRank(uuid.toString(), token.Rank, token.RankPerm, new Timestamp(Date.parse(token.RankExpire)).toString());

View File

@ -151,21 +151,47 @@ public class LoadingWindow implements Runnable, Listener {
{
Player player = Bukkit.getPlayer(_playersUUID);
if (player == null || _inv == null ? !player.getOpenInventory().equals(_currentInventory) : (_inv != null && !player.getOpenInventory().getTopInventory().equals(_inv))) {
end();
return;
}
if (_inv == null) {
_inv = Bukkit.createInventory(null, _size, _title);
try
{
if (player == null || player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null || _inv == null ? !player.getOpenInventory().equals(_currentInventory) : (!player.getOpenInventory().getTopInventory().equals(_inv)))
{
end();
return;
}
setBackGround();
setLoadingBarItems();
UtilPlayer.swapToInventory(player, _inv);
Bukkit.getPluginManager().registerEvents(this, _plugin);
} else
setLoadingBarItems();
_ticker++;
if (_inv == null)
{
_inv = Bukkit.createInventory(null, _size, _title);
setBackGround();
setLoadingBarItems();
UtilPlayer.swapToInventory(player, _inv);
Bukkit.getPluginManager().registerEvents(this, _plugin);
}
else
setLoadingBarItems();
}
catch (Exception exception)
{
try
{
System.out.println("player ? " + (player == null));
System.out.println("player.getOpenInventory() ? " + (player.getOpenInventory() == null));
System.out.println("player.getOpenInventory().getTopInventory() ? " + (player.getOpenInventory().getTopInventory() == null));
System.out.println("_inv ? " + (_inv == null));
exception.printStackTrace();
}
catch (Exception exception2)
{
exception.printStackTrace();
}
end();
}
finally
{
_ticker++;
}
}
public void end() {

View File

@ -9,7 +9,9 @@ import mineplex.core.common.util.F;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -25,9 +27,14 @@ public class LagMeter extends MiniPlugin
private double _ticksPerSecond;
private double _ticksPerSecondAverage;
private long _lastAverage;
private long _start;
private long _lastTick = 0;
private boolean _timingsRunning;
private boolean _timingsPasted;
private long _timingsStarted;
private HashSet<Player> _monitoring = new HashSet<Player>();
public LagMeter(JavaPlugin plugin, CoreClientManager clientManager)
@ -37,6 +44,8 @@ public class LagMeter extends MiniPlugin
_clientManager = clientManager;
_lastRun = System.currentTimeMillis();
_lastAverage = System.currentTimeMillis();
_start = System.currentTimeMillis();
}
@EventHandler
@ -87,6 +96,24 @@ public class LagMeter extends MiniPlugin
_lastRun = now;
_count++;
if (System.currentTimeMillis() - _start > 60000)
{
if (_timingsRunning)
{
if (_ticksPerSecond > 15 || System.currentTimeMillis() - _timingsStarted > 60000)
{
getPlugin().getServer().dispatchCommand(Bukkit.getConsoleSender(), "timings paste");
_timingsRunning = false;
}
}
else if (_ticksPerSecond < 10)
{
_timingsRunning = true;
_timingsStarted = System.currentTimeMillis();
getPlugin().getServer().dispatchCommand(Bukkit.getConsoleSender(), "timings on");
}
}
}
public double getTicksPerSecond()

View File

@ -22,12 +22,12 @@ public class NotificationManager extends MiniPlugin
private CoreClientManager _clientManager;
private String _summerLine =
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" +
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" +
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" +
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" +
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" +
C.cYellow + "" + C.cGold + "" + C.cYellow + "" + C.cGold + "" + C.cYellow + "";
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" +
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" +
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" +
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" +
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" +
C.cYellow + "" + C.cBlack + "" + C.cYellow + "" + C.cBlack + "" + C.cYellow + "";
public NotificationManager(JavaPlugin plugin, CoreClientManager client)
{
@ -45,8 +45,8 @@ public class NotificationManager extends MiniPlugin
// if (event.getType() == UpdateType.MIN_08)
// hugeSale();
// if (event.getType() == UpdateType.MIN_16)
// sale();
if (event.getType() == UpdateType.MIN_16)
sale();
}
private void sale()
@ -60,15 +60,15 @@ public class NotificationManager extends MiniPlugin
if (rank == Rank.ALL)
{
UtilPlayer.message(player, C.cWhite + "Summer Sale! " + " Purchase " + C.cAqua + C.Bold + "Ultra RANK" + C.cWhite + " for $15");
UtilPlayer.message(player, C.cWhite + "50% Off Sale! " + " Purchase " + C.cAqua + C.Bold + "Ultra Rank" + C.cWhite + " for $15");
}
else if (rank == Rank.ULTRA)
{
UtilPlayer.message(player, C.cWhite + "Summer Sale! " + " Upgrade to " + C.cPurple + C.Bold + "HERO RANK" + C.cWhite + " for $15!");
UtilPlayer.message(player, C.cWhite + "50% Off Sale! " + " Upgrade to " + C.cPurple + C.Bold + "Hero Rank" + C.cWhite + " for $15!");
}
else if (rank == Rank.HERO)
{
UtilPlayer.message(player, C.cWhite + "Summer Sale! " + "Upgrade to " + C.cGreen + C.Bold + "LEGEND RANK" + C.cWhite + " for $15!");
UtilPlayer.message(player, C.cWhite + "50% Off Sale! " + "Upgrade to " + C.cGreen + C.Bold + "Legend Rank" + C.cWhite + " for $15!");
}
UtilPlayer.message(player, C.cWhite + " Visit " + F.link("www.mineplex.com/shop") + " for 50% Off Ranks!");

View File

@ -228,8 +228,14 @@ public class PetManager extends MiniClientPlugin<PetClient>
if (_activePetOwners.containsKey(player.getName()))
{
final Creature pet = _activePetOwners.get(player.getName());
//Wither Silverfish
if (pet.getPassenger() != null)
pet.getPassenger().remove();
pet.remove();
if (removeOwner)
{
_activePetOwners.remove(player.getName());

View File

@ -243,7 +243,7 @@ public class PreferencesPage extends ShopPageBase<PreferencesManager, Preference
UserPreferences userPreferences = getPlugin().Get(getPlayer());
int index = 9;
buildPreference(index, Material.FIREBALL, "Hub Stacker", userPreferences.HubGames, _toggleHubGames);
buildPreference(index, Material.FIREBALL, "Hub Player Stacker", userPreferences.HubGames, _toggleHubGames);
index += 2;
buildPreference(index, Material.EYE_OF_ENDER, "Hub Player Visibility", userPreferences.ShowPlayers, _toggleHubPlayers);
index += 2;

View File

@ -10,6 +10,8 @@ public class PlayerStats
public long addStat(String statName, long value)
{
value = Math.max(0L, value);
if (!_statHash.containsKey(statName))
{
_statHash.put(statName, 0L);

View File

@ -1,23 +1,16 @@
package mineplex.core.stats;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import net.minecraft.server.v1_7_R4.EntityHuman;
import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftHumanEntity;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClient;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilServer;
import mineplex.core.stats.command.GiveStatCommand;
@ -60,6 +53,33 @@ public class StatsManager extends MiniDbClientPlugin<PlayerStats>
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event)
{
PlayerStats playerStats = Get(event.getPlayer());
final int accountId = getClientManager().getAccountId(event.getPlayer());
for (String statName : playerStats.getStatsNames())
{
if (!_stats.containsKey(statName))
continue;
final int statId = _stats.get(statName);
if (playerStats.getStat(statName) == -1)
{
runAsync(new Runnable()
{
public void run()
{
_repository.setStat(accountId, statId, 0);
}
});
}
}
}
public void incrementStat(final Player player, final String statName, final long value)
{
if (value <= 0)
@ -73,7 +93,7 @@ public class StatsManager extends MiniDbClientPlugin<PlayerStats>
// Verify stat is in our local cache, if not add it remotely.
if (!_stats.containsKey(statName))
{
Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), new Runnable()
runAsync(new Runnable()
{
public void run()
{

View File

@ -26,9 +26,6 @@ import org.jooq.types.ULong;
public class StatsRepository extends RepositoryBase
{
private static String CREATE_STAT_TABLE = "CREATE TABLE IF NOT EXISTS stats (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), PRIMARY KEY (id), UNIQUE INDEX nameIndex (name));";
private static String CREATE_STAT_RELATION_TABLE = "CREATE TABLE IF NOT EXISTS accountStats (id INT NOT NULL AUTO_INCREMENT, accountId INT NOT NULL, statId INT NOT NULL, value INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (accountId) REFERENCES accounts(id), FOREIGN KEY (statId) REFERENCES stats(id), UNIQUE INDEX accountStatIndex (accountId, statId));";
private static String RETRIEVE_STATS = "SELECT id, name FROM stats;";
private static String INSERT_STAT = "INSERT INTO stats (name) VALUES (?);";
@ -38,16 +35,10 @@ public class StatsRepository extends RepositoryBase
}
@Override
protected void initialize()
{
//executeUpdate(CREATE_STAT_TABLE);
//executeUpdate(CREATE_STAT_RELATION_TABLE);
}
protected void initialize() { }
@Override
protected void update()
{
}
protected void update() { }
public List<Stat> retrieveStats()
{
@ -165,9 +156,36 @@ public class StatsRepository extends RepositoryBase
while (resultSet.next())
{
playerStats.addStat(resultSet.getString(1), resultSet.getLong(2));
try
{
playerStats.addStat(resultSet.getString(1), resultSet.getLong(2));
}
catch (Exception ex)
{
ex.printStackTrace();
playerStats.addStat(resultSet.getString(1), -1);
}
}
return playerStats;
}
public void setStat(int accountId, int statId, long value)
{
try
{
DSLContext context = DSL.using(getConnectionPool(), SQLDialect.MYSQL);
context
.update(Tables.accountStat)
.set(Tables.accountStat.value, ULong.valueOf(value))
.where(Tables.accountStat.accountId.eq(accountId))
.and(Tables.accountStat.statId.eq(statId))
.execute();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View File

@ -866,7 +866,7 @@ public class HubManager extends MiniClientPlugin<HubClient>
return UtilTime.elapsed(_portalTime.get(player.getName()), 5000);
}
public boolean CanBump(LivingEntity ent)
public boolean hasPlayerStackingEnabled(LivingEntity ent)
{
if (!(ent instanceof Player))
return true;
@ -906,7 +906,7 @@ public class HubManager extends MiniClientPlugin<HubClient>
@EventHandler
public void ignoreVelocity(PlayerVelocityEvent event)
{
if (_clientManager.Get(event.getPlayer()).GetRank().has(Rank.MODERATOR) && _preferences.Get(event.getPlayer()).IgnoreVelocity)
if (_clientManager.Get(event.getPlayer()).GetRank().has(Rank.TWITCH) && _preferences.Get(event.getPlayer()).IgnoreVelocity)
{
event.setCancelled(true);
}

View File

@ -42,7 +42,7 @@ public class ForcefieldManager extends MiniPlugin
for (Player player : UtilServer.getPlayers())
{
if (Manager.getPreferences().Get(player).HubForcefield && (Manager.GetClients().Get(player).GetRank().has(Rank.ADMIN) || Manager.GetClients().Get(player).GetRank() == Rank.JNR_DEV))
if (Manager.getPreferences().Get(player).HubForcefield && (Manager.GetClients().Get(player).GetRank().has(Rank.ADMIN) || Manager.GetClients().Get(player).GetRank() == Rank.JNR_DEV || Manager.GetClients().Get(player).GetRank() == Rank.YOUTUBE || Manager.GetClients().Get(player).GetRank() == Rank.TWITCH))
{
for (Player other : UtilServer.getPlayers())
{

View File

@ -83,8 +83,9 @@ public class SoccerManager extends MiniPlugin
private Vector _ballVel;
private long _ballDeadTime = -1;
private String _lastKicker = "";
private Color _lastKick = null;
private String _lastRedKicker = "";
private String _lastBlueKicker = "";
private Color _lastKickColor = null;
//Item Rebound
protected Vector _vel;
@ -176,7 +177,7 @@ public class SoccerManager extends MiniPlugin
if (_ball == null)
return;
if (_lastKick == Color.AQUA)
if (_lastKickColor == Color.AQUA)
{
for (int i = 0 ; i < 3 ; i++)
UtilParticle.PlayParticle(ParticleType.RED_DUST, _ball.getLocation().add(0.0, 0.5, 0.0), -1, 1, 1, 1, 0,
@ -213,13 +214,22 @@ public class SoccerManager extends MiniPlugin
UtilAction.zeroVelocity(player);
_lastKick = getTeamColor(player);
if (_lastKick == null)
_lastKicker = player.getName();
else if (_lastKick == Color.RED)
_lastKicker = C.cRed + player.getName();
else if (_lastKick == Color.AQUA)
_lastKicker = C.cAqua + player.getName();
_lastKickColor = getTeamColor(player);
if (_lastKickColor == Color.RED)
{
_lastRedKicker = C.cRed + player.getName();
if (_lastBlueKicker.length() == 0)
_lastBlueKicker = C.cRed + player.getName();
}
else if (_lastKickColor == Color.AQUA)
{
_lastBlueKicker = C.cAqua + player.getName();
if (_lastRedKicker.length() == 0)
_lastRedKicker = C.cRed + player.getName();
}
}
}
}
@ -239,14 +249,15 @@ public class SoccerManager extends MiniPlugin
for (Player player : _active)
UtilTextMiddle.display("Goal! (" + C.cRed + _redGoals + C.cWhite + " : " + C.cBlue + _blueGoals + C.cWhite + ")",
_lastKicker + C.cWhite + " scored for " + C.cAqua + "Blue Team", 0, 70, 20, player);
_lastBlueKicker + C.cWhite + " scored for " + C.cAqua + "Blue Team", 0, 70, 20, player);
_ball.remove();
_ball = null;
_lastRedKicker = "";
_lastBlueKicker = "";
}
return;
}
@ -264,10 +275,13 @@ public class SoccerManager extends MiniPlugin
for (Player player : _active)
UtilTextMiddle.display("Goal! (" + C.cRed + _redGoals + C.cWhite + " : " + C.cBlue + _blueGoals + C.cWhite + ")",
_lastKicker + C.cWhite + " scored for " + C.cRed + "Red Team", 0, 70, 20, player);
_lastRedKicker + C.cWhite + " scored for " + C.cRed + "Red Team", 0, 70, 20, player);
_ball.remove();
_ball = null;
_lastRedKicker = "";
_lastBlueKicker = "";
}
return;

View File

@ -95,12 +95,6 @@ public class StackerManager extends MiniPlugin implements IThrown
return;
}
if (!Manager.CanBump(stacker))
{
UtilPlayer.message(stacker, F.main("Stacker", "You are not playing stacker."));
return;
}
if (stacker.getVehicle() != null || _tempStackShift.contains(stacker))
{
UtilPlayer.message(stacker, F.main("Stacker", "You cannot stack while stacked..."));
@ -123,9 +117,15 @@ public class StackerManager extends MiniPlugin implements IThrown
if (stackee instanceof Player)
{
if (!Manager.CanBump(((Player)stackee)))
if (!Manager.hasPlayerStackingEnabled(stacker))
{
UtilPlayer.message(stacker, F.main("Stacker", F.name(UtilEnt.getName(stackee)) + " is not playing stacker."));
UtilPlayer.message(stacker, F.main("Stacker", "You have player stacking disabled."));
return;
}
if (!Manager.hasPlayerStackingEnabled(((Player)stackee)))
{
UtilPlayer.message(stacker, F.main("Stacker", F.name(UtilEnt.getName(stackee)) + " has player stacking disabled."));
return;
}
@ -242,7 +242,7 @@ public class StackerManager extends MiniPlugin implements IThrown
if (target.getCustomName() != null || (target.getPassenger() != null && target.getPassenger() instanceof LivingEntity && ((LivingEntity)target.getPassenger()).getCustomName() != null))
return;
if (!Manager.CanBump(target))
if (!Manager.hasPlayerStackingEnabled(target))
return;
//Velocity

View File

@ -31,6 +31,7 @@ import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Pig;
import org.bukkit.entity.Player;
import org.bukkit.entity.Silverfish;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.entity.Snowman;
@ -44,6 +45,7 @@ import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityTargetEvent;
@ -162,6 +164,12 @@ public class WorldManager extends MiniPlugin
{
event.setCancelled(true);
}
@EventHandler
public void BlockEntityChange(EntityChangeBlockEvent event)
{
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOWEST)
public void Explosion(EntityExplodeEvent event)

View File

@ -16,6 +16,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
@ -42,10 +44,12 @@ public class ServerMonitor
private static Map<String, ServerGroup> _serverGroupMap = null;
private static List<DedicatedServer> _dedicatedServers = null;
private static HashSet<String> _deadServers = new HashSet<String>();
private static HashSet<String> _delayedKill = new HashSet<String>();
private static HashSet<String> _laggyServers = new HashSet<String>();
private static SimpleDateFormat _dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
private static Logger _logger = Logger.getLogger("ServerMonitor");
private static Timer _timer = new Timer();
private static int _totalPlayers = 0;
private static Region _region;
@ -124,12 +128,15 @@ public class ServerMonitor
for (MinecraftServer minecraftServer : _serverStatuses)
{
if (minecraftServer.getMotd().contains("Finished") || (minecraftServer.getGroup().equalsIgnoreCase("UltraHardcore") && minecraftServer.getMotd().contains("Restarting") && minecraftServer.getPlayerCount() == 0))
if (!ignoreServer(minecraftServer.getGroup()))
{
killServer(minecraftServer.getName(), minecraftServer.getPublicAddress(), minecraftServer.getPlayerCount(), "[KILLED] [FINISHED] " + minecraftServer.getName() + ":" + minecraftServer.getPublicAddress(), true);
handleUserServerGroup(_serverGroupMap.get(minecraftServer.getGroup()));
continue;
if (minecraftServer.getMotd().contains("Finished") || (minecraftServer.getGroup().equalsIgnoreCase("UltraHardcore") && minecraftServer.getMotd().contains("Restarting") && minecraftServer.getPlayerCount() == 0))
{
killServer(minecraftServer.getName(), minecraftServer.getPublicAddress(), minecraftServer.getPlayerCount(), "[KILLED] [FINISHED] " + minecraftServer.getName() + ":" + minecraftServer.getPublicAddress(), true);
handleUserServerGroup(_serverGroupMap.get(minecraftServer.getGroup()));
continue;
}
}
for (DedicatedServer server : _dedicatedServers)
@ -202,6 +209,9 @@ public class ServerMonitor
for (ServerGroup groupStatus : _serverGroups)
{
if (ignoreServer(groupStatus.getName()))
continue;
NautHashMap<Integer, MinecraftServer> serverMap = new NautHashMap<Integer, MinecraftServer>();
for (Iterator<MinecraftServer> serverIterator = groupStatus.getServers().iterator(); serverIterator.hasNext();)
@ -226,17 +236,6 @@ public class ServerMonitor
exception.printStackTrace();
}
}
/*
if (groupStatus.getHost() == null || groupStatus.getHost().isEmpty())
{
if (groupStatus.getName().startsWith("0"))
{
int serverCount = groupStatus.getServers().size();
log(groupStatus.getName() + " : " + groupStatus.getPlayerCount() + " players on " + serverCount + " servers " + String.format("%.2f", ((double)serverCount * (double)groupStatus.getRequiredCpu() / totalCPU)) + "% CPU," + String.format("%.2f", ((double)serverCount * (double)groupStatus.getRequiredRam() / totalRAM)) + "% RAM", false);
}
}
*/
}
HashSet<String> onlineServers = new HashSet<String>();
@ -386,21 +385,35 @@ public class ServerMonitor
deadServers.addAll(_deadServers);
_deadServers.clear();
for (MinecraftServer deadServer : _repository.getDeadServers())
for (final MinecraftServer deadServer : _repository.getDeadServers())
{
if (deadServer.getUptime() <= 10 || ignoreServer(deadServer.getGroup()))
continue;
if (_count == 0 || deadServers.contains(deadServer.getName()))
{
copyServerLog(deadServer);
killServer(deadServer.getName(), deadServer.getPublicAddress(), deadServer.getPlayerCount(), "[KILLED] [DEAD] " + deadServer.getName() + ":" + deadServer.getPublicAddress(), true);
handleUserServerGroup(_serverGroupMap.get(deadServer.getGroup()));
}
else
{
_deadServers.add(deadServer.getName());
log("[IMPENDING DEATH] : " + deadServer.getName() + ":" + deadServer.getPublicAddress());
else if (!_delayedKill.contains(deadServer.getName()))
{
startTimingReport(deadServer);
_timer.schedule(new TimerTask()
{
public void run()
{
_deadServers.add(deadServer.getName());
_delayedKill.remove(deadServer.getName());
stopTimingReport(deadServer);
log("[IMPENDING DEATH] : " + deadServer.getName() + ":" + deadServer.getPublicAddress());
}
}, 20 * 1000);
_delayedKill.add(deadServer.getName());
}
}
}
@ -653,6 +666,105 @@ public class ServerMonitor
killServer(serverToKill.getName(), serverToKill.getPublicAddress(), serverToKill.getPlayerCount(), message, true);
}
private static void startTimingReport(final MinecraftServer server)
{
if (_debug)
return;
String cmd = "/home/mineplex/remoteStartTiming.sh";
ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, server.getPublicAddress(), server.getName() });
pr.start(new GenericRunnable<Boolean>()
{
public void run(Boolean error)
{
if (error)
log("[TIMING START] Errored " + server.getName() + "(" + server.getPublicAddress() + ")");
else
log("[TIMING START] Succeeded " + server.getName() + "(" + server.getPublicAddress() + ")");
}
});
try
{
pr.join(100);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
if (!pr.isDone())
_processes.add(pr);
}
private static void stopTimingReport(final MinecraftServer server)
{
if (_debug)
return;
String cmd = "/home/mineplex/remoteStopTiming.sh";
ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, server.getPublicAddress(), server.getName() });
pr.start(new GenericRunnable<Boolean>()
{
public void run(Boolean error)
{
if (error)
log("[TIMING PASTE] Errored " + server.getName() + "(" + server.getPublicAddress() + ")");
else
log("[TIMING PASTE] Succeeded " + server.getName() + "(" + server.getPublicAddress() + ")");
}
});
try
{
pr.join(100);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
if (!pr.isDone())
_processes.add(pr);
}
private static void copyServerLog(final MinecraftServer server)
{
if (_debug)
return;
String cmd = "/home/mineplex/easyRemoteCopyLog.sh";
ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, server.getPublicAddress(), server.getName() });
pr.start(new GenericRunnable<Boolean>()
{
public void run(Boolean error)
{
if (error)
log("[COPY LOG] Errored " + server.getName() + "(" + server.getPublicAddress() + ")");
else
log("[COPY LOG] Succeeded " + server.getName() + "(" + server.getPublicAddress() + ")");
}
});
try
{
pr.join(100);
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
if (!pr.isDone())
_processes.add(pr);
}
private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final int serverNum, final boolean free)
{
if (_debug)

View File

@ -3,16 +3,19 @@ package mineplex.servermonitor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import mineplex.serverdata.Region;
import mineplex.serverdata.data.BungeeServer;
import mineplex.serverdata.data.DataRepository;
import mineplex.serverdata.data.DedicatedServer;
import mineplex.serverdata.data.ServerGroup;
import mineplex.servermonitor.data.BungeeStatusData;
import mineplex.serverdata.redis.RedisDataRepository;
import mineplex.serverdata.servers.ServerManager;
public class StatusHistoryRepository
{
@ -24,8 +27,6 @@ public class StatusHistoryRepository
private static String CREATE_DEDICATED_TABLE = "CREATE TABLE IF NOT EXISTS DedicatedServerStats (id INT NOT NULL AUTO_INCREMENT, serverName VARCHAR(100), address VARCHAR(25), updated LONG, cpu TINYINT, ram MEDIUMINT, usedCpuPercent DOUBLE(4,2), usedRamPercent DOUBLE(4,2), US BOOLEAN NOT NULL DEFAULT '1', PRIMARY KEY (id));";
private static String CREATE_BUNGEE_TABLE = "CREATE TABLE IF NOT EXISTS BungeeStats (id INT NOT NULL AUTO_INCREMENT, address VARCHAR(25), updated LONG, players INT, maxPlayers INT, alive BOOLEAN NOT NULL, online BOOLEAN NOT NULL, US BOOLEAN NOT NULL DEFAULT '1', PRIMARY KEY (id));";
private static String CREATE_NETWORKSTATS_TABLE = "CREATE TABLE IF NOT EXISTS NetworkStats (id INT NOT NULL AUTO_INCREMENT, updated LONG, players INT, totalNetworkCpuUsage DOUBLE(4,2), totalNetworkRamUsage DOUBLE(4,2), totalCpu MEDIUMINT, totalRam MEDIUMINT, US BOOLEAN NOT NULL DEFAULT '1', PRIMARY KEY (id));";
private static String RETRIEVE_BUNGEE_STATUSES = "SELECT bungeeStatus.address, bungeeStatus.players, bungeeStatus.maxPlayers, bungeeStatus.US, onlineStatus.online, now(), bungeeStatus.updated FROM BungeeServers AS bungeeStatus INNER JOIN bungeeOnlineStatus AS onlineStatus ON onlineStatus.address = bungeeStatus.address";
private static String INSERT_SERVERGROUP_STATS = "INSERT INTO ServerGroupStats (serverGroup, updated, players, maxPlayers, totalNetworkCpuUsage, totalNetworkRamUsage, totalCpu, totalRam, US) VALUES (?, now(), ?, ?, ?, ?, ?, ?, ?);";
private static String INSERT_DEDICATEDSERVER_STATS = "INSERT INTO DedicatedServerStats (serverName, address, updated, cpu, ram, usedCpuPercent, usedRamPercent, US) VALUES (?, ?, now(), ?, ?, ?, ?, ?);";
@ -33,7 +34,8 @@ public class StatusHistoryRepository
private static String INSERT_NETWORK_STATS = "INSERT INTO NetworkStats (updated, players, totalNetworkCpuUsage, totalNetworkRamUsage, totalCpu, totalRam, US) VALUES (now(), ?, ?, ?, ?, ?, ?);";
private static Connection _connection;
private static Connection _bungeeconnection;
private static DataRepository<BungeeServer> _repository;
public StatusHistoryRepository()
{
@ -65,6 +67,9 @@ public class StatusHistoryRepository
preparedStatement = _connection.prepareStatement(CREATE_NETWORKSTATS_TABLE);
preparedStatement.execute();
preparedStatement.close();
_repository = new RedisDataRepository<BungeeServer>(ServerManager.getConnection(true, ServerManager.SERVER_STATUS_LABEL), ServerManager.getConnection(false, ServerManager.SERVER_STATUS_LABEL),
Region.ALL, BungeeServer.class, "bungeeServers");
}
catch (Exception exception)
{
@ -185,58 +190,16 @@ public class StatusHistoryRepository
public void saveNetworkStats(double usedCpuPercent, double usedRamPercent, double availableCPU, double availableRAM, Region region)
{
/*
int totalPlayers = 0;
List<BungeeStatusData> bungeeStatuses = new ArrayList<BungeeStatusData>();
PreparedStatement retrieveStatement = null;
List<BungeeServer> bungeeServers = new ArrayList<BungeeServer>(_repository.getElements());
try
for (Iterator<BungeeServer> bungeeIterator = bungeeServers.iterator(); bungeeIterator.hasNext();)
{
if (_bungeeconnection == null || _bungeeconnection.isClosed())
_bungeeconnection = DriverManager.getConnection(_bungeeConnectionString, _userName, _password);
BungeeServer server = bungeeIterator.next();
retrieveStatement = _bungeeconnection.prepareStatement(RETRIEVE_BUNGEE_STATUSES);
ResultSet resultSet = retrieveStatement.executeQuery();
while (resultSet.next())
{
BungeeStatusData bungeeData = new BungeeStatusData();
bungeeData.Address = resultSet.getString(1);
bungeeData.Players = resultSet.getInt(2);
bungeeData.MaxPlayers = resultSet.getInt(3);
bungeeData.US = resultSet.getBoolean(4);
bungeeData.Online = resultSet.getBoolean(5);
long now = resultSet.getLong(6);
long updated = resultSet.getLong(7);
bungeeData.Alive = (now - updated) <= 15;
if (bungeeData.Alive && bungeeData.US == (region == Region.US))
totalPlayers += bungeeData.Players;
if (bungeeData.US == (region == Region.US))
bungeeStatuses.add(bungeeData);
}
}
catch (Exception exception)
{
exception.printStackTrace();
}
finally
{
if (retrieveStatement != null)
{
try
{
retrieveStatement.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
if (server.getPublicAddress().equalsIgnoreCase("127.0.0.1") || server.getPublicAddress().equalsIgnoreCase("0.0.0.0"))
bungeeIterator.remove();
}
PreparedStatement preparedStatement = null;
@ -248,15 +211,16 @@ public class StatusHistoryRepository
preparedStatement = _connection.prepareStatement(INSERT_BUNGEE_STATS);
for (BungeeStatusData bungeeStatusData : bungeeStatuses)
for (BungeeServer bungeeStatusData : bungeeServers)
{
preparedStatement.setString(1, bungeeStatusData.Address);
preparedStatement.setInt(2, bungeeStatusData.Players);
preparedStatement.setInt(3, bungeeStatusData.MaxPlayers);
preparedStatement.setBoolean(4, bungeeStatusData.Alive);
preparedStatement.setBoolean(5, bungeeStatusData.Online);
preparedStatement.setBoolean(6, bungeeStatusData.US);
preparedStatement.addBatch();
totalPlayers += bungeeStatusData.getPlayerCount();
preparedStatement.setString(1, bungeeStatusData.getPublicAddress());
preparedStatement.setInt(2, bungeeStatusData.getPlayerCount());
preparedStatement.setInt(3, bungeeStatusData.getPlayerCount());
preparedStatement.setBoolean(4, true);
preparedStatement.setBoolean(5, true);
preparedStatement.setBoolean(6, bungeeStatusData.getRegion() == Region.US);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
@ -315,6 +279,5 @@ public class StatusHistoryRepository
}
}
}
*/
}
}

View File

@ -111,6 +111,7 @@ import nautilus.game.arcade.addons.TeamArmorAddon;
import nautilus.game.arcade.addons.compass.CompassAddon;
import nautilus.game.arcade.command.DisguiseCommand;
import nautilus.game.arcade.command.GameCommand;
import nautilus.game.arcade.command.RequiredRankCommand;
import nautilus.game.arcade.command.WriteCommand;
import nautilus.game.arcade.command.KitUnlockCommand;
import nautilus.game.arcade.events.GameStateChangeEvent;
@ -210,6 +211,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation
//Youtuber Kits
private HashSet<Player> _youtube = new HashSet<Player>();
//Server Property
private Rank _requiredRank;
public ArcadeManager(Arcade plugin, ServerStatusManager serverStatusManager, GameServerConfig serverConfig,
CoreClientManager clientManager, DonationManager donationManager, DamageManager damageManager,
@ -414,6 +418,8 @@ public class ArcadeManager extends MiniPlugin implements IRelation
});
getPacketHandler().addPacketHandler(_resourcePacketHandler);
loadRequiredRank();
}
@Override
@ -423,6 +429,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
addCommand(new WriteCommand(this));
addCommand(new KitUnlockCommand(this));
addCommand(new DisguiseCommand(this));
addCommand(new RequiredRankCommand(this));
}
public GameServerConfig GetServerConfig()
@ -785,6 +792,34 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
if (Bukkit.getServer().hasWhitelist())
{
if(_requiredRank != null)
{
if (_clientManager.Get(event.getPlayer().getName()).GetRank().has(event.getPlayer(), _requiredRank, false))
{
event.allow();
event.setResult(PlayerLoginEvent.Result.ALLOWED);
if (_serverConfig.Tournament && _clientManager.Get(event.getPlayer().getName()).GetRank().has(event.getPlayer(), Rank.MODERATOR, false))
{
event.getPlayer().setOp(true);
}
}
else
{
for (OfflinePlayer player : Bukkit.getWhitelistedPlayers())
{
if (player.getName().equalsIgnoreCase(event.getPlayer().getName()))
{
event.allow();
event.setResult(PlayerLoginEvent.Result.ALLOWED);
return;
}
}
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Required Rank for this server: " + _requiredRank.getColor() + _requiredRank.Name);
return;
}
}
if (_clientManager.Get(event.getPlayer().getName()).GetRank().has(event.getPlayer(), Rank.MODERATOR, false))
{
event.allow();
@ -1490,4 +1525,38 @@ public class ArcadeManager extends MiniPlugin implements IRelation
}
}
}
public void loadRequiredRank()
{
_requiredRank = null;
for(File file : new File(".").listFiles())
{
if(!file.getName().startsWith("RequiredRank"))
continue;
try
{
_requiredRank = Rank.valueOf(file.getName().split("=")[1]);
System.out.println("set required rank to " + _requiredRank.Name);
}
catch (IllegalArgumentException e)
{
System.out.println("===============================");
System.out.println("Wrong required rank definition.");
System.out.println("[" + file.getName().split("=")[1] + "] Does not exist!");
System.out.println("===============================");
}
}
}
public Rank getRequiredRank()
{
return _requiredRank;
}
public void setRequiredRank(Rank rank)
{
_requiredRank = rank;
}
}

View File

@ -0,0 +1,53 @@
package nautilus.game.arcade.command;
import org.bukkit.entity.Player;
import nautilus.game.arcade.ArcadeManager;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
public class RequiredRankCommand extends CommandBase<ArcadeManager>
{
private ArcadeManager _manager;
public RequiredRankCommand(ArcadeManager plugin)
{
super(plugin, Rank.DEVELOPER, new Rank[]{Rank.JNR_DEV}, "Requiredrank");
_manager = plugin;
}
@Override
public void Execute(Player caller, String[] args)
{
if(!_manager.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"))
{
UtilPlayer.message(caller, F.main("Command", "This is not a test server.."));
return;
}
if(args.length == 0)
{
UtilPlayer.message(caller, F.main("Command", "Invalid rank input."));
return;
}
if(args[0].equalsIgnoreCase("Reset"))
{
_manager.setRequiredRank(null);
UtilPlayer.message(caller, F.main("Command", "You reset the required rank to null."));
return;
}
try
{
Rank rank = Rank.valueOf(args[0]);
_manager.setRequiredRank(rank);
UtilPlayer.message(caller, F.main("Command", "You set the required rank to: " + rank.getColor() + rank.Name));
}
catch (IllegalArgumentException e)
{
UtilPlayer.message(caller, F.main("Command", "Invalid rank input."));
}
}
}