From d73ffcccfd56737e09841e7c9c2dd8aff0580cb9 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Mon, 18 Aug 2014 15:46:23 -0400 Subject: [PATCH 1/5] Added performance logging in ServerMonitor Added date tracking for gem/coin/account transactions in preparation for Customer Support server. --- .../donation/repository/token/DonorToken.java | 1 + .../repository/token/TransactionToken.java | 9 + .../mineplex/ddos/DDoSProtectionSwitcher.java | 6 +- .../mineplex/ddos/DnsMadeEasyRepository.java | 8 +- .../mineplex/servermonitor/ServerMonitor.java | 25 +- Website/LOC.Core/LOC.Core.csproj | 1 + .../Model/Sales/AccountTransaction.cs | 2 + .../LOC.Core/Model/Sales/CoinTransaction.cs | 2 + .../LOC.Core/Model/Sales/GemTransaction.cs | 2 + .../Tokens/Client/AccountTransactionToken.cs | 26 ++ Website/LOC.Core/Tokens/Client/ClientToken.cs | 2 + Website/LOC.Core/Tokens/Client/DonorToken.cs | 1 + .../Models/AccountAdministrator.cs | 7 +- .../LOC.Website.Web.Publish.xml | 442 +++++++++--------- Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 15 files changed, 294 insertions(+), 240 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/TransactionToken.java create mode 100644 Website/LOC.Core/Tokens/Client/AccountTransactionToken.cs diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/DonorToken.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/DonorToken.java index 15888736a..8eec45471 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/DonorToken.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/DonorToken.java @@ -8,5 +8,6 @@ public class DonorToken public boolean Donated; public List SalesPackages; public List UnknownSalesPackages; + public List Transactions; public int Coins; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/TransactionToken.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/TransactionToken.java new file mode 100644 index 000000000..de01b62ef --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/repository/token/TransactionToken.java @@ -0,0 +1,9 @@ +package mineplex.core.donation.repository.token; + +public class TransactionToken +{ + public long Date; + public String SalesPackageName; + public int Gems; + public int Coins; +} diff --git a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java index af5042bc5..fd22fa8fa 100644 --- a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java +++ b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DDoSProtectionSwitcher.java @@ -45,8 +45,8 @@ public class DDoSProtectionSwitcher _repository = new DnsMadeEasyRepository(); DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); - while (true) - { + //while (true) + //{ if (_repository.switchToDDOSProt()) { System.out.println("Starting DDoS Protection Switch at " + dateFormat.format(new Date())); @@ -203,7 +203,7 @@ public class DDoSProtectionSwitcher { e.printStackTrace(); } - } + //} /* * // Switch off ddos protection for (DnsRecord record : records.data) { * if (record.type.equalsIgnoreCase("CNAME")) { if diff --git a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DnsMadeEasyRepository.java b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DnsMadeEasyRepository.java index f3d0edc77..2563df862 100644 --- a/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DnsMadeEasyRepository.java +++ b/Plugins/Mineplex.DDoSProtectionSwitcher/src/mineplex/ddos/DnsMadeEasyRepository.java @@ -9,7 +9,8 @@ import java.text.SimpleDateFormat; public class DnsMadeEasyRepository { - private String _connectionString = "jdbc:mysql://db.mineplex.com:3306/BungeeServers?autoReconnect=true&failOverReadOnly=false&maxReconnects=10"; + // Yip Yip actual IP because if null route happens we can't resolve the HOSTNAME DERP FACE DEFEK7!!! -defek7 + private String _connectionString = "jdbc:mysql://10.35.74.133:3306/BungeeServers?autoReconnect=true&failOverReadOnly=false&maxReconnects=10"; private String _userName = "root"; private String _password = "tAbechAk3wR7tuTh"; @@ -119,6 +120,9 @@ public class DnsMadeEasyRepository } } - return countOffline >= 20; + //if (countOffline > 5) + System.out.println(countOffline + " offline bungees."); + + return true; } } diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java index e15d4f4b1..6d9a2918f 100644 --- a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ServerMonitor.java @@ -76,7 +76,7 @@ public class ServerMonitor for (MinecraftServer deadServer : _repository.getDeadServers()) { - killServer(deadServer.getName(), deadServer.getPublicAddress(), true); + killServer(deadServer.getName(), deadServer.getPublicAddress(), "[KILLED] [DEAD] " + deadServer.getName() + ":" + deadServer.getPublicAddress(), true); } List dedicatedServers = new ArrayList(_repository.getDedicatedServers()); @@ -139,11 +139,9 @@ public class ServerMonitor iterator.remove(); else if (System.currentTimeMillis() - entry.getValue().getValue() > 20000) { - System.out.println("-=[SERVER STARTUP TOO SLOW]=- " + entry.getKey()); - String serverName = entry.getKey(); String serverAddress = entry.getValue().getKey(); - killServer(serverName, serverAddress, true); + killServer(serverName, serverAddress, "[KILLED] [SLOW-STARTUP] " + serverName + ":" + serverAddress, true); iterator.remove(); } } @@ -220,7 +218,6 @@ public class ServerMonitor private static void handleGroupChanges(List dedicatedServers, HashMap> serverTracker, ServerGroup serverGroup, boolean free) { int serverNum = 0; - //GroupStatusData groupStatus = groupStatusList.get(serverGroup.Name); int requiredTotal = serverGroup.getRequiredTotalServers(); int requiredJoinable = serverGroup.getRequiredJoinableServers(); int joinableServers = serverGroup.getJoinableCount(); @@ -231,8 +228,12 @@ public class ServerMonitor // Minimum 1500 slot bufferzone if (serverGroup.getName().equalsIgnoreCase("Lobby")) { - if (serverGroup.getMaxPlayerCount() - serverGroup.getPlayerCount() < 1500) - serversToAdd = requiredJoinable; + int availableSlots = serverGroup.getMaxPlayerCount() - serverGroup.getPlayerCount(); + + if (availableSlots < 1500) + serversToAdd = Math.max(1, (1500 / availableSlots) - serverGroup.getMaxPlayers()); + else if (serversToKill > 0) + serversToKill = Math.min(serversToKill, (availableSlots - 1500) / 80); } while (serversToAdd > 0) @@ -262,12 +263,12 @@ public class ServerMonitor { List emptyServers = new ArrayList(serverGroup.getEmptyServers()); MinecraftServer emptyServer = emptyServers.get(serversToKill - 1); - killServer(emptyServer); + killServer(emptyServer, "[KILLED] [EXCESS] " + emptyServer.getName() + ":" + emptyServer.getPublicAddress()); serversToKill--; } } - private static void killServer(final String serverName, final String serverAddress, final boolean announce) + private static void killServer(final String serverName, final String serverAddress, final String message, final boolean announce) { String cmd = "/home/mineplex/easyRemoteKillServer.sh"; @@ -291,7 +292,7 @@ public class ServerMonitor if (error) System.out.println("[" + serverName + ":" + serverAddress + "] Kill errored."); else - System.out.println("Sent kill command to " + serverAddress + " for " + serverName + " completed"); + System.out.println(message); } } }); @@ -366,9 +367,9 @@ public class ServerMonitor return bestServer; } - private static void killServer(final MinecraftServer serverToKill) + private static void killServer(final MinecraftServer serverToKill, String message) { - killServer(serverToKill.getName(), serverToKill.getPublicAddress(), true); + killServer(serverToKill.getName(), serverToKill.getPublicAddress(), message, true); } private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final int serverNum, final boolean free) diff --git a/Website/LOC.Core/LOC.Core.csproj b/Website/LOC.Core/LOC.Core.csproj index 3b92112f2..89d688b85 100644 --- a/Website/LOC.Core/LOC.Core.csproj +++ b/Website/LOC.Core/LOC.Core.csproj @@ -82,6 +82,7 @@ + diff --git a/Website/LOC.Core/Model/Sales/AccountTransaction.cs b/Website/LOC.Core/Model/Sales/AccountTransaction.cs index bf036eab2..01aacc663 100644 --- a/Website/LOC.Core/Model/Sales/AccountTransaction.cs +++ b/Website/LOC.Core/Model/Sales/AccountTransaction.cs @@ -6,6 +6,8 @@ public Account.Account Account { get; set; } + public long Date { get; set; } + public string SalesPackageName { get; set; } public int Gems { get; set; } diff --git a/Website/LOC.Core/Model/Sales/CoinTransaction.cs b/Website/LOC.Core/Model/Sales/CoinTransaction.cs index 273d375cb..03848b00f 100644 --- a/Website/LOC.Core/Model/Sales/CoinTransaction.cs +++ b/Website/LOC.Core/Model/Sales/CoinTransaction.cs @@ -6,6 +6,8 @@ public Account.Account Account { get; set; } + public long Date { get; set; } + public string Source { get; set; } public int Amount { get; set; } diff --git a/Website/LOC.Core/Model/Sales/GemTransaction.cs b/Website/LOC.Core/Model/Sales/GemTransaction.cs index b917705b7..7be893c7e 100644 --- a/Website/LOC.Core/Model/Sales/GemTransaction.cs +++ b/Website/LOC.Core/Model/Sales/GemTransaction.cs @@ -6,6 +6,8 @@ public Account.Account Account { get; set; } + public long Date { get; set; } + public string Source { get; set; } public int Amount { get; set; } diff --git a/Website/LOC.Core/Tokens/Client/AccountTransactionToken.cs b/Website/LOC.Core/Tokens/Client/AccountTransactionToken.cs new file mode 100644 index 000000000..afe1de694 --- /dev/null +++ b/Website/LOC.Core/Tokens/Client/AccountTransactionToken.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace LOC.Core.Tokens.Client +{ + public class AccountTransactionToken + { + public long Date { get; set; } + + public string SalesPackageName { get; set; } + + public int Gems { get; set; } + + public int Coins { get; set; } + + public AccountTransactionToken(Model.Sales.AccountTransaction transaction) + { + SalesPackageName = transaction.SalesPackageName; + Date = transaction.Date; + Gems = transaction.Gems; + Coins = transaction.Coins; + } + } +} diff --git a/Website/LOC.Core/Tokens/Client/ClientToken.cs b/Website/LOC.Core/Tokens/Client/ClientToken.cs index 00070d053..a73a187ee 100644 --- a/Website/LOC.Core/Tokens/Client/ClientToken.cs +++ b/Website/LOC.Core/Tokens/Client/ClientToken.cs @@ -42,6 +42,7 @@ Donated = account.Donated, SalesPackages = new List(), UnknownSalesPackages = new List(), + Transactions = new List(), CustomBuilds = new List(), Pets = new List(), PetNameTagCount = account.PetNameTagCount @@ -86,6 +87,7 @@ foreach (var transaction in account.AccountTransactions) { DonorToken.UnknownSalesPackages.Add(transaction.SalesPackageName); + DonorToken.Transactions.Add(new AccountTransactionToken(transaction)); } if (account.CustomBuilds == null) diff --git a/Website/LOC.Core/Tokens/Client/DonorToken.cs b/Website/LOC.Core/Tokens/Client/DonorToken.cs index e2c168907..4e636c181 100644 --- a/Website/LOC.Core/Tokens/Client/DonorToken.cs +++ b/Website/LOC.Core/Tokens/Client/DonorToken.cs @@ -9,6 +9,7 @@ public bool Donated { get; set; } public List SalesPackages { get; set; } public List UnknownSalesPackages { get; set; } + public List Transactions { get; set; } public List CustomBuilds { get; set; } public List Pets { get; set; } public int PetNameTagCount { get; set; } diff --git a/Website/LOC.Website.Common/Models/AccountAdministrator.cs b/Website/LOC.Website.Common/Models/AccountAdministrator.cs index 9d6952f01..2dd62d254 100644 --- a/Website/LOC.Website.Common/Models/AccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/AccountAdministrator.cs @@ -207,7 +207,8 @@ { Source = token.Source, Account = account, - Amount = token.Amount + Amount = token.Amount, + Date = (long)TimeUtil.GetCurrentMilliseconds() }; repository.Add(gemTransaction); @@ -238,7 +239,8 @@ { Source = token.Source, Account = account, - Amount = token.Amount + Amount = token.Amount, + Date = (long)TimeUtil.GetCurrentMilliseconds() }; repository.Add(coinTransaction); @@ -502,6 +504,7 @@ { Account = account, SalesPackageName = token.SalesPackageName, + Date = (long)TimeUtil.GetCurrentMilliseconds(), Gems = token.CoinPurchase ? 0 : token.Cost, Coins = token.CoinPurchase ? token.Cost : 0 }; diff --git a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml index c039de9b0..cc154fa82 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -1,6 +1,7 @@  + @@ -16,16 +17,19 @@ - + - + + + + @@ -39,26 +43,26 @@ - + - + + - - - + + @@ -69,25 +73,24 @@ - + + - - + + + - - - - + @@ -95,6 +98,8 @@ + + @@ -102,19 +107,19 @@ - + - + + - - + @@ -126,17 +131,18 @@ - + + - + + - - + @@ -147,23 +153,18 @@ - + - - - - + - - @@ -172,28 +173,28 @@ - - - + + - + - - + + - + + @@ -202,24 +203,23 @@ - - + + - + - + - + - @@ -227,49 +227,50 @@ - + - + + - - + + - + - + - - + + - - + + - - + + + - @@ -282,17 +283,13 @@ - - + - - - @@ -306,7 +303,6 @@ - @@ -314,8 +310,8 @@ + - @@ -325,6 +321,7 @@ + @@ -335,28 +332,30 @@ - - + - + + + - + + @@ -364,42 +363,43 @@ - - - + + + + - + + - - - + + - - + + @@ -410,27 +410,32 @@ - + - + + + + + + - - + + @@ -440,99 +445,95 @@ - + - - + - - - + - - + - - + + - - + + - + + - - + - + - - + - + - + - - + + - + - - + + - - + + - + + + - @@ -543,18 +544,16 @@ - + - + - - @@ -568,6 +567,7 @@ + @@ -575,18 +575,18 @@ + - - + - + @@ -597,72 +597,74 @@ - - - + - - + + + - + - - + + - + - - + + + + + - + - - + + - - + + @@ -673,129 +675,128 @@ - + - + + + + + + - - - - + + + - - + - + - - + - - - + - - + + - - + + - - - - + + + - + - + - - + - + - + - - + + - + - - + + - - + + - + + + - @@ -806,18 +807,16 @@ - + - + - - @@ -831,6 +830,7 @@ + @@ -838,8 +838,8 @@ + - @@ -848,8 +848,8 @@ - + @@ -860,30 +860,29 @@ - - - + - - + + + - + @@ -891,41 +890,44 @@ - + - - + + + + + - + - - + + - - + + @@ -936,120 +938,118 @@ - + - + + + + + + - - + - - + - + - - + - - - + - - + + - - + + - - - - + + + - + - - + - + - + - - + + - + - - + + - - + + - + \ No newline at end of file diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index ed2074901fa85d80cd0449841ec2a31510e5d13d..f6e2c37e31ab6d3ac2952a4a38fb62f60bf78db7 100644 GIT binary patch delta 15581 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 Date: Mon, 18 Aug 2014 17:35:03 -0400 Subject: [PATCH 2/5] Minor enjin tweak. Reverted to nullable gem column because sql db wants to take forever converting. --- .../src/mineplex/enjinTranslator/Enjin.java | 2 +- .../LOC.Core/Model/Sales/GemTransaction.cs | 2 +- .../LOC.Website.Web.Publish.xml | 12 ++++++------ Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java index 4b0b139e8..f906ac9e6 100644 --- a/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java +++ b/Plugins/Mineplex.EnjinTranslator/src/mineplex/enjinTranslator/Enjin.java @@ -88,7 +88,7 @@ public class Enjin extends MiniPlugin implements CommandExecutor String name = args[1]; int amount = Integer.parseInt(args[2]); - _donationManager.PurchaseUnknownSalesPackage(null, name, "Gem Booster", false, 0, false); + _donationManager.PurchaseUnknownSalesPackage(null, name, "Gem Booster " + amount, false, 0, false); _repository.addGemBooster(name, amount); System.out.println("[" + _dateFormat.format(new Date()) + "] " + name + " received " + amount + " Gem Boosters" + "."); } diff --git a/Website/LOC.Core/Model/Sales/GemTransaction.cs b/Website/LOC.Core/Model/Sales/GemTransaction.cs index 7be893c7e..8372b195d 100644 --- a/Website/LOC.Core/Model/Sales/GemTransaction.cs +++ b/Website/LOC.Core/Model/Sales/GemTransaction.cs @@ -6,7 +6,7 @@ public Account.Account Account { get; set; } - public long Date { get; set; } + public long? Date { get; set; } public string Source { get; set; } diff --git a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml index cc154fa82..9b78888fc 100644 --- a/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml +++ b/Website/LOC.Website.Web/LOC.Website.Web.Publish.xml @@ -614,7 +614,7 @@ - + @@ -622,8 +622,8 @@ - - + + @@ -696,9 +696,9 @@ - + - + @@ -748,7 +748,7 @@ - + diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index f6e2c37e31ab6d3ac2952a4a38fb62f60bf78db7..baf4e023c2bc79ecf4917debb8f79a74dafa20b2 100644 GIT binary patch delta 388 zcmZqpBh&ClW`xbX5AZFga#ht~kg8i8$0|N`g_UR7~u+&eNI>cf*{lNj2U5wYJ_kChZp5CyW zRekz_Uu^8tH!NdipT6KFi~aQALo6p4ku+@oe3->VdHM!HHXcrPpd&!Q1#HUn`e$rP ljGWsgU$ER^6ubqI0+K=p9s)_j_UA8IfS7gr^OtOrApo=>i6;O6 delta 409 zcmZqpBh&ClWw%fqcx5&hvRvZgWc&{V{0s~X(;1zZG$xnu`%iX`Hr)J${{qYO zBR)(fOx#+Ne~EZ| zp|kxW3|FVhEpOrxjrlw>wBhM6(ep#-vzD-kBuIdW*+WU{M=;MYj zYbRgiQfS}e&IH8F+qby0_*Jm8YB4adFkGA7_lYfedc$&7_2~zGv9V9zu#A;`y2v3G z`{@S{uYQyOBS)|8wA;S7}>Y~dd_l(vHj~y79eKb{`DmrcL)H{GL@|W From 9ee25c6292d66cad0dd36a8895f27b6ef15ed5f2 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Tue, 19 Aug 2014 21:36:23 -0400 Subject: [PATCH 3/5] Did some cleanup in Pvp project. Did work in Coreclient manager and added StaffServer (still in progress) --- .../core/account/CoreClientManager.java | 24 ++++++ .../account/repository/AccountRepository.java | 5 ++ .../mineplex/hub/server/ServerManager.java | 2 +- Plugins/Mineplex.StaffServer/.classpath | 12 +++ Plugins/Mineplex.StaffServer/.project | 17 +++++ .../src/mineplex/staffServer/StaffServer.java | 47 ++++++++++++ .../customerSupport/CustomerSupport.java | 61 +++++++++++++++ .../customerSupport/checkCommand.java | 46 ++++++++++++ .../staffServer/password/Password.java | 51 +++++++++++++ .../staffServer/password/PasswordCommand.java | 23 ++++++ .../src/nautilus/game/pvp/PvP.java | 54 ++++---------- .../game/pvp/modules/ShopManager.java | 3 +- .../game/pvp/worldevent/EventManager.java | 70 +++--------------- .../pvp/worldevent/command/EventCommand.java | 54 ++++++++++++++ .../pvp/worldevent/creature/SkeletonKing.java | 10 +-- .../worldevent/creature/SkeletonMinion.java | 18 ++--- .../pvp/worldevent/events/BaseUndead.java | 3 +- .../Models/AccountAdministrator.cs | 15 ++++ .../Models/IAccountAdministrator.cs | 2 + .../Controllers/PlayerAccountController.cs | 9 +++ Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 21 files changed, 410 insertions(+), 116 deletions(-) create mode 100644 Plugins/Mineplex.StaffServer/.classpath create mode 100644 Plugins/Mineplex.StaffServer/.project create mode 100644 Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java create mode 100644 Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupport.java create mode 100644 Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/checkCommand.java create mode 100644 Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/Password.java create mode 100644 Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordCommand.java create mode 100644 Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/command/EventCommand.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java index 98fea4f14..5cd9ba309 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java @@ -37,6 +37,8 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; +import com.google.common.base.Charsets; + public class CoreClientManager extends MiniPlugin { private JavaPlugin _plugin; @@ -149,6 +151,28 @@ public class CoreClientManager extends MiniPlugin } } + public void loadClientByName(final String playerName, final Runnable runnable) + { + final CoreClient client = Add(playerName); + final UUID uuid = UUID.nameUUIDFromBytes((playerName).getBytes(Charsets.UTF_8)); + + Bukkit.getServer().getScheduler().runTaskAsynchronously(GetPlugin(), new Runnable() + { + public void run() + { + LoadClient(client, uuid, "null"); + Bukkit.getServer().getScheduler().runTask(GetPlugin(), new Runnable() + { + public void run() + { + if (runnable != null) + runnable.run(); + } + }); + } + }); + } + private void LoadClient(final CoreClient client, final UUID uuid, String ipAddress) { TimingManager.start(client.GetPlayerName() + " LoadClient Total."); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java index ac8e99228..133dc26b0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/repository/AccountRepository.java @@ -30,6 +30,11 @@ public class AccountRepository return new JsonWebCall(_webAddress + "PlayerAccount/Login").ExecuteReturnStream(token); } + + public String getClientByUUID(UUID uuid) + { + return new JsonWebCall(_webAddress + "PlayerAccount/GetAccountByUUID").ExecuteReturnStream(uuid.toString()); + } public void SaveRank(Callback callback, String name, Rank rank, boolean perm) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 70e090b22..96b6d9b49 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -62,7 +62,7 @@ import mineplex.serverdata.MinecraftServer; public class ServerManager extends MiniPlugin { - private static final Long FREE_PORTAL_TIMER = 30000L; + private static final Long FREE_PORTAL_TIMER = 1000L; private CoreClientManager _clientManager; private DonationManager _donationManager; diff --git a/Plugins/Mineplex.StaffServer/.classpath b/Plugins/Mineplex.StaffServer/.classpath new file mode 100644 index 000000000..0169f5fdb --- /dev/null +++ b/Plugins/Mineplex.StaffServer/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Plugins/Mineplex.StaffServer/.project b/Plugins/Mineplex.StaffServer/.project new file mode 100644 index 000000000..89a8d6d8e --- /dev/null +++ b/Plugins/Mineplex.StaffServer/.project @@ -0,0 +1,17 @@ + + + Mineplex.StaffServer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java new file mode 100644 index 000000000..699afe207 --- /dev/null +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java @@ -0,0 +1,47 @@ +package mineplex.staffServer; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.chat.Chat; +import mineplex.core.command.CommandCenter; +import mineplex.core.donation.DonationManager; +import mineplex.core.memory.MemoryFix; +import mineplex.core.monitor.LagMeter; +import mineplex.core.playerTracker.PlayerTracker; +import mineplex.core.portal.Portal; +import mineplex.core.preferences.PreferencesManager; +import mineplex.core.status.ServerStatusManager; +import mineplex.core.updater.FileUpdater; + +import org.bukkit.plugin.java.JavaPlugin; + +public class StaffServer extends JavaPlugin +{ + private String WEB_CONFIG = "webServer"; + + @Override + public void onEnable() + { + getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); + getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + saveConfig(); + + String webServerAddress = getConfig().getString(WEB_CONFIG); + + //Static Modules + CommandCenter.Initialize(this); + CoreClientManager clientManager = new CoreClientManager(this, webServerAddress); + CommandCenter.Instance.setClientManager(clientManager); + + DonationManager donationManager = new DonationManager(this, webServerAddress); + + ServerStatusManager serverStatusManager = new ServerStatusManager(this, new LagMeter(this, clientManager)); + new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs()); + PreferencesManager preferenceManager = new PreferencesManager(this, clientManager, donationManager); + preferenceManager.GiveItem = false; + + Portal portal = new Portal(this, serverStatusManager.getCurrentServerName()); + new Chat(this, clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); + new MemoryFix(this); + new FileUpdater(this, portal); + } +} diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupport.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupport.java new file mode 100644 index 000000000..d9d311bc4 --- /dev/null +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/CustomerSupport.java @@ -0,0 +1,61 @@ +package mineplex.staffServer.customerSupport; + +import java.util.HashSet; +import java.util.List; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClient; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.donation.DonationManager; +import mineplex.core.donation.Donor; + +public class CustomerSupport extends MiniPlugin +{ + private CoreClientManager _clientManager; + private DonationManager _donationManager; + + private NautHashMap> _agentCacheMap = new NautHashMap>(); + + public CustomerSupport(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super("Customer Support", plugin); + + _clientManager = clientManager; + _donationManager = donationManager; + } + + @Override + public void AddCommands() + { + AddCommand(new checkCommand(this)); + } + + public void Help(Player caller) + { + caller.sendMessage(F.main(GetName(), "Usage : /check jRayx")); + } + + public void addAgentMapping(Player caller, String playerName) + { + if (!_agentCacheMap.containsKey(caller)) + _agentCacheMap.put(caller, new HashSet()); + + _agentCacheMap.get(caller).add(playerName); + } + + public void showPlayerInfo(Player caller, String playerName) + { + CoreClient client = _clientManager.Get(playerName); + Donor donor = _donationManager.Get(playerName); + + caller.sendMessage(F.main(GetName(), "Name : " + F.elem(playerName))); + caller.sendMessage(F.main(GetName(), "Rank : " + F.elem(client.GetRank().Name))); + + //for (donor.GetUnknownSalesPackagesOwned()) + } +} diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/checkCommand.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/checkCommand.java new file mode 100644 index 000000000..383443db3 --- /dev/null +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/customerSupport/checkCommand.java @@ -0,0 +1,46 @@ +package mineplex.staffServer.customerSupport; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.Callback; + +public class checkCommand extends CommandBase +{ + public checkCommand(CustomerSupport plugin) + { + super(plugin, Rank.MODERATOR, "check"); + } + + @Override + public void Execute(final Player caller, String[] args) + { + if (args == null || args.length != 1) + { + Plugin.Help(caller); + } + else + { + final String playerName = args[0]; + + CommandCenter.GetClientManager().checkPlayerName(caller, playerName, new Callback() + { + public void run(Boolean matched) + { + if (matched) + { + CommandCenter.GetClientManager().loadClientByName(playerName, new Runnable() + { + public void run() + { + Plugin.addAgentMapping(caller, playerName); + Plugin.showPlayerInfo(caller, playerName); + } + }); + } + } + }); + } + } +} diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/Password.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/Password.java new file mode 100644 index 000000000..0fe95546b --- /dev/null +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/Password.java @@ -0,0 +1,51 @@ +package mineplex.staffServer.password; + +import java.util.HashSet; + +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.MiniPlugin; +import mineplex.core.common.util.F; + +public class Password extends MiniPlugin +{ + private HashSet _accepted = new HashSet(); + + public Password(JavaPlugin plugin) + { + super("Password", plugin); + } + + @Override + public void AddCommands() + { + AddCommand(new PasswordCommand(this)); + } + + @EventHandler + public void promptForPassword(final PlayerJoinEvent event) + { + event.getPlayer().sendMessage(F.main(GetName(), "Please enter the server password within 5 seconds.")); + + GetPlugin().getServer().getScheduler().scheduleSyncDelayedTask(GetPlugin(), new Runnable() + { + public void run() + { + if (!_accepted.contains(event.getPlayer())) + event.getPlayer().kickPlayer("You don't know the password little twerp."); + } + }, 100L); + } + + public void checkPassword(Player caller, String attempt) + { + if (attempt.equals("ClothStarRust")) + { + _accepted.add(caller); + caller.sendMessage(F.main(GetName(), "I guess you get to stay.")); + } + } +} diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordCommand.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordCommand.java new file mode 100644 index 000000000..29b0f96b8 --- /dev/null +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/password/PasswordCommand.java @@ -0,0 +1,23 @@ +package mineplex.staffServer.password; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; + +public class PasswordCommand extends CommandBase +{ + public PasswordCommand(Password plugin) + { + super(plugin, Rank.MODERATOR, "password"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 1) + { + Plugin.checkPassword(caller, args[0]); + } + } +} diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/PvP.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/PvP.java index 149e03802..615574bc6 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/PvP.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/PvP.java @@ -2,29 +2,24 @@ package nautilus.game.pvp; import java.util.HashSet; -import me.chiss.Core.Class.ClassFactory; import me.chiss.Core.Config.Config; import me.chiss.Core.Field.Field; import mineplex.core.itemstack.ItemStackFactory; import me.chiss.Core.Loot.LootFactory; -import me.chiss.Core.MemoryFix.MemoryFix; import me.chiss.Core.Module.ModuleManager; import me.chiss.Core.Modules.*; -import me.chiss.Core.NAC.NAC; import me.chiss.Core.Plugin.IPlugin; import me.chiss.Core.Plugin.IRelation; import me.chiss.Core.Scheduler.Scheduler; -import mineplex.core.message.Message; +import mineplex.core.monitor.LagMeter; import mineplex.core.npc.NpcManager; -import mineplex.core.packethandler.TabLobbyList; import mineplex.core.pet.PetFactory; import mineplex.core.pet.PetManager; -import mineplex.core.pet.PetShop; import mineplex.core.portal.Portal; import mineplex.core.projectile.ProjectileManager; +import mineplex.core.punish.Punish; import mineplex.core.recharge.Recharge; -import mineplex.core.server.ServerListener; -import mineplex.core.server.event.PlayerVoteEvent; +import mineplex.core.status.ServerStatusManager; import mineplex.core.updater.Updater; import mineplex.core.account.CoreClient; import mineplex.core.account.CoreClientManager; @@ -42,7 +37,6 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.fire.Fire; import mineplex.minecraft.game.core.mechanics.Weapon; -import mineplex.minecraft.punish.Punish; import nautilus.game.pvp.modules.Farming; import nautilus.game.pvp.modules.Gameplay; import nautilus.game.pvp.modules.Recipes; @@ -78,10 +72,8 @@ public class PvP extends JavaPlugin implements IPlugin, Listener private BlockRestore _blockRestore; private Blood _blood; private Clans _clans; - private ClassFactory _classFactory; private ConditionManager _condition; private Creature _creature; - private DamageManager _damage; private Energy _energy; private Explosion _explosion; private Field _field; @@ -102,29 +94,21 @@ public class PvP extends JavaPlugin implements IPlugin, Listener //Repo private PvPRepository _repository; - - private ServerListener _serverListener; @Override public void onEnable() { - getConfig().addDefault(WEB_CONFIG, "http://www.nautmc.com/"); + getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); saveConfig(); - //Repo - _repository = new PvPRepository(GetWebServerAddress()); + CommandCenter.Initialize(this); + CoreClientManager clientManager = new CoreClientManager(this, GetWebServerAddress()); + CommandCenter.Instance.setClientManager(clientManager); - //Init Modules - GetModules(); - - _clientManager = CoreClientManager.Initialize(this, GetWebServerAddress()); - CommandCenter.Initialize(this, _clientManager); + ItemStackFactory.Initialize(this, true); - CombatManager.Initialize(this); - ItemStackFactory.Initialize(this); - - new Punish(this, GetWebServerAddress()); + new Punish(this, GetWebServerAddress(), clientManager); GetBlood(); GetClans(); GetClasses(); @@ -148,12 +132,9 @@ public class PvP extends JavaPlugin implements IPlugin, Listener GetObserver(); GetServer(); GetWeapon(); - //GetWiki(); - - _petManager = new PetManager(this, GetWebServerAddress(), GetCreature(), GetClients()); //Unreferenced Modules - new AntiStack(); + new AntiStack(null); new Chat(this, _clientManager, GetClans()); new EventManager(this); new Farming(this); @@ -165,7 +146,6 @@ public class PvP extends JavaPlugin implements IPlugin, Listener new Information(this); new PlayerInfo(this); new PointManager(this, Scheduler.Instance, _repository, 4000, 150, 80, 8, 80, 8, 300); - new PetShop(this, _repository, GetClients(), new PetFactory(_repository), GetPetManager()); new Quit(this); new Recipes(this); new SoundTest(this); @@ -182,11 +162,12 @@ public class PvP extends JavaPlugin implements IPlugin, Listener //Activate Class Save //GetClasses().GetRestore().Activate(); - new Portal(this); + ServerStatusManager serverStatusManager = new ServerStatusManager(this, new LagMeter(this, clientManager)); + new Portal(this, serverStatusManager.getCurrentServerName()); //Shops new ShopManager(this, _repository, new BenefitManager(this, GetWebServerAddress(), GetEnergy())); - new NpcManager(this); + new NpcManager(this, _creature); //Items HashSet itemIgnore = new HashSet(); @@ -541,15 +522,6 @@ public class PvP extends JavaPlugin implements IPlugin, Listener return _weapon; } - @Override - public Wiki GetWiki() - { - if (_wiki == null) - _wiki = new Wiki(this, _repository); - - return _wiki; - } - @Override public Location GetSpawnLocation() { diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/modules/ShopManager.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/modules/ShopManager.java index 7f7e5ec3d..c9fc24ce3 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/modules/ShopManager.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/modules/ShopManager.java @@ -7,6 +7,7 @@ import me.chiss.Core.Shop.PvpBuildShop; import me.chiss.Core.Shop.PvpDonatorShop; import me.chiss.Core.Shop.PvpItemShop; import mineplex.core.CurrencyType; +import mineplex.core.MiniPlugin; import mineplex.core.server.RemoteRepository; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; @@ -20,7 +21,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin; -public class ShopManager extends AModule +public class ShopManager extends MiniPlugin { private PvpDonatorShop _donatorShop; private PvpBuildShop _buildShop; diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/EventManager.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/EventManager.java index c3e793479..536968000 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/EventManager.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/EventManager.java @@ -2,11 +2,12 @@ package nautilus.game.pvp.worldevent; import java.util.HashSet; -import mineplex.core.Rank; -import me.chiss.Core.Module.AModule; +import mineplex.core.MiniPlugin; +import mineplex.core.common.Rank; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; +import nautilus.game.pvp.worldevent.command.EventCommand; import nautilus.game.pvp.worldevent.events.BossSkeleton; import nautilus.game.pvp.worldevent.events.BossSlime; import nautilus.game.pvp.worldevent.events.BaseUndead; @@ -20,7 +21,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.plugin.java.JavaPlugin; -public class EventManager extends AModule +public class EventManager extends MiniPlugin { private HashSet _active = new HashSet(); @@ -38,65 +39,13 @@ public class EventManager extends AModule _lastStart = System.currentTimeMillis(); _lastStop = System.currentTimeMillis(); } - - @Override - public void enable() - { - } - @Override - public void disable() + public void AddCommands() { - for (EventBase cur : _active) - cur.TriggerStop(); + AddCommand(new EventCommand(this)); } - @Override - public void config() - { - - } - - @Override - public void commands() - { - AddCommand("ev"); - } - - @Override - public void command(Player caller, String cmd, String[] args) - { - if (!Clients().Get(caller).Rank().Has(Rank.ADMIN, true)) - return; - - if (args.length == 0) - { - caller.sendMessage("Missing Event Parameter."); - return; - } - - EventBase event = null; - - if (args[0].equals("dead")) event = new BaseUndead(this); - if (args[0].equals("dead4")) event = new BaseUndead(this, 4); - if (args[0].equals("slime")) event = new BossSlime(this); - if (args[0].equals("skel")) event = new BossSkeleton(this); - if (args[0].equals("swarm")) event = new BossSwarmer(this); - if (args[0].equals("wither")) event = new BossWither(this); - if (args[0].equals("brood")) event = new BossSpider(this); - - if (args[0].equals("flood")) event = new EndFlood(this, caller.getLocation()); - - if (event != null) - { - event.TriggerStart(); - _active.add(event); - - UtilServer.getServer().getPluginManager().registerEvents(event, Plugin()); - } - } - @EventHandler public void StartEvent(UpdateEvent event) { @@ -138,7 +87,7 @@ public class EventManager extends AModule _active.add(event); //Register Events - UtilServer.getServer().getPluginManager().registerEvents(event, Plugin()); + UtilServer.getServer().getPluginManager().registerEvents(event, GetPlugin()); _lastStart = System.currentTimeMillis(); } @@ -152,4 +101,9 @@ public class EventManager extends AModule _lastStop = System.currentTimeMillis(); } + + public void addEvent(EventBase event) + { + _active.add(event); + } } diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/command/EventCommand.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/command/EventCommand.java new file mode 100644 index 000000000..94db9d1fc --- /dev/null +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/command/EventCommand.java @@ -0,0 +1,54 @@ +package nautilus.game.pvp.worldevent.command; + +import org.bukkit.entity.Player; + +import nautilus.game.pvp.worldevent.EventBase; +import nautilus.game.pvp.worldevent.EventManager; +import nautilus.game.pvp.worldevent.events.BaseUndead; +import nautilus.game.pvp.worldevent.events.BossSkeleton; +import nautilus.game.pvp.worldevent.events.BossSlime; +import nautilus.game.pvp.worldevent.events.BossSpider; +import nautilus.game.pvp.worldevent.events.BossSwarmer; +import nautilus.game.pvp.worldevent.events.BossWither; +import nautilus.game.pvp.worldevent.events.EndFlood; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.UtilServer; + +public class EventCommand extends CommandBase +{ + public EventCommand(EventManager plugin) + { + super(plugin, Rank.ADMIN, "ev", "event"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + caller.sendMessage("Missing Event Parameter."); + return; + } + + EventBase event = null; + + if (args[0].equals("dead")) event = new BaseUndead(Plugin); + if (args[0].equals("dead4")) event = new BaseUndead(Plugin, 4); + if (args[0].equals("slime")) event = new BossSlime(Plugin); + if (args[0].equals("skel")) event = new BossSkeleton(Plugin); + if (args[0].equals("swarm")) event = new BossSwarmer(Plugin); + if (args[0].equals("wither")) event = new BossWither(Plugin); + if (args[0].equals("brood")) event = new BossSpider(Plugin); + + if (args[0].equals("flood")) event = new EndFlood(Plugin, caller.getLocation()); + + if (event != null) + { + event.TriggerStart(); + Plugin.addEvent(event); + + UtilServer.getServer().getPluginManager().registerEvents(event, Plugin.GetPlugin()); + } + } +} diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonKing.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonKing.java index 3435b50a0..22724d44f 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonKing.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonKing.java @@ -3,7 +3,7 @@ package nautilus.game.pvp.worldevent.creature; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_6_R3.entity.CraftSkeleton; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftSkeleton; import org.bukkit.entity.EntityType; import org.bukkit.entity.Skeleton; import org.bukkit.entity.Skeleton.SkeletonType; @@ -20,9 +20,9 @@ import mineplex.core.common.util.UtilTime; import nautilus.game.pvp.worldevent.EventBase; import nautilus.game.pvp.worldevent.EventMobBoss; import nautilus.game.pvp.worldevent.EventMobMinion; -import net.minecraft.server.v1_6_R3.EntitySkeleton; -import net.minecraft.server.v1_6_R3.Item; -import net.minecraft.server.v1_6_R3.ItemStack; +import net.minecraft.server.v1_7_R4.EntitySkeleton; +import net.minecraft.server.v1_7_R4.Item; +import net.minecraft.server.v1_7_R4.ItemStack; public class SkeletonKing extends EventMobBoss { @@ -50,7 +50,7 @@ public class SkeletonKing extends EventMobBoss CraftSkeleton skelC = (CraftSkeleton)skel; EntitySkeleton skelMC = skelC.getHandle(); - skelMC.setEquipment(0, new ItemStack(Item.IRON_SWORD)); + skelMC.setEquipment(0, new ItemStack(Item.getById(Material.IRON_SWORD.getId()))); } catch (Exception e) { diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonMinion.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonMinion.java index e1a4488dc..d1bdb873d 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonMinion.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/creature/SkeletonMinion.java @@ -3,8 +3,8 @@ package nautilus.game.pvp.worldevent.creature; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature; -import org.bukkit.craftbukkit.v1_6_R3.entity.CraftSkeleton; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftCreature; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftSkeleton; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -20,11 +20,11 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import nautilus.game.pvp.worldevent.EventBase; import nautilus.game.pvp.worldevent.EventMobMinion; -import net.minecraft.server.v1_6_R3.EntityCreature; -import net.minecraft.server.v1_6_R3.EntitySkeleton; -import net.minecraft.server.v1_6_R3.Item; -import net.minecraft.server.v1_6_R3.ItemStack; -import net.minecraft.server.v1_6_R3.Navigation; +import net.minecraft.server.v1_7_R4.EntityCreature; +import net.minecraft.server.v1_7_R4.EntitySkeleton; +import net.minecraft.server.v1_7_R4.Item; +import net.minecraft.server.v1_7_R4.ItemStack; +import net.minecraft.server.v1_7_R4.Navigation; public class SkeletonMinion extends EventMobMinion { @@ -33,7 +33,7 @@ public class SkeletonMinion extends EventMobMinion super(event, location, "Skeleton Minion", true, 32, EntityType.SKELETON, host); if (GetState() == 0) - SetWeapon(Item.IRON_SWORD); + SetWeapon(Item.getById(Material.IRON_SWORD.getId())); } @Override @@ -48,7 +48,7 @@ public class SkeletonMinion extends EventMobMinion CraftSkeleton skelC = (CraftSkeleton)skel; EntitySkeleton skelMC = skelC.getHandle(); - skelMC.setEquipment(0, new ItemStack(Item.BOW)); + skelMC.setEquipment(0, new ItemStack(Item.getById(Material.BOW.getId()))); } catch (Exception e) { diff --git a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/events/BaseUndead.java b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/events/BaseUndead.java index d278e041e..b6dccad13 100644 --- a/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/events/BaseUndead.java +++ b/Plugins/Nautilus.Game.PvP/src/nautilus/game/pvp/worldevent/events/BaseUndead.java @@ -14,6 +14,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.F; @@ -457,7 +458,7 @@ public class BaseUndead extends EventBase event.setCancelled(true); - if (!Manager.Recharge().use(event.getPlayer(), "Loot Chest", 60000, true)) + if (!Recharge.Instance.use(event.getPlayer(), "Loot Chest", 60000, true, false)) return; if (event.getClickedBlock().getType() == Material.ENDER_CHEST) LootChest(event.getClickedBlock()); diff --git a/Website/LOC.Website.Common/Models/AccountAdministrator.cs b/Website/LOC.Website.Common/Models/AccountAdministrator.cs index 2dd62d254..39faa04ff 100644 --- a/Website/LOC.Website.Common/Models/AccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/AccountAdministrator.cs @@ -686,5 +686,20 @@ repository.Add(newMacAddress); repository.CommitChanges(); } + + public Account GetAccountByUUID(string uuid) + { + using (var repository = _repositoryFactory.CreateRepository()) + { + var account = repository.Where(x => x.Uuid == uuid).FirstOrDefault(); + + if (account == null) + return null; + + account.LoadNavigationProperties(repository.Context); + + return account; + } + } } } \ No newline at end of file diff --git a/Website/LOC.Website.Common/Models/IAccountAdministrator.cs b/Website/LOC.Website.Common/Models/IAccountAdministrator.cs index a6a146ef0..8391389a9 100644 --- a/Website/LOC.Website.Common/Models/IAccountAdministrator.cs +++ b/Website/LOC.Website.Common/Models/IAccountAdministrator.cs @@ -38,5 +38,7 @@ void UpdateAccountUUIDs(List tokens); bool CoinReward(GemRewardToken token); + + Account GetAccountByUUID(string uuid); } } diff --git a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs index e24fe93e5..d0c85c5aa 100644 --- a/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs +++ b/Website/LOC.Website.Web/Controllers/PlayerAccountController.cs @@ -39,6 +39,15 @@ return Content(json, "application/json"); } + [HttpPost] + public ActionResult GetAccountByUUID(string uuid) + { + var account = _accountAdministrator.GetAccountByUUID(uuid); + + var json = JsonConvert.SerializeObject(new ClientToken(account)); + return Content(json, "application/json"); + } + [HttpPost] public ActionResult GetDonor(string name) { diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index baf4e023c2bc79ecf4917debb8f79a74dafa20b2..c2392d83bd6e751fc013e1fc727f984ec0070b33 100644 GIT binary patch delta 1111 zcmZuweN0nV6o2RS-uwDWu|N=+6p#u*#ULeYWm_{DE@4dK(`b-ojA$EUvUDFp?cyZt z$(Ahf4@dII&XSGnBjzzoOo}z!gbgW!KNd5BW*@qYb=8?+jqzh^muVdAzPajVyva#^ z=bYa?=l*_qPru{V@3^BOk{cbpej)Yw9M~jDipLI+(+(Au#Bqrnp;=yIgk74k=>=~r z?K(qnrcG{;8@$Ht!d4X=f|Glnw_G!(iQp}NTa}3td!xM11`Wn7&u05FLCVPzW8u}B ztU|ZQ_uZ?dtMta)xi1PvQy=%XzF)D_6fq#OF&6JSxf;^3{rx**2>7MFG3jHZvjbF@Vk zVdFuT0Q+FfUWtyhs_I z4X{!^)W*6113^}Zy8>*VxrGt)nrH^*X%!~s#V3-dDD}Lrnf2SuKPf@)k8~~nSy9fx z*dh%PmIO)ak`cJAj1S1{HN{-RfDQ4XMivCK zo-wTWp4Q-v9Hj(nUCM{JF-aZ#s-G3Y*b{8s$rWQvPIxap)t2h0nXUb65v1VvCO z@90`-M#Sp}1kMdFmFCK_kYp1?MP;c-l!++K&=A+%#=3CMJ?A<1ob#N+6?YTG-Nb$i z)K+Z^1%|gSpx`)8v^TR^BJ(X&($&d;9L4 zJ3YJ?UQ;iD`r~$InIjEs*>BuBZ-;w6pO3l^gJuAk#T2IE zzGreA;$C-^0R!8ERLg0y{rmxyZ%rx4w597goLNJqy%!wEw$ zuc`;dkkVQJM;4>n>1K)Pfn>6&6{2XD2`>R6 zcA-?7+J`(z#P|ax(`P2U%+OdrI*vT*ZqbW)c^2{Hy++6(Izh;xPq5ITcvK70X}Sk3 z0Aia*da7SQi$GpRn2M)ylY)RNIG$L4A&b1q3ale6n=q8O5tRQResB+2pel*|&oVaB zA|QY&l5JuhpkEdE5GHLSFq3{0gqaW(4fZ5-i}Q?zc$e){mxVWwoPl{c2V-*fD( Date: Wed, 20 Aug 2014 20:14:23 -0500 Subject: [PATCH 4/5] Removed unused code in Party Fixed path var in Core.Common --- Plugins/Mineplex.Core.Common/.classpath | 2 +- .../src/mineplex/hub/HubManager.java | 1 - .../src/mineplex/hub/party/Party.java | 6 ------ .../.settings/org.eclipse.jdt.core.prefs | 11 +++++++++++ Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 5 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 Plugins/Mineplex.StaffServer/.settings/org.eclipse.jdt.core.prefs diff --git a/Plugins/Mineplex.Core.Common/.classpath b/Plugins/Mineplex.Core.Common/.classpath index b19944b54..f81250dfa 100644 --- a/Plugins/Mineplex.Core.Common/.classpath +++ b/Plugins/Mineplex.Core.Common/.classpath @@ -2,6 +2,6 @@ - + diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 63ded0915..26a49e152 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -507,7 +507,6 @@ public class HubManager extends MiniClientPlugin Objective obj = board.registerNewObjective(C.Bold + "Player Data", "dummy"); obj.setDisplaySlot(DisplaySlot.SIDEBAR); - for (Rank rank : Rank.values()) { if (rank != Rank.ALL) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java b/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java index e9f6fea65..11b6d6a1c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/party/Party.java @@ -61,12 +61,6 @@ public class Party { _scoreboard.getTeam(Manager.GetClients().Get(player).GetRank().Name).addPlayer(player); } - - //Owners - _scoreboard.getTeam(Rank.OWNER.Name).addPlayer(Bukkit.getOfflinePlayer("Chiss")); - _scoreboard.getTeam(Rank.OWNER.Name).addPlayer(Bukkit.getOfflinePlayer("defek7")); - _scoreboard.getTeam(Rank.OWNER.Name).addPlayer(Bukkit.getOfflinePlayer("Spu_")); - _scoreboard.getTeam(Rank.OWNER.Name).addPlayer(Bukkit.getOfflinePlayer("sterling_")); } public void JoinParty(Player player) diff --git a/Plugins/Mineplex.StaffServer/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.StaffServer/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/Plugins/Mineplex.StaffServer/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index c2392d83bd6e751fc013e1fc727f984ec0070b33..5a10b5f6672955a1dae35d0c71fcd3ee3204ae64 100644 GIT binary patch delta 1264 zcmah}YfM~46uxusoY_Y&>|%gcp|FL;D&?`I7$^!X4@1F5puvE(t<*mz+8D4GRN%+9 znrI9pz^$CLiINyyT7m{$+=)pOwk*bCN`a&gQVr6Ys6k?Ay|$JjIJ=uA{pU@-oH^&4 z@64GqGuN}0>{&}5Jw{`jo3D=KpPwO$BuSnXUk9DC>Os0&*KD;R>oaV#l-dNT&z;R; zFUykDk*%-BSL+pN#kwbi5&0GslSFmQ6xSuazSiGdzVc z=98~2OgA2`{xIXv&32u%m-+%n#?r~ZzP6K!k1mU4c-K?JF4OgmjScKAAlo9NkpkjO z7NPKWPfSY`g~tm-V|=-Q%$Lztv2LhhZoETg3N7SK;j7VF(D<6vT1cYslcF)M`G|T7 zd#hxp?xObh$EsvLR;8To#GXIEN9M6?iE;GEig_q7sXQP9c;YQ6wOA!BTauV`75gUW zDRiBKa^5>Zrxfx~gl0(P)1e86aprH9iuS*l86D@q&VTrxPVd09Ay~lP-LUf_u!dHS{&J$W0l#lYYN`O#UL%(-0rLB8H6xL(u(!(uF5h**5eH!A=aU zG82w^!Gs+bXzAwmRLuMlt_``}OddE+oZPtpzZ1US0E75%K?TK%Vc5;JU!j`}xhom- z{|Ogm`eL*NXso~$+7xxUaT`<_1@g4H)+7Z231A_ePzg2(ydJ#bL( z63G5_Xrh@*LY*XDP>--oSd+kZfg{3C5jIu8A+Si0a3$p{PZr^q6qe8Y%ixf?LuHFe zUIS!(M|%#oG>{U0ERzk(_FJ9S!p{7y$$JZfXMA@KjD;=}FUn>Xf)%lH9=7GM=PjgB ztn!jT`0k*Q!@|EE)N+})SO*1hC`zhh;-D@^UWeqp3$izlG3*TEIDMi-;n z7sVvgeOGArh5RjKt4PBoBqH>Ggz&{;GE+g*gggD}&>n8SMW**zrD%TkSO{o-Nqit} zjdA=TV()W)ly2)#yI#5e!=WQJA7s6F6SZnN^S!ZZnU7Ul&UIqbJb2M+V{ecdtXN-y z&^|t3&;&|0Kb_6BZ|O^(|Iq#k$~ak|tA(hh!@VBOKAr()LsGuGqV&0!y&Xp0^qg;3 z&#S4JbVbh7wcU1J-Ug~lpB6P*Ycl#fpWMRe~@rIm=Qpiu| zur3m4U~=FdQ0)1dKFMz=$~7|n5DwGS=*XmrIXEM3W8$j_nI)3cBqQOLj8V-?_+<+# zVnO4MNKtDeB5phTEiF*WWNh|Xym-2S^94?t5WR`R?68aKeabS3{mexIB_gi>Mf(HL%im|pYh=8hMG|@BSys11y&ImNQM&&H Dxy`5e From ac088e85b2da520e826e5ba13bf1976304f6c030 Mon Sep 17 00:00:00 2001 From: Chiss Date: Thu, 21 Aug 2014 13:35:31 +1000 Subject: [PATCH 5/5] Added some game flags Dragon escape changes --- .../src/nautilus/game/arcade/game/Game.java | 4 ++ .../game/games/dragonescape/DragonEscape.java | 9 ++- .../games/survivalgames/SurvivalGames.java | 12 ---- .../game/arcade/managers/GameFlagManager.java | 62 +++++++++++++++++++ .../arcade/managers/GameLobbyManager.java | 3 +- .../arcade/managers/GamePlayerManager.java | 3 +- 6 files changed, 76 insertions(+), 17 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index fb0b3cc67..fc1c6fece 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -143,6 +143,10 @@ public abstract class Game implements Listener public boolean WorldWeatherEnabled = false; public int WorldWaterDamage = 0; public boolean WorldBoundaryKill = true; + public boolean WorldBlockBurn = false; + public boolean WorldFireSpread = false; + public boolean WorldLeavesDecay = false; + public boolean WorldSoilTrample = false; public int HungerSet = -1; public int HealthSet = -1; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java index d6f0dbf6c..2ff0ded4d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/DragonEscape.java @@ -145,13 +145,13 @@ public class DragonEscape extends SoloGame @EventHandler public void MoveDragon(UpdateEvent event) - { + { if (event.getType() != UpdateType.TICK) return; if (_dragonData == null) return; - + _dragonData.Target = _waypoints.get(Math.min(_waypoints.size()-1, (GetWaypointIndex(_dragonData.Location) + 1))); _dragonData.Move(); @@ -165,11 +165,14 @@ public class DragonEscape extends SoloGame if (block.isLiquid()) blockIterator.remove(); + + else if (block.getRelative(BlockFace.UP).isLiquid()) + blockIterator.remove(); else if (WorldData.MapName.contains("Hell") && block.getY() < 30) blockIterator.remove(); - else if (WorldData.MapName.contains("Pirate") && block.getY() < 4) + else if (WorldData.MapName.contains("Pirate") && (block.getY() < 6)) blockIterator.remove(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index e13346506..fae09b7bc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -1315,18 +1315,6 @@ public class SurvivalGames extends SoloGame player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 1f); } - @EventHandler(priority = EventPriority.LOWEST) - public void CropTrample(PlayerInteractEvent event) - { - if (event.getAction() != Action.PHYSICAL) - return; - - if (event.getPlayer().getLocation().getBlock().getRelative(BlockFace.DOWN).getType() != Material.SOIL) - return; - - event.setCancelled(true); - } - @EventHandler public void CompassUpdate(UpdateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 3180ac725..24364eeaa 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -34,6 +34,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.PlayerDeathEvent; @@ -870,6 +874,64 @@ public class GameFlagManager implements Listener } } + @EventHandler(priority = EventPriority.LOWEST) + public void WorldSoilTrample(PlayerInteractEvent event) + { + if (event.getAction() != Action.PHYSICAL) + return; + + Game game = Manager.GetGame(); + if (game == null) return; + + if (game.WorldSoilTrample) + return; + + if (event.getPlayer().getLocation().getBlock().getRelative(BlockFace.DOWN).getType() != Material.SOIL) + return; + + event.setCancelled(true); + } + + @EventHandler + public void WorldBlockBurn(BlockBurnEvent event) + { + Game game = Manager.GetGame(); + if (game == null) return; + + if (game.WorldBlockBurn) + return; + + event.setCancelled(true); + } + + @EventHandler + public void WorldFireSpread(BlockIgniteEvent event) + { + Game game = Manager.GetGame(); + if (game == null) return; + + if (event.getCause() != IgniteCause.SPREAD) + return; + + if (game.WorldFireSpread) + return; + + if (event.getBlock().getType() == Material.FIRE) + event.setCancelled(true); + } + + @EventHandler + public void WorldLeavesDecay(BlockFromToEvent event) + { + Game game = Manager.GetGame(); + if (game == null) return; + + if (game.WorldLeavesDecay) + return; + + event.setCancelled(true); + } + @EventHandler public void SpectatorMessage(UpdateEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java index 148f33cd6..1e88d7fd4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java @@ -1017,7 +1017,8 @@ public class GameLobbyManager implements IPacketRunnable, Listener if (ent.GetKit().GetAvailability() == KitAvailability.Free || //Free donor.OwnsUnknownPackage(Manager.GetGame().GetName() + " " + ent.GetKit().GetName()) || //Green donor.OwnsUnknownPackage(Manager.GetServerConfig().ServerType + " ULTRA") || //Old - Single Game Ultra - Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER)) //STAFF + Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER) || //STAFF + Manager.GetServerConfig().Tournament) //Tournament { entityName = ent.GetKit().GetAvailability().GetColor() + entityName; } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java index 750c4283e..2a36516a6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java @@ -317,7 +317,8 @@ public class GamePlayerManager implements Listener if (kit.GetAvailability() == KitAvailability.Free || //Free donor.OwnsUnknownPackage(Manager.GetGame().GetName() + " " + kit.GetName()) || //Green donor.OwnsUnknownPackage(Manager.GetServerConfig().ServerType + " ULTRA") || //OLD - Single Game Ultras - Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER)) //STAFF + Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER) || //STAFF + Manager.GetServerConfig().Tournament) //Tournament { Manager.GetGame().SetKit(player, kit, true); }