diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index 8eba27eb1..8cab61a15 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -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), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java index 9d1c4c3b0..156f18867 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClient.java @@ -61,6 +61,9 @@ public class CoreClient public Rank GetRank() { + if (_rank == null) + _rank = Rank.ALL; + return _rank; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java index efb8646a9..9fbd04fc0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java @@ -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()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gui/pages/LoadingWindow.java b/Plugins/Mineplex.Core/src/mineplex/core/gui/pages/LoadingWindow.java index 6398b4e6b..b14d00d41 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gui/pages/LoadingWindow.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gui/pages/LoadingWindow.java @@ -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() { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java index 0460b145a..9b7f921a5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java @@ -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 _monitoring = new HashSet(); 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() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java index 60420cf11..d5097e318 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java @@ -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!"); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java index a95bcb150..0983baf8c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java @@ -228,8 +228,14 @@ public class PetManager extends MiniClientPlugin 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()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/PreferencesPage.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/PreferencesPage.java index 981f2c56b..8007a3aef 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/PreferencesPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/PreferencesPage.java @@ -243,7 +243,7 @@ public class PreferencesPage extends ShopPageBase } } + @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 // 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() { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java index 98543aad2..2b92728ff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/stats/StatsRepository.java @@ -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 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(); + } + } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 6dffb4a38..3186c0011 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -866,7 +866,7 @@ public class HubManager extends MiniClientPlugin 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 @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); } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ForcefieldManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ForcefieldManager.java index ca48a3484..c52990ac1 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ForcefieldManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ForcefieldManager.java @@ -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()) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java index ab3b37f02..1d55d9f03 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java @@ -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; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java index ed43ae6d2..2f8a774d4 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java @@ -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 diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java index 5008cf505..8729a6e55 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/WorldManager.java @@ -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) diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java index 511f30d41..ca9557402 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java @@ -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 _serverGroupMap = null; private static List _dedicatedServers = null; private static HashSet _deadServers = new HashSet(); + private static HashSet _delayedKill = new HashSet(); private static HashSet _laggyServers = new HashSet(); 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 serverMap = new NautHashMap(); for (Iterator 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 onlineServers = new HashSet(); @@ -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() + { + 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() + { + 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() + { + 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) diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java index e2f94098c..a85d42848 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/StatusHistoryRepository.java @@ -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 _repository; public StatusHistoryRepository() { @@ -65,6 +67,9 @@ public class StatusHistoryRepository preparedStatement = _connection.prepareStatement(CREATE_NETWORKSTATS_TABLE); preparedStatement.execute(); preparedStatement.close(); + + _repository = new RedisDataRepository(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 bungeeStatuses = new ArrayList(); - PreparedStatement retrieveStatement = null; + List bungeeServers = new ArrayList(_repository.getElements()); - try + for (Iterator 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 } } } - */ } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 30871a8e7..036793db1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -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 _youtube = new HashSet(); + + //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; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java new file mode 100644 index 000000000..fbb89b22d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/RequiredRankCommand.java @@ -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 +{ + + 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.")); + } + } + +}