diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java new file mode 100644 index 000000000..b2b12855b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java @@ -0,0 +1,80 @@ +package mineplex.core.leaderboard; + +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClient; +import mineplex.core.account.CoreClientManager; +import mineplex.core.spawn.command.SpawnCommand; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +/** + * Manages dynamic Leaderboard statistics. + * + * Used for recording stat events, retrieving customized leaderboards, etc. + * @author MrTwiggy + * + */ +public class LeaderboardManager extends MiniPlugin +{ + + private static LeaderboardManager _instance; // Singleton instance of Leaderboard Manager + private StatEventsRepository _statEvents; // 'statEvents' table repository. + private CoreClientManager _clientManager; + private String _serverGroup; + + /** + * Private class constructor to prevent non-singleton instances. + */ + public LeaderboardManager(JavaPlugin plugin, CoreClientManager clientManager) + { + super("Leaderboard Manager", plugin); + + _instance = this; + _clientManager = clientManager; + _statEvents = new StatEventsRepository(plugin); + _serverGroup = _plugin.getConfig().getString("serverstatus.group"); + } + + /** + * Attempt to trigger a stat event. + * @param player - the player responsible for the statistic + * @param stat - the display name of the statistic to be added + * @param value - the counter value used to increment the statistic + * @return true, if a stat event was successfully triggered and logged, false otherwise. + */ + public boolean attemptStatEvent(Player player, String stat, int gamemode, int value) + { + StatType type = StatType.getType(stat); + + return (type == null) ? false : onStatEvent(player, type, gamemode, value); + } + + /** + * Trigger a stat event to be recorded. + * @param player - the player responsible for the statistic + * @param type - the unique type id designating the statistic being recorded + * @param gamemode - the unique gamemode id associated with the stat event + * @param value - the counter value used to increment the statistic + * @return true, if the stat event was successfully triggered and logged, false otherwise. + */ + public boolean onStatEvent(Player player, StatType type, int gamemode, int value) + { + _statEvents.insertStatEvent(player.getName(), gamemode, _serverGroup, type.getTypeId(), value); + return true; + } + + @Override + public void AddCommands() + { + addCommand(new SetTournamentCommand(this)); + } + + /** + * @return the singleton instance for {@link LeaderboardManager}. + */ + public static LeaderboardManager getInstance() + { + return _instance; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/SetTournamentCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/SetTournamentCommand.java new file mode 100644 index 000000000..7e25605bf --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/SetTournamentCommand.java @@ -0,0 +1,27 @@ +package mineplex.core.leaderboard; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; + +import org.bukkit.entity.Player; + +public class SetTournamentCommand extends CommandBase +{ + public SetTournamentCommand(LeaderboardManager plugin) + { + super(plugin, Rank.ADMIN, "settournament", "set-tournament"); + } + + @Override + public void Execute(Player caller, String[] args) + { + // TODO: Implement set tournament command. + /*if (args.length == 3) + { + String statType = args[0]; + int gamemode = Integer.parseInt(args[1]); + int value = Integer.parseInt(args[2]); + LeaderboardManager.getInstance().attemptStatEvent(caller, statType, gamemode, value); + }*/ + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java new file mode 100644 index 000000000..2e0888f1e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatEventsRepository.java @@ -0,0 +1,69 @@ +package mineplex.core.leaderboard; + +import mineplex.core.database.RepositoryBase; +import mineplex.core.database.column.ColumnInt; +import mineplex.core.database.column.ColumnVarChar; + +import org.bukkit.plugin.java.JavaPlugin; + + +/** + * StatEventsRepository offers the ability to insert and log newly generated stat events. + * + * Intended for the purpose of statistical tracking of players. + * @author MrTwiggy + * + */ +public class StatEventsRepository extends RepositoryBase +{ + + // Insert or update stat events query + /*private static String INSERT_EVENT = + "INSERT INTO statEvents(accountId, gamemode, serverGroup, type, value, date) " + + "VALUES (?, ?, ?, ?, ?, CURRENT_DATE()) " + + "ON DUPLICATE KEY UPDATE value=value+";*/ + + private static String INSERT_EVENT = + "INSERT INTO statEvents(accountId, gamemode, serverGroup, type, value, date) " + + "SELECT accounts.id, ?, ?, ?, ?, CURRENT_DATE() " + + "FROM accounts WHERE name = ? " + + "ON DUPLICATE KEY UPDATE value=value+"; + + /** + * Class constructor + * @param plugin - the plugin responsible for instantiating this repository. + */ + public StatEventsRepository(JavaPlugin plugin) + { + super(plugin, "jdbc:mysql://db.mineplex.com:3306/Account?autoReconnect=true&failOverReadOnly=false&maxReconnects=10", "root", "tAbechAk3wR7tuTh"); + } + + @Override + protected void initialize() + { + //executeUpdate(CREATE_EVENTS_TABLE); + //executeUpdate(CREATE_STAT_RELATION_TABLE); + } + + @Override + protected void update() + { + + } + + /** + * Insert (or update) a new stat event record for today into the repository. + * @param accountId - the id of the account responsible for the stat event. + * @param gamemode - the id of the gamemode type at the time of the stat event. + * @param serverGroup - the server group id associated with the stat event. + * @param type - the type of stat event to be inserted (id of type). + * @param value - the integer based value denoting the actual statistic being logged. + */ + public void insertStatEvent(String playerName, int gamemode, String serverGroup, int type, int value) + { + // Hacky string concatanation - Don't judge me!! + // TODO: How to handle outside value block parameters + executeUpdate(INSERT_EVENT + value + ";", new ColumnInt("gamemode", gamemode), new ColumnVarChar("serverGroup", 100, serverGroup), + new ColumnInt("type", type), new ColumnInt("value", value), new ColumnVarChar("name", 100, playerName)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatType.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatType.java new file mode 100644 index 000000000..10663bae0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/StatType.java @@ -0,0 +1,48 @@ +package mineplex.core.leaderboard; + +/** + * An enumeration delegating the various types of statistics to be dynamically tracked. + * @author MrTwiggy + * + */ +public enum StatType +{ + WIN(1), + LOSS(2), + KILL(3), + DEATH(4); + + private int _typeId; // Unique id for stat type + public int getTypeId() { return _typeId; } + + /** + * Private class constructor + * @param typeId - the unique identifying id for this {@link StatType} + */ + private StatType(int typeId) + { + _typeId = typeId; + } + + /** + * @param stat - the display name for the stat type + * @return the {@link StatType} corresponding to the passed in {@code stat}, if one exists, + * null otherwise. + */ + public static StatType getType(String stat) + { + switch(stat.toUpperCase().trim()) + { + case "WINS": + return WIN; + case "LOSSES": + return LOSS; + case "KILLS": + return KILL; + case "DEATHS": + return DEATH; + default: + return null; + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java index 6984ac6fe..ecf47c906 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/Party.java @@ -6,6 +6,9 @@ import java.util.Collection; import java.util.Iterator; import mineplex.core.common.Rank; +import mineplex.core.common.jsonchat.ChildJsonMessage; +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; @@ -15,6 +18,8 @@ import mineplex.core.party.redis.RedisPartyData; import mineplex.serverdata.Region; import mineplex.serverdata.ServerGroup; import mineplex.serverdata.ServerManager; +import mineplex.serverdata.transfers.ServerTransfer; +import mineplex.serverdata.transfers.TransferCommand; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -29,7 +34,8 @@ public class Party private PartyManager _manager; private boolean _isHub; - private String _creator = null; + private String _creator; + private String _previousServer; private ArrayList _players = new ArrayList(); private NautHashMap _invitee = new NautHashMap(); @@ -47,6 +53,7 @@ public class Party _players = new ArrayList(Arrays.asList(partyData.getPlayers())); _creator = partyData.getLeader(); + _previousServer = partyData.getPreviousServer(); } public Party(PartyManager manager) @@ -135,12 +142,27 @@ public class Party // Instruct if (inviteeInParty) { - UtilPlayer.message(player, - F.main("Party", "Type " + F.link("/party leave") + " then " + F.link("/party " + GetLeader()) + " to join.")); + ChildJsonMessage message = new JsonMessage("").extra(C.mHead + "Party> " + C.mBody + "Type "); + + message.add(F.link("/party leave")).click(ClickEvent.RUN_COMMAND, "/party leave"); + + message.add(C.mBody + " then "); + + message.add(F.link("/party " + GetLeader())).click(ClickEvent.RUN_COMMAND, "/party " + GetLeader()); + + message.add(C.mBody + " to join."); + + message.sendToPlayer(player); } else { - UtilPlayer.message(player, F.main("Party", "Type " + F.link("/party " + GetLeader()) + " to join.")); + ChildJsonMessage message = new JsonMessage("").extra(C.mHead + "Party> " + C.mBody + "Type "); + + message.add(F.link("/party " + GetLeader())).click(ClickEvent.RUN_COMMAND, "/party " + GetLeader()); + + message.add(C.mBody + " to join."); + + message.sendToPlayer(player); } player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1.5f); @@ -191,7 +213,32 @@ public class Party _players.remove(player.getName()); _players.add(0, player.getName()); - Announce("Party Leadership returned to " + F.name(GetLeader()) + "."); + if (_informNewLeaderTimer < System.currentTimeMillis()) + { + Announce("Party Leadership returned to " + F.name(GetLeader()) + "."); + } + + if (_previousServer != null) + { + for (String playerName : _players) + { + Player p = Bukkit.getPlayerExact(playerName); + + if (p != null) + { + continue; + } + + TransferCommand transferCommand = new TransferCommand( + new ServerTransfer(playerName, _manager.getServerName())); + + transferCommand.setTargetServers(_previousServer); + + transferCommand.publish(); + } + + _previousServer = null; + } } } @@ -201,7 +248,7 @@ public class Party if (player.getName().equals(GetLeader())) { _players.remove(player.getName()); - _players.add(0, player.getName()); + _players.add(player.getName()); if (_informNewLeaderTimer < System.currentTimeMillis()) { @@ -365,20 +412,24 @@ public class Party } else { - if (UtilTime.elapsed(_partyOfflineTimer, online == 0 ? 15000 : 120000)) // 15 seconds for no players, 2 minutes if + if (UtilTime.elapsed(_partyOfflineTimer, online == 0 ? 5000 : 120000)) // 5 seconds for no players, 2 minutes if // one player. { return true; } } } + else if (_partyOfflineTimer > 0) + { + _partyOfflineTimer = -1; + } return false; } public void resetWaitingTime() { - _partyOfflineTimer = System.currentTimeMillis(); + _partyOfflineTimer = -1; } public void switchedServer() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java index 8d10394d5..752a30f30 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/PartyManager.java @@ -27,6 +27,7 @@ public class PartyManager extends MiniPlugin private CoreClientManager _clientManager; private PreferencesManager _preferenceManager; private Portal _portal; + private String _serverName; public HashSet _parties = new HashSet(); @@ -37,6 +38,7 @@ public class PartyManager extends MiniPlugin _portal = portal; _clientManager = clientManager; _preferenceManager = preferenceManager; + _serverName = GetPlugin().getConfig().getString("serverstatus.name"); ServerCommandManager.getInstance().registerCommandType("RedisPartyData", RedisPartyData.class, new RedisPartyHandler(this)); @@ -67,6 +69,11 @@ public class PartyManager extends MiniPlugin return party; } + public String getServerName() + { + return _serverName; + } + public void addParty(Party party) { for (Party parties : _parties) @@ -91,14 +98,25 @@ public class PartyManager extends MiniPlugin { party.switchedServer(); - RedisPartyData data = new RedisPartyData(party, event.getServer()); + boolean destLobby = event.getServer().equalsIgnoreCase("lobby"); + + RedisPartyData data = new RedisPartyData(party, destLobby ? _serverName : null); + + if (!destLobby) + { + data.setTargetServers(event.getServer()); + } + data.publish(); - for (Player player : party.GetPlayersOnline()) + if (!destLobby) { - if (player != event.getPlayer()) + for (Player player : party.GetPlayersOnline()) { - _portal.sendPlayerToServer(player, event.getServer()); + if (player != event.getPlayer()) + { + _portal.sendPlayerToServer(player, event.getServer()); + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java index 4755ad168..1c8fcbfbb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/commands/PartyCommand.java @@ -2,12 +2,17 @@ package mineplex.core.party.commands; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; +import mineplex.core.common.jsonchat.ChildJsonMessage; +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.party.Party; import mineplex.core.party.PartyManager; +import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -15,7 +20,10 @@ public class PartyCommand extends CommandBase { public PartyCommand(PartyManager plugin) { - super(plugin, Rank.ALL, new String[] {"party","z"}); + super(plugin, Rank.ALL, new String[] + { + "party", "z" + }); } @Override @@ -25,16 +33,16 @@ public class PartyCommand extends CommandBase { UtilPlayer.message(caller, F.main("Party", "Listing Party Commands;")); UtilPlayer.message(caller, F.value(0, "/party ", "Join/Create/Invite Player")); - UtilPlayer.message(caller, F.value(0, "/party leave", "Leave your current Party")); - UtilPlayer.message(caller, F.value(0, "/party kick ", "Kick player from your Party")); + UtilPlayer.message(caller, F.value(0, "/party leave", "Leave your current Party")); + UtilPlayer.message(caller, F.value(0, "/party kick ", "Kick player from your Party")); return; } - //Callers Party + // Callers Party Party party = Plugin.GetParty(caller); - //Leave + // Leave if (args[0].equalsIgnoreCase("leave")) { if (party == null) @@ -49,7 +57,7 @@ public class PartyCommand extends CommandBase return; } - //Leave + // Leave if (args[0].equalsIgnoreCase("kick")) { if (party == null) @@ -61,14 +69,15 @@ public class PartyCommand extends CommandBase if (party.GetLeader().equals(caller.getName())) { String target = UtilPlayer.searchCollection(caller, args[1], party.GetPlayers(), "Party ", true); - if (target == null) return; + if (target == null) + return; if (target.equals(caller.getName())) { UtilPlayer.message(caller, F.main("Party", "You cannot kick yourself from the Party.")); return; } - + party.KickParty(target); } else @@ -80,24 +89,28 @@ public class PartyCommand extends CommandBase return; } - //Main + // Main Player target = UtilPlayer.searchOnline(caller, args[0], true); - if (target == null) return; + if (target == null) + return; if (target.equals(caller)) { UtilPlayer.message(caller, F.main("Party", "You cannot Party with yourself.")); return; } - + // Preference check if (!Plugin.getPreferenceManager().Get(target).PartyRequests) { - UtilPlayer.message(caller, F.main("Party", "You may not party with " + F.name(UtilEnt.getName(target)) + "! They are not accepting party requests!")); + UtilPlayer.message( + caller, + F.main("Party", "You may not party with " + F.name(UtilEnt.getName(target)) + + "! They are not accepting party requests!")); return; } - //Invite or Suggest + // Invite or Suggest if (party != null) { if (party.GetPlayers().size() + party.GetInvitees().size() >= 16) @@ -105,36 +118,48 @@ public class PartyCommand extends CommandBase UtilPlayer.message(caller, "Your party cannot be larger than 16 players."); caller.playSound(caller.getLocation(), Sound.NOTE_BASS, 1f, 1.5f); } - //Decline + // Decline else if (party.GetPlayers().contains(target.getName())) { UtilPlayer.message(caller, F.main("Party", F.name(target.getName()) + " is already in the Party.")); caller.playSound(caller.getLocation(), Sound.NOTE_BASS, 1f, 1.5f); } - //Decline + // Decline else if (party.GetInvitees().contains(target.getName())) { UtilPlayer.message(caller, F.main("Party", F.name(target.getName()) + " is already invited to the Party.")); caller.playSound(caller.getLocation(), Sound.NOTE_BASS, 1f, 1.5f); } - //Invite + // Invite else if (party.GetLeader().equals(caller.getName())) { party.InviteParty(target, Plugin.GetParty(target) != null); } - //Suggest + // Suggest else { party.Announce(F.name(caller.getName()) + " suggested " + F.name(target.getName()) + " be invited to the Party."); - UtilPlayer.message(UtilPlayer.searchExact(party.GetLeader()), F.main("Party", "Type " + F.link("/party " + target.getName()) + " to invite them.")); + + Player leader = Bukkit.getPlayerExact(party.GetLeader()); + + if (leader != null) + { + ChildJsonMessage message = new JsonMessage("").extra(C.mHead + "Party> " + C.mBody + "Type "); + + message.add(F.link("/party " + target.getName())).click(ClickEvent.RUN_COMMAND, "/party " + target.getName()); + + message.add(C.mBody + " to invite them."); + + message.sendToPlayer(leader); + } } } - //Create or Join + // Create or Join else { Party targetParty = Plugin.GetParty(target); - //Try to Join + // Try to Join if (targetParty != null) { if (targetParty.GetInvitees().contains(caller.getName())) @@ -144,7 +169,7 @@ public class PartyCommand extends CommandBase } } - //Create + // Create party = Plugin.CreateParty(caller); party.InviteParty(target, Plugin.GetParty(target) != null); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java index bf2a7313e..f47f83391 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/party/redis/RedisPartyData.java @@ -8,13 +8,18 @@ public class RedisPartyData extends ServerCommand private String[] _players; private String _leader; + private String _previousServer; - public RedisPartyData(Party party, String newServer) + public RedisPartyData(Party party, String previousServer) { _players = party.GetPlayers().toArray(new String[0]); _leader = party.GetLeader(); - - setTargetServers(newServer); + _previousServer = previousServer; + } + + public String getPreviousServer() + { + return _previousServer; } public String[] getPlayers() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/teleport/Teleport.java b/Plugins/Mineplex.Core/src/mineplex/core/teleport/Teleport.java index 7ef1af74b..adc441846 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/teleport/Teleport.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/teleport/Teleport.java @@ -68,12 +68,12 @@ public class Teleport extends MiniPlugin runnable.cancel(); } - Player player = Bukkit.getPlayerExact(callback.getTarget()); + Player player = Bukkit.getPlayerExact(callback.getReceivingPlayer()); if (player != null) { ChildJsonMessage message = new JsonMessage("").extra(C.mHead + "Locate" + "> " + C.mBody + "Located [" + C.mElem - + callback.getPlayer() + C.mBody + "] at "); + + callback.getLocatedPlayer() + C.mBody + "] at "); message.add(C.cBlue + callback.getServer()).click(ClickEvent.RUN_COMMAND, "/server " + callback.getServer()); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateCallback.java b/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateCallback.java index 511c90496..32d469e87 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateCallback.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateCallback.java @@ -6,24 +6,24 @@ import mineplex.serverdata.ServerCommand; public class RedisLocateCallback extends ServerCommand { - private String _player; + private String _locatedPlayer; private String _server; - private String _target; + private String _receivingPlayer; private UUID _uuid; - public RedisLocateCallback(RedisLocate command, String server) + public RedisLocateCallback(RedisLocate command, String server, String targetName) { _uuid = command.getUUID(); - _target = command.getSender(); - _player = command.getTarget(); + _receivingPlayer = command.getSender(); + _locatedPlayer = targetName; _server = server; setTargetServers(command.getServer()); } - public String getPlayer() + public String getLocatedPlayer() { - return _player; + return _locatedPlayer; } public String getServer() @@ -31,9 +31,9 @@ public class RedisLocateCallback extends ServerCommand return _server; } - public String getTarget() + public String getReceivingPlayer() { - return _target; + return _receivingPlayer; } public UUID getUUID() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateHandler.java index daa472f20..cadcd5b1c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateHandler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/teleport/redis/RedisLocateHandler.java @@ -28,7 +28,7 @@ public class RedisLocateHandler implements CommandCallback if (target != null) { - RedisLocateCallback callback = new RedisLocateCallback(locate, _serverName); + RedisLocateCallback callback = new RedisLocateCallback(locate, _serverName, target.getName()); callback.publish(); } } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index ffef99e72..a6adf0e0a 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -101,7 +101,6 @@ public class Hub extends JavaPlugin implements IRelation Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName()); - PartyManager partyManager = new PartyManager(this, portal, clientManager, preferenceManager); AntiHack.Initialize(this, punish, portal, preferenceManager, clientManager); IgnoreManager ignoreManager = new IgnoreManager(this, clientManager, preferenceManager, portal); @@ -111,6 +110,9 @@ public class Hub extends JavaPlugin implements IRelation StatsManager statsManager = new StatsManager(this, clientManager); AchievementManager achievementManager = new AchievementManager(statsManager, clientManager, donationManager); + + PartyManager partyManager = new PartyManager(this, portal, clientManager, preferenceManager); + HubManager hubManager = new HubManager(this, blockRestore, clientManager, donationManager, new ConditionManager(this), disguiseManager, new TaskManager(this, webServerAddress), portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, new HologramManager(this)); QueueManager queueManager = new QueueManager(this, clientManager, donationManager, new EloManager(this, clientManager), partyManager); diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java index bd2f8a98f..d72a1cb5f 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/explosion/CustomExplosion.java @@ -43,6 +43,7 @@ public class CustomExplosion extends Explosion private boolean _dropItems = true; private boolean _damageBlocksEqually; private boolean _createFire; + private boolean _ignoreRate = true; public CustomExplosion(DamageManager manager, Location loc, float explosionSize, String deathCause) { @@ -51,6 +52,12 @@ public class CustomExplosion extends Explosion _manager = manager; _damageReason = deathCause; } + + public CustomExplosion setIgnoreRate(boolean ignoreRate) + { + _ignoreRate = ignoreRate; + return this; + } public CustomExplosion setBlocksDamagedEqually(boolean damageEqually) { @@ -185,7 +192,7 @@ public class CustomExplosion extends Explosion if (entity.getBukkitEntity() instanceof LivingEntity) { _manager.NewDamageEvent((LivingEntity) entity.getBukkitEntity(), _owner, null, - DamageCause.ENTITY_EXPLOSION, damage, true, true, false, _damageReason, _damageReason); + DamageCause.ENTITY_EXPLOSION, damage, true, _ignoreRate, false, _damageReason, _damageReason); } else { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index c8ddf1dcf..0d9b55a5e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -25,13 +25,13 @@ import mineplex.core.hologram.HologramManager; import mineplex.core.ignore.IgnoreManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.leaderboard.LeaderboardManager; import mineplex.core.memory.MemoryFix; import mineplex.core.message.MessageManager; import mineplex.core.monitor.LagMeter; import mineplex.core.mount.MountManager; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; -import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; @@ -92,6 +92,7 @@ public class Arcade extends JavaPlugin Creature creature = new Creature(this); ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager)); + LeaderboardManager leaderboardManager = new LeaderboardManager(this, _clientManager); new Spawn(this, serverStatusManager.getCurrentServerName()); Teleport teleport = new Teleport(this); Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); @@ -124,8 +125,6 @@ public class Arcade extends JavaPlugin CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, null); cosmeticManager.setInterfaceSlot(7); - PartyManager partyManager = new PartyManager(this, portal, _clientManager, preferenceManager); - //Arcade Manager _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, petManager, hologramManager, webServerAddress); 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 4c92680e5..5e5cd4872 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -58,6 +58,7 @@ import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.movement.Movement; import mineplex.core.packethandler.PacketHandler; +import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; @@ -162,6 +163,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation private HologramManager _hologramManager; private AchievementManager _achievementManager; private StatsManager _statsManager; + private PartyManager _partyManager; private TaskManager _taskManager; private ArcadeRepository _arcadeRepository; @@ -229,7 +231,8 @@ public class ArcadeManager extends MiniPlugin implements IRelation _projectileManager = projectileManager; _packetHandler = packetHandler; - + + _partyManager = new PartyManager(plugin, portal, _clientManager, preferences); _statsManager = new StatsManager(plugin, clientManager); _taskManager = new TaskManager(plugin, webAddress); _achievementManager = new AchievementManager(_statsManager, clientManager, donationManager); @@ -1172,4 +1175,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation HandlerList.unregisterAll(_classShop); } } + + public PartyManager getPartyManager() + { + return _partyManager; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index 4f0bc4603..3e67b2fb8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -5,78 +5,78 @@ import org.bukkit.Material; public enum GameType { //Mini - BaconBrawl("Bacon Brawl", Material.PORK, (byte)0, GameCategory.ARCADE), - Barbarians("A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.ARCADE), - Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL), - CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS), - ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS), - ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS), - ChampionsMOBA("Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS), - Christmas("Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS), - DeathTag("Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE), - DragonEscape("Dragon Escape", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE), - DragonEscapeTeams("Dragon Escape Teams", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE), - DragonRiders("Dragon Riders", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE), - Dragons("Dragons", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE), - DragonsTeams("Dragons Teams", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE), - Draw("Draw My Thing", Material.BOOK_AND_QUILL, (byte)0, GameCategory.CLASSICS), - Evolution("Evolution", Material.EMERALD, (byte)0, GameCategory.ARCADE), - FlappyBird("Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE), - Gravity("Gravity", Material.ENDER_PORTAL, (byte)0, GameCategory.ARCADE), - Halloween("Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS), - HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS), - Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE), - SurvivalGames("Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL), - SurvivalGamesTeams("Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL), - Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE), - MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS), - MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE), - MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE), - Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE), - Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE), - QuiverTeams("One in the Quiver Teams", Material.ARROW, (byte)0, GameCategory.ARCADE), - Runner("Runner", Material.LEATHER_BOOTS, (byte)0, GameCategory.ARCADE), - SearchAndDestroy("Search and Destroy", Material.TNT, (byte)0, GameCategory.SURVIVAL), - Sheep("Sheep Quest", Material.WOOL, (byte)4, GameCategory.ARCADE), - Smash("Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS), - SmashTeams("Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS), - SmashDomination("Super Smash Mobs Domination", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS), - Snake("Snake", Material.WOOL, (byte)0, GameCategory.ARCADE), - SneakyAssassins("Sneaky Assassins", Material.INK_SACK, (byte)0, GameCategory.ARCADE), - SnowFight("Snow Fight", Material.SNOW_BALL, (byte)0, GameCategory.ARCADE), - Spleef("Super Spleef", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE), - SpleefTeams("Super Spleef Teams", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE), - Stacker("Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE), - SquidShooter("Squid Shooter", Material.FIREWORK_CHARGE, (byte)0, GameCategory.ARCADE), - Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE), - TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE), - UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL), - WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE), - Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL), - ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL); + BaconBrawl("Bacon Brawl", Material.PORK, (byte)0, GameCategory.ARCADE, 1), + Barbarians("A Barbarians Life", Material.WOOD_AXE, (byte)0, GameCategory.ARCADE, 2), + Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), + CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), + ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), + ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), + ChampionsMOBA("Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), + Christmas("Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS, 8), + DeathTag("Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE, 9), + DragonEscape("Dragon Escape", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 10), + DragonEscapeTeams("Dragon Escape Teams", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 11), + DragonRiders("Dragon Riders", Material.DRAGON_EGG, (byte)0, GameCategory.ARCADE, 12), + Dragons("Dragons", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE, 13), + DragonsTeams("Dragons Teams", Material.ENDER_STONE, (byte)0, GameCategory.ARCADE, 14), + Draw("Draw My Thing", Material.BOOK_AND_QUILL, (byte)0, GameCategory.CLASSICS, 15), + Evolution("Evolution", Material.EMERALD, (byte)0, GameCategory.ARCADE, 16), + FlappyBird("Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE, 17), + Gravity("Gravity", Material.ENDER_PORTAL, (byte)0, GameCategory.ARCADE, 18), + Halloween("Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS, 19), + HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), + Horse("Horseback", Material.IRON_BARDING, (byte)0, GameCategory.ARCADE, 21), + SurvivalGames("Survival Games", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 22), + SurvivalGamesTeams("Survival Games Teams", Material.IRON_SWORD, (byte)0, GameCategory.SURVIVAL, 23), + Micro("Micro Battle", Material.LAVA_BUCKET, (byte)0, GameCategory.ARCADE, 24), + MineStrike("MineStrike", Material.TNT, (byte)0, GameCategory.CLASSICS, 25), + MineWare("MineWare", Material.PAPER, (byte)0, GameCategory.ARCADE, 26), + MilkCow("Milk the Cow", Material.MILK_BUCKET, (byte)0, GameCategory.ARCADE, 27), + Paintball("Super Paintball", Material.ENDER_PEARL, (byte)0, GameCategory.ARCADE, 28), + Quiver("One in the Quiver", Material.ARROW, (byte)0, GameCategory.ARCADE, 29), + QuiverTeams("One in the Quiver Teams", Material.ARROW, (byte)0, GameCategory.ARCADE, 30), + Runner("Runner", Material.LEATHER_BOOTS, (byte)0, GameCategory.ARCADE, 31), + SearchAndDestroy("Search and Destroy", Material.TNT, (byte)0, GameCategory.SURVIVAL, 32), + Sheep("Sheep Quest", Material.WOOL, (byte)4, GameCategory.ARCADE, 33), + Smash("Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 34), + SmashTeams("Super Smash Mobs Teams", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 35), + SmashDomination("Super Smash Mobs Domination", "Super Smash Mobs", Material.SKULL_ITEM, (byte)4, GameCategory.CLASSICS, 36), + Snake("Snake", Material.WOOL, (byte)0, GameCategory.ARCADE, 37), + SneakyAssassins("Sneaky Assassins", Material.INK_SACK, (byte)0, GameCategory.ARCADE, 38), + SnowFight("Snow Fight", Material.SNOW_BALL, (byte)0, GameCategory.ARCADE, 39), + Spleef("Super Spleef", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 40), + SpleefTeams("Super Spleef Teams", Material.IRON_SPADE, (byte)0, GameCategory.ARCADE, 41), + Stacker("Super Stacker", Material.BOWL, (byte)0, GameCategory.ARCADE, 42), + SquidShooter("Squid Shooter", Material.FIREWORK_CHARGE, (byte)0, GameCategory.ARCADE, 43), + Tug("Tug of Wool", Material.WHEAT, (byte)0, GameCategory.ARCADE, 44), + TurfWars("Turf Wars", Material.STAINED_CLAY, (byte)14, GameCategory.ARCADE, 45), + UHC("Ultra Hardcore", Material.GOLDEN_APPLE, (byte)0, GameCategory.SURVIVAL, 46), + WitherAssault("Wither Assault", Material.SKULL_ITEM, (byte)1, GameCategory.ARCADE, 47), + Wizards("Wizards", Material.BLAZE_ROD, (byte)0, GameCategory.SURVIVAL, 48), + ZombieSurvival("Zombie Survival", Material.SKULL_ITEM, (byte)2, GameCategory.SURVIVAL, 49); String _name; String _lobbyName; Material _mat; byte _data; GameCategory _gameCategory; + + private int _gameId; // Unique identifying id for this gamemode (used for statistics) + public int getGameId() { return _gameId; } - GameType(String name, Material mat, byte data, GameCategory gameCategory) + GameType(String name, Material mat, byte data, GameCategory gameCategory, int gameId) { - _name = name; - _lobbyName = name; - _mat = mat; - _data = data; - _gameCategory = gameCategory; + this(name, name, mat, data, gameCategory, gameId); } - GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory) + GameType(String name, String lobbyName, Material mat, byte data, GameCategory gameCategory, int gameId) { _name = name; _lobbyName = lobbyName; _mat = mat; _data = data; _gameCategory = gameCategory; + _gameId = gameId; } public String GetName() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java index 0017563f8..544680909 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/SpellType.java @@ -293,10 +293,10 @@ public enum SpellType // ❤ 15, // Mana cost 5, // Spell cooldown -2, // Mana cost change per level - -1, // Cooldown change per level + 0, // Cooldown change per level 15, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level / 2) + 2.5", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level / 2) + 2", C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 15", @@ -340,7 +340,7 @@ public enum SpellType // ❤ 0, // Cooldown change per level 10, // Item amount in loot - C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "(Spell Level x 1.5) + 2.5", + C.cGold + C.Bold + "Damage: " + C.Bold + C.cWhite + "Spell Level + 2", C.cGold + C.Bold + "Range: " + C.Bold + C.cWhite + "Spell Level x 10", diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java index 0ca6387c2..760f7ab89 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellImplode.java @@ -43,21 +43,6 @@ public class SpellImplode extends Spell implements SpellClick Location centerLocation = centerBlock.getLocation().clone().add(0.5, 0.5, 0.5); int size = (int) (1.5F + (getSpellLevel(p) * 0.7F)); - /* for (Entity entity : centerLocation.getWorld().getEntities()) - { - if (!(entity instanceof Player) || Wizards.IsAlive(entity)) - { - Location loc = entity.getLocation(); - - if (loc.distance(centerLocation) <= size * 2) - { - entity.setVelocity(centerLocation.toVector().subtract(loc.toVector()).normalize() - .multiply((size * 2D) / Math.max(1, loc.distance(centerLocation)))); - entity.setFallDistance(-2); - } - } - }*/ - for (int x = -size * 2; x <= size * 2; x++) { for (int y = -size; y <= size; y++) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java index a6150c9b9..68928a930 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellLance.java @@ -93,6 +93,8 @@ public class SpellLance extends Spell implements SpellClick explosion.setPlayer(player, false); explosion.setDropItems(false); + + explosion.setIgnoreRate(false); explosion.explode(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java index 80e7f4f41..48ef38ade 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellMagicMissile.java @@ -26,7 +26,7 @@ public class SpellMagicMissile extends Spell implements SpellClick final Vector direction = missileLocation.getDirection().normalize().multiply(0.3); final int maxRange = 15 * getSpellLevel(player); final int maxDings = maxRange * 3; - final int damage = 5 + getSpellLevel(player); + final int damage = 4 + getSpellLevel(player); new BukkitRunnable() { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java index 2dcf444f6..bd3f58e73 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/wizards/spells/SpellRumble.java @@ -50,7 +50,7 @@ public class SpellRumble extends Spell implements SpellClickBlock, SpellClick final BlockFace moveDirection = _radial[Math.round(player.getEyeLocation().getYaw() / 45f) & 0x7]; final int spellLevel = getSpellLevel(player); - final int damage = 5 + (spellLevel * 3); + final int damage = 4 + (spellLevel * 2); final int maxDist = 10 * spellLevel; player.getWorld().playEffect(target.getLocation(), Effect.STEP_SOUND, target.getTypeId()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameChatManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameChatManager.java index f62667d88..c1740fa94 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameChatManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameChatManager.java @@ -2,12 +2,11 @@ package nautilus.game.arcade.managers; import java.util.Iterator; -import mineplex.core.achievement.Achievement; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.party.Party; import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.GameType; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.Game.GameState; @@ -84,6 +83,24 @@ public class GameChatManager implements Listener rankStr = Rank.ULTRA.GetTag(true, true) + " "; } + if (event.getMessage().charAt(0) == '@') + { + //Party Chat + Party party = Manager.getPartyManager().GetParty(sender); + + if (party != null) + { + event.getRecipients().clear(); + + event.setMessage(event.getMessage().substring(1, event.getMessage().length())); + event.setFormat(levelStr + C.cDPurple + C.Bold + "Party " + C.cWhite + C.Bold + "%1$s " + C.cPurple + "%2$s"); + + event.getRecipients().addAll(party.GetPlayersOnline()); + + return; + } + } + //Base Format event.setFormat(dead + levelStr + rankStr + Manager.GetColor(sender) + "%1$s " + ChatColor.WHITE + "%2$s"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameStatManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameStatManager.java index c4687dce7..27f0fa540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameStatManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameStatManager.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.UUID; import mineplex.core.common.util.C; +import mineplex.core.leaderboard.LeaderboardManager; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; @@ -60,7 +61,13 @@ public class GameStatManager implements Listener { for (String stat : event.GetGame().GetStats().get(player).keySet()) { - Manager.GetStatsManager().incrementStat(player, stat, event.GetGame().GetStats().get(player).get(stat)); + int value = event.GetGame().GetStats().get(player).get(stat); + Manager.GetStatsManager().incrementStat(player, stat, value); + + // Leaderboard hook for logging appropriate stat events + // Note: Rejects stat events that are not of the appropriate types. + int gameId = event.GetGame().GetType().getGameId(); + LeaderboardManager.getInstance().attemptStatEvent(player, stat.split("\\.")[1], gameId, value); } } } diff --git a/Webpages/leaderboard.php b/Webpages/leaderboard.php index 4a13d4a04..835f2bd9c 100644 --- a/Webpages/leaderboard.php +++ b/Webpages/leaderboard.php @@ -27,8 +27,8 @@
Mineplex -

The Fall Invitational

-

Tournament Leaderboard

+

The Tournament

+

Leaderboard

@@ -39,9 +39,10 @@ Rank Player Wins - Losses - Score* - + - -