From 84cb803c6686493438ff41d526cb2100e4255d63 Mon Sep 17 00:00:00 2001 From: Sarah Date: Fri, 2 Jun 2017 13:22:12 +0200 Subject: [PATCH 01/14] Async db calls... --- .../quests/repository/QuestRepository.java | 95 ++++++++++++++----- 1 file changed, 69 insertions(+), 26 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java index 8a5cd8a08..4592781c1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/repository/QuestRepository.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.tuple.Triple; import mineplex.core.account.CoreClient; import mineplex.core.common.Pair; import mineplex.core.common.util.Callback; +import mineplex.core.common.util.UtilServer; import mineplex.core.quests.Quest; import mineplex.serverdata.database.DBPool; import mineplex.serverdata.database.RepositoryBase; @@ -42,56 +43,98 @@ public class QuestRepository extends RepositoryBase public void createTable() { - executeUpdate(CREATE_TABLE); + UtilServer.runAsync(new Runnable() + { + @Override + public void run() + { + executeUpdate(CREATE_TABLE); + } + }); } public void getQuests(CoreClient client, Callback>>> callback) { - executeQuery(FETCH_QUESTS, new ResultSetCallable() - { + UtilServer.runAsync(new Runnable() + { @Override - public void processResultSet(ResultSet resultSet) throws SQLException + public void run() { - ArrayList>> list = new ArrayList<>(); - while (resultSet.next()) - { - list.add(Pair.create(resultSet.getInt(1), Triple.of(resultSet.getInt(2), resultSet.getLong(4), resultSet.getInt(3)))); - } - callback.run(list); + executeQuery(FETCH_QUESTS, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + ArrayList>> list = new ArrayList<>(); + while (resultSet.next()) + { + list.add(Pair.create(resultSet.getInt(1), Triple.of(resultSet.getInt(2), resultSet.getLong(4), resultSet.getInt(3)))); + } + callback.run(list); + } + } ,new ColumnInt("accountId", client.getAccountId())); } - } ,new ColumnInt("accountId", client.getAccountId())); + }); } public void resetQuest(CoreClient client, Quest quest, boolean completed) { - if (completed) + UtilServer.runAsync(new Runnable() { - executeUpdate(COMPLETE_QUEST, new ColumnLong("lastCompleted", System.currentTimeMillis()), new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); - } - else - { - executeUpdate(RESET_QUEST, new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); - } + @Override + public void run() + { + if (completed) + { + executeUpdate(COMPLETE_QUEST, new ColumnLong("lastCompleted", System.currentTimeMillis()), new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + } + else + { + executeUpdate(RESET_QUEST, new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + } + } + }); } public void addQuest(CoreClient client, Quest quest) { - executeUpdate(START_QUEST, new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + UtilServer.runAsync(new Runnable() + { + @Override + public void run() + { + executeUpdate(START_QUEST, new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + } + }); } public void addNew(CoreClient client, Quest quest) { - executeInsert(INSTERT_NEW_QUEST, null, - new ColumnInt("accountId", client.getAccountId()), - new ColumnInt("questId", quest.getID()), - new ColumnInt("progress", 0), - new ColumnInt("questCompletion", 0), - new ColumnLong("lastCompleted", (long) 0)); + UtilServer.runAsync(new Runnable() + { + @Override + public void run() + { + executeInsert(INSTERT_NEW_QUEST, null, + new ColumnInt("accountId", client.getAccountId()), + new ColumnInt("questId", quest.getID()), + new ColumnInt("progress", 0), + new ColumnInt("questCompletion", 0), + new ColumnLong("lastCompleted", (long) 0)); + } + }); } public void incrementQuest(CoreClient client, Quest quest, int value) { - executeUpdate(INCREMENT_QUEST, new ColumnInt("progress", value), new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + UtilServer.runAsync(new Runnable() + { + @Override + public void run() + { + executeUpdate(INCREMENT_QUEST, new ColumnInt("progress", value), new ColumnInt("accountId", client.getAccountId()), new ColumnInt("questId", quest.getID())); + } + }); } } From 8541b984c6888cdbf67e72c44849ca260ff9c744 Mon Sep 17 00:00:00 2001 From: Sarah Date: Tue, 27 Jun 2017 23:15:25 +0200 Subject: [PATCH 02/14] Implement new Quests and fix older Quests --- .../src/mineplex/core/quests/TriggerType.java | 2 +- .../src/nautilus/game/arcade/game/Game.java | 6 +- .../game/games/paintball/Paintball.java | 3 + .../paintball/quests/ReviveQuestTracker.java | 32 +++++++++ .../game/games/turfforts/TurfForts.java | 2 + .../quests/BlockBreakQuestTracker.java | 33 +++++++++ .../arcade/quest/CollectQuestTracker.java | 71 +++++++++++++++++++ .../arcade/quest/FirstBloodQuestTracker.java | 31 ++++++++ .../game/arcade/quest/HitQuestTracker.java | 63 ++++++++++++++++ .../game/arcade/quest/QuestTracker.java | 3 + 10 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/quests/ReviveQuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/quests/BlockBreakQuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/FirstBloodQuestTracker.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/TriggerType.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/TriggerType.java index 861999fae..bf8a64b55 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/TriggerType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/TriggerType.java @@ -8,7 +8,7 @@ package mineplex.core.quests; public enum TriggerType { - KILL("Kill"), DIE("Die"), WIN("Win"), LOSE("Lose"), COLLECT("Collect"), PLAY("Play"), COMPLETE("Complete"); + KILL("Kill"), DIE("Die"), WIN("Win"), LOSE("Lose"), COLLECT("Collect"), PLAY("Play"), COMPLETE("Complete"), HIT("Hit"), FIRST_BLOOD("First Blood"); private String _name; 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 be505ed11..3bf2f1a57 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 @@ -43,6 +43,8 @@ import nautilus.game.arcade.managers.chat.ChatStatData; import nautilus.game.arcade.managers.lobby.LobbyManager; import nautilus.game.arcade.quest.ChestOpenQuestTracker; import nautilus.game.arcade.quest.CollectQuestTracker; +import nautilus.game.arcade.quest.FirstBloodQuestTracker; +import nautilus.game.arcade.quest.HitQuestTracker; import nautilus.game.arcade.quest.KillEntityQuestTracker; import nautilus.game.arcade.quest.KillQuestTracker; import nautilus.game.arcade.quest.ParticipateQuestTracker; @@ -433,7 +435,9 @@ public abstract class Game extends ListenerComponent implements Lifetimed new ChestOpenQuestTracker(this), new KillEntityQuestTracker(this), new PlayGameQuestTracker(this), - new ParticipateQuestTracker(this)); + new ParticipateQuestTracker(this), + new HitQuestTracker(this), + new FirstBloodQuestTracker(this)); Manager.getResourcePackManager().setResourcePack(gameType.getResourcePackUrls(this), gameType.isEnforceResourcePack(this)); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java index e7f509b4e..063a76d36 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/Paintball.java @@ -71,6 +71,7 @@ import nautilus.game.arcade.game.games.paintball.kits.KitMachineGun; import nautilus.game.arcade.game.games.paintball.kits.KitRifle; import nautilus.game.arcade.game.games.paintball.kits.KitShotgun; import nautilus.game.arcade.game.games.paintball.kits.KitSniper; +import nautilus.game.arcade.game.games.paintball.quests.ReviveQuestTracker; import nautilus.game.arcade.game.games.paintball.trackers.KillingSpreeTracker; import nautilus.game.arcade.game.games.paintball.trackers.LastStandStatTracker; import nautilus.game.arcade.game.games.paintball.trackers.MedicStatTracker; @@ -125,6 +126,8 @@ public class Paintball extends TeamGame DamageTaken, DamageDealt ); + + registerQuestTrackers(new ReviveQuestTracker(this)); new CompassModule() .setGiveCompass(true) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/quests/ReviveQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/quests/ReviveQuestTracker.java new file mode 100644 index 000000000..400515b3a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/paintball/quests/ReviveQuestTracker.java @@ -0,0 +1,32 @@ +package nautilus.game.arcade.game.games.paintball.quests; + +import org.bukkit.event.EventHandler; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.paintball.events.ReviveEvent; +import nautilus.game.arcade.quest.QuestTracker; + +/** + * ReviveQuestTracker + * + * @author xXVevzZXx + */ +public class ReviveQuestTracker extends QuestTracker +{ + + public ReviveQuestTracker(Game game) + { + super(game, TriggerType.COLLECT); + } + + @EventHandler + public void onHit(ReviveEvent event) + { + if (!getGame().IsLive()) + return; + + incrementQuests(event.getPlayer(), 1, "Revive", getGame().GetKit(event.getPlayer()).GetName() + "Kit"); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java index 93c2fb37c..8e85f9e16 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java @@ -58,6 +58,7 @@ import nautilus.game.arcade.game.TeamGame; import nautilus.game.arcade.game.games.turfforts.kits.KitInfiltrator; import nautilus.game.arcade.game.games.turfforts.kits.KitMarksman; import nautilus.game.arcade.game.games.turfforts.kits.KitShredder; +import nautilus.game.arcade.game.games.turfforts.quests.BlockBreakQuestTracker; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.managers.chat.ChatStatData; @@ -171,6 +172,7 @@ public class TurfForts extends TeamGame new ChatStatData("BlocksBroken", "Blocks Broken", true) ); + registerQuestTrackers(new BlockBreakQuestTracker(this)); new CompassModule() .setGiveCompass(true) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/quests/BlockBreakQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/quests/BlockBreakQuestTracker.java new file mode 100644 index 000000000..f15b21e37 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/quests/BlockBreakQuestTracker.java @@ -0,0 +1,33 @@ +package nautilus.game.arcade.game.games.turfforts.quests; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.turfforts.TurfForts; +import nautilus.game.arcade.quest.QuestTracker; + +/** + * BlockBreakQuestTracker + * + * @author xXVevzZXx + */ +public class BlockBreakQuestTracker extends QuestTracker +{ + + public BlockBreakQuestTracker(Game game) + { + super(game, TriggerType.COLLECT); + } + + @EventHandler + public void onHit(TurfForts.ShredBlockEvent event) + { + if (!getGame().IsLive()) + return; + + incrementQuests((Player) event.getArrow().getShooter(), 1, "Block Break", getGame().GetKit((Player) event.getArrow().getShooter()).GetName() + "Kit"); + } +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java index d8ad07885..83367508e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java @@ -5,14 +5,18 @@ import java.util.ArrayList; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.block.Chest; import org.bukkit.block.DoubleChest; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -30,6 +34,7 @@ public class CollectQuestTracker extends QuestTracker { private ArrayList _itemsAvailable = new ArrayList<>(); private ArrayList _usedChests = new ArrayList<>(); + private ArrayList _usedBlocks = new ArrayList<>(); public CollectQuestTracker(Game game) { @@ -45,6 +50,72 @@ public class CollectQuestTracker extends QuestTracker _usedChests.clear(); } + @EventHandler(priority=EventPriority.HIGHEST) + public void blockRegister(BlockPlaceEvent event) + { + if (!getGame().IsLive()) + return; + + if (event.isCancelled()) + return; + + if (event.getBlockPlaced().getType() == Material.IRON_ORE + || event.getBlockPlaced().getType() == Material.GOLD_ORE) + { + _usedBlocks.add(event.getBlock().getLocation()); + } + + } + + @EventHandler(priority=EventPriority.HIGHEST) + public void itemRegister(BlockBreakEvent event) + { + if (!getGame().IsLive()) + return; + + if (event.isCancelled()) + return; + + if (_usedBlocks.contains(event.getBlock().getLocation())) + return; + + for (ItemStack item : event.getBlock().getDrops()) + { + _itemsAvailable.add(item); + } + } + + @EventHandler(priority=EventPriority.HIGHEST) + public void itemPickup(PlayerPickupItemEvent event) + { + if (!getGame().IsLive()) + return; + + if (event.isCancelled()) + return; + + ItemStack item = event.getItem().getItemStack(); + ItemStack fromList = null; + + for (ItemStack available : _itemsAvailable) + { + if (available.getType() == item.getType()) + fromList = available; + } + + if (fromList == null) + return; + + _itemsAvailable.remove(fromList); + + String itemName = item.getType().toString(); + + if (item.hasItemMeta()) + itemName = item.getItemMeta().getDisplayName(); + + incrementQuests(event.getPlayer(), item.getAmount(), ChatColor.stripColor(itemName)); + } + @EventHandler(priority=EventPriority.HIGHEST) public void chestRegister(PlayerInteractEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/FirstBloodQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/FirstBloodQuestTracker.java new file mode 100644 index 000000000..22b7f79c4 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/FirstBloodQuestTracker.java @@ -0,0 +1,31 @@ +package nautilus.game.arcade.quest; + +import org.bukkit.event.EventHandler; + +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.events.FirstBloodEvent; +import nautilus.game.arcade.game.Game; + +/** + * FirstBloodQuestTracker + * + * @author xXVevzZXx + */ +public class FirstBloodQuestTracker extends QuestTracker +{ + + public FirstBloodQuestTracker(Game game) + { + super(game, TriggerType.FIRST_BLOOD); + } + + @EventHandler + public void onHit(FirstBloodEvent event) + { + if (!getGame().IsLive()) + return; + + incrementQuests(event.getPlayer(), 1, getGame().GetKit(event.getPlayer()).GetName() + "Kit"); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java new file mode 100644 index 000000000..107048e14 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java @@ -0,0 +1,63 @@ +package nautilus.game.arcade.quest; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.ProjectileHitEvent; + +import mineplex.core.common.util.UtilItem; +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.game.Game; + +/** + * HitQuestTracker + * + * @author xXVevzZXx + */ +public class HitQuestTracker extends QuestTracker +{ + + public HitQuestTracker(Game game) + { + super(game, TriggerType.HIT); + } + + @EventHandler + public void onHit(EntityDamageByEntityEvent event) + { + if (!getGame().IsLive()) + return; + + if (!(event.getEntity() instanceof Player)) + return; + + incrementQuests((Player) event.getDamager(), 1, "Player", getGame().GetKit((Player) event.getDamager()).GetName() + "Kit"); + } + + @EventHandler + public void onProjectileHit(ProjectileHitEvent event) + { + if (!getGame().IsLive()) + return; + + if (!(event.getEntity().getShooter() instanceof Player)) + return; + + Item itemEntity = (Item) event.getEntity(); + String item = itemEntity.getItemStack().getType().toString(); + + if (UtilItem.isAxe(itemEntity.getItemStack().getType())) + { + item = "Axe"; + } + + Entity ent = event.getEntity().getLastDamageCause().getEntity(); + if (ent instanceof Player) + { + incrementQuests((Player) event.getEntity().getShooter(), 1, "Player", item, getGame().GetKit((Player) event.getEntity().getShooter()).GetName() + "Kit"); + } + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java index c34a50efc..d615bcd9d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/QuestTracker.java @@ -42,6 +42,9 @@ public class QuestTracker implements Listener public void incrementQuests(Player player, int value, String... items) { + if (getGame().getArcadeManager().GetGameHostManager().isPrivateServer()) + return; + if (canProgressQuests()) { for (Quest quest : getGame().getArcadeManager().getQuestManager().getAvailableQuests()) From 1d046ff11918cfebf01548858610867014c8e5cb Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 5 Jul 2017 23:38:24 +0200 Subject: [PATCH 03/14] Add "all" to the GetMineplexMission Command, dont let specs get chest quest progress --- .../core/quests/command/GetQuestCommand.java | 38 +++++++++++++++---- .../game/games/dragonescape/DragonEscape.java | 3 +- .../arcade/quest/ChestOpenQuestTracker.java | 3 ++ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java index 1b7fe9cc8..867779ee7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java @@ -1,5 +1,7 @@ package mineplex.core.quests.command; +import java.util.ArrayList; + import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -7,6 +9,7 @@ import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.quests.Quest; import mineplex.core.quests.QuestManager; @@ -37,19 +40,40 @@ public class GetQuestCommand extends CommandBase return; } - Player player = caller; + ArrayList players = new ArrayList<>(); if (args.length == 2) { if (UtilPlayer.searchExact(args[1]) != null) - player = UtilPlayer.searchExact(args[1]); + { + players.add(UtilPlayer.searchExact(args[1])); + } + else + { + if (args[1].equalsIgnoreCase("all")) + { + players.addAll(UtilServer.getPlayersCollection()); + } + } } Quest quest = Plugin.getQuestByID(Integer.parseInt(args[0])); - Plugin.addNewQuest(player, quest); - UtilPlayer.message(player, F.main(QuestManager.QUEST_NAME, "Added " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName())); - - if (caller != player) - UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + player.getName())); + for (Player player : players) + { + Plugin.addNewQuest(player, quest); + UtilPlayer.message(player, F.main(QuestManager.QUEST_NAME, "Added " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName())); + + + if (args[1].equalsIgnoreCase("all")) + { + UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + "everyone")); + } + else + { + if (caller != players.get(0)) + UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + player.getName())); + + } + } } } 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 9646a217c..38abce9fb 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 @@ -8,7 +8,6 @@ import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import mineplex.core.common.Pair; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; @@ -34,6 +33,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scoreboard.Team; import org.bukkit.util.Vector; +import mineplex.core.common.Pair; import mineplex.core.common.block.BlockData; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -52,6 +52,7 @@ import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/ChestOpenQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/ChestOpenQuestTracker.java index 30cbb77d2..c7a935560 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/ChestOpenQuestTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/ChestOpenQuestTracker.java @@ -38,6 +38,9 @@ public class ChestOpenQuestTracker extends QuestTracker if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (!getGame().IsAlive(event.getPlayer())) + return; + if (event.getClickedBlock().getType() != Material.CHEST) return; From 8e0bb180764c378890299d2e05558fdb15f6c1fc Mon Sep 17 00:00:00 2001 From: Sarah Date: Thu, 6 Jul 2017 22:55:34 +0200 Subject: [PATCH 04/14] Fixes of current and new missions --- .../core/quests/command/GetQuestCommand.java | 16 ++++++---- .../src/nautilus/game/arcade/game/Game.java | 13 +++++++- .../game/games/dragonescape/DragonEscape.java | 6 ++++ .../quests/DragonEscapeWinQuestTracker.java | 30 +++++++++++++++++++ .../arcade/quest/CollectQuestTracker.java | 26 ++++++++-------- .../game/arcade/quest/HitQuestTracker.java | 26 ++++++++-------- 6 files changed, 84 insertions(+), 33 deletions(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/quests/DragonEscapeWinQuestTracker.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java index 867779ee7..414ac6b48 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/quests/command/GetQuestCommand.java @@ -55,6 +55,10 @@ public class GetQuestCommand extends CommandBase } } } + else + { + players.add(caller); + } Quest quest = Plugin.getQuestByID(Integer.parseInt(args[0])); @@ -64,16 +68,16 @@ public class GetQuestCommand extends CommandBase UtilPlayer.message(player, F.main(QuestManager.QUEST_NAME, "Added " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName())); - if (args[1].equalsIgnoreCase("all")) - { - UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + "everyone")); - } - else + if (!args[1].equalsIgnoreCase("all")) { if (caller != players.get(0)) UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + player.getName())); - } } + + if (args[1].equalsIgnoreCase("all")) + { + UtilPlayer.message(caller, F.main(QuestManager.QUEST_NAME, "You gave the " + QuestManager.QUEST_NAME + ": " + ChatColor.YELLOW + quest.getName() + ChatColor.GRAY + " to " + ChatColor.YELLOW + "everyone")); + } } } 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 39596d508..7f980d389 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 @@ -3,6 +3,7 @@ package nautilus.game.arcade.game; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import mineplex.core.Managers; +import mineplex.core.MiniPlugin; import mineplex.core.antihack.AntiHack; import mineplex.core.arcadeevents.CoreGameStartEvent; import mineplex.core.arcadeevents.CoreGameStopEvent; @@ -1778,6 +1779,16 @@ public abstract class Game extends ListenerComponent implements Lifetimed { return _questTrackers; } + + public > T getQuestTracker(Class clazz) + { + for (QuestTracker tracker : _questTrackers) + { + if (tracker.getClass().equals(clazz)) + return clazz.cast(tracker); + } + return null; + } @EventHandler public void onHangingBreak(HangingBreakEvent event) @@ -2057,7 +2068,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public void onQuestBuy(QuestInteractEvent event) { if (GetState() == GameState.Live || GetState() == GameState.Prepare || GetState() == GameState.End) - event.setCancelled("You cant interact with " + QuestManager.QUEST_NAME + "s while you are ingame!"); + event.setCancelled("You can't interact with " + QuestManager.QUEST_NAME + "s while you are ingame!"); } public NautHashMap getDeadBodies() 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 38abce9fb..8a9272463 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 @@ -62,6 +62,7 @@ import nautilus.game.arcade.game.games.dragonescape.kits.KitDigger; import nautilus.game.arcade.game.games.dragonescape.kits.KitDisruptor; import nautilus.game.arcade.game.games.dragonescape.kits.KitLeaper; import nautilus.game.arcade.game.games.dragonescape.kits.KitWarper; +import nautilus.game.arcade.game.games.dragonescape.quests.DragonEscapeWinQuestTracker; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.managers.chat.ChatStatData; @@ -144,6 +145,8 @@ public class DragonEscape extends SoloGame BlankLine, new ChatStatData("kit", "Kit", true) ); + + registerQuestTrackers(new DragonEscapeWinQuestTracker(this)); new CompassModule() .setGiveCompass(true) @@ -487,7 +490,10 @@ public class DragonEscape extends SoloGame AddGems(_winner, 10, "Course Complete", false, false); if (places.size() >= 1) + { AddGems(places.get(0), 20, "1st Place", false, false); + getQuestTracker(DragonEscapeWinQuestTracker.class).increment(places.get(0)); + } if (places.size() >= 2) AddGems(places.get(1), 15, "2nd Place", false, false); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/quests/DragonEscapeWinQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/quests/DragonEscapeWinQuestTracker.java new file mode 100644 index 000000000..b47de5575 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/dragonescape/quests/DragonEscapeWinQuestTracker.java @@ -0,0 +1,30 @@ +package nautilus.game.arcade.game.games.dragonescape.quests; + +import org.bukkit.entity.Player; + +import mineplex.core.common.util.UtilServer; +import mineplex.core.quests.TriggerType; + +import nautilus.game.arcade.Arcade; +import nautilus.game.arcade.game.games.dragonescape.DragonEscape; +import nautilus.game.arcade.quest.QuestTracker; + +/** + * DragonEscapeWinQuestTracker + * + * @author xXVevzZXx + */ +public class DragonEscapeWinQuestTracker extends QuestTracker +{ + + public DragonEscapeWinQuestTracker(DragonEscape game) + { + super(game, TriggerType.COMPLETE); + } + + public void increment(Player player) + { + incrementQuests(player, 1, ((Arcade) UtilServer.getPlugin()).getServerConfig().getServerGroup().getPrefix(), getGame().GetKit(player).GetName() + "Kit", "Parkour"); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java index 83367508e..9bcc6165e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/CollectQuestTracker.java @@ -1,5 +1,6 @@ package nautilus.game.arcade.quest; +import java.awt.dnd.DragSourceDropEvent; import java.util.ArrayList; import org.bukkit.ChatColor; @@ -15,6 +16,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; @@ -33,6 +35,7 @@ import nautilus.game.arcade.game.Game; public class CollectQuestTracker extends QuestTracker { private ArrayList _itemsAvailable = new ArrayList<>(); + private ArrayList _badItems = new ArrayList<>(); private ArrayList _usedChests = new ArrayList<>(); private ArrayList _usedBlocks = new ArrayList<>(); @@ -67,6 +70,12 @@ public class CollectQuestTracker extends QuestTracker } + @EventHandler(priority=EventPriority.HIGHEST) + public void itemRegister(PlayerDropItemEvent event) + { + _badItems.add(event.getItemDrop().getItemStack()); + } + @EventHandler(priority=EventPriority.HIGHEST) public void itemRegister(BlockBreakEvent event) { @@ -76,12 +85,12 @@ public class CollectQuestTracker extends QuestTracker if (event.isCancelled()) return; - if (_usedBlocks.contains(event.getBlock().getLocation())) + if (!_usedBlocks.contains(event.getBlock().getLocation())) return; for (ItemStack item : event.getBlock().getDrops()) { - _itemsAvailable.add(item); + _badItems.add(item); } } @@ -95,19 +104,12 @@ public class CollectQuestTracker extends QuestTracker return; ItemStack item = event.getItem().getItemStack(); - ItemStack fromList = null; - for (ItemStack available : _itemsAvailable) + if (_badItems.contains(item)) { - if (available.getType() == item.getType()) - fromList = available; - } - - if (fromList == null) + _badItems.remove(item); return; - - _itemsAvailable.remove(fromList); - + } String itemName = item.getType().toString(); if (item.hasItemMeta()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java index 107048e14..71070aaf1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/quest/HitQuestTracker.java @@ -9,6 +9,7 @@ import org.bukkit.event.entity.ProjectileHitEvent; import mineplex.core.common.util.UtilItem; import mineplex.core.quests.TriggerType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.Game; @@ -34,30 +35,27 @@ public class HitQuestTracker extends QuestTracker if (!(event.getEntity() instanceof Player)) return; - incrementQuests((Player) event.getDamager(), 1, "Player", getGame().GetKit((Player) event.getDamager()).GetName() + "Kit"); + + Item itemEntity = (Item) event.getEntity(); + String item = itemEntity.getItemStack().getType().toString(); + + incrementQuests((Player) event.getDamager(), 1, "Player", item, getGame().GetKit((Player) event.getDamager()).GetName() + "Kit"); } @EventHandler - public void onProjectileHit(ProjectileHitEvent event) + public void onProjectileHit(CustomDamageEvent event) { if (!getGame().IsLive()) return; - if (!(event.getEntity().getShooter() instanceof Player)) + if (event.GetReason() == null) return; - Item itemEntity = (Item) event.getEntity(); - String item = itemEntity.getItemStack().getType().toString(); + if (!event.GetReason().contains("Axe Thrower")) + return; - if (UtilItem.isAxe(itemEntity.getItemStack().getType())) - { - item = "Axe"; - } + System.out.println("Test2"); - Entity ent = event.getEntity().getLastDamageCause().getEntity(); - if (ent instanceof Player) - { - incrementQuests((Player) event.getEntity().getShooter(), 1, "Player", item, getGame().GetKit((Player) event.getEntity().getShooter()).GetName() + "Kit"); - } + incrementQuests(event.GetDamagerPlayer(true), 1, "Player", "Axe", getGame().GetKit(event.GetDamagerPlayer(true)).GetName() + "Kit"); } } From ce6ee670ed40a116256a103740ce453ae1591339 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Fri, 7 Jul 2017 06:44:19 -0400 Subject: [PATCH 05/14] Use a try-with-resources for gem hunters redis calls --- .../death/quitnpc/QuitNPCRepository.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java index c01b2d91e..379093f82 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java @@ -6,6 +6,7 @@ import java.util.concurrent.CompletableFuture; import mineplex.core.common.util.UtilServer; import mineplex.serverdata.Region; import mineplex.serverdata.redis.RedisRepository; +import redis.clients.jedis.Jedis; public class QuitNPCRepository extends RedisRepository { @@ -18,16 +19,34 @@ public class QuitNPCRepository extends RedisRepository public CompletableFuture loadNpcServer(UUID uuid) { - return CompletableFuture.supplyAsync(() -> getResource(false).get(getKey(REDIS_KEY_PREFIX + uuid.toString()))); + return CompletableFuture.supplyAsync(() -> + { + try (Jedis jedis = getResource(false)) + { + return getResource(false).get(getKey(REDIS_KEY_PREFIX + uuid.toString())); + } + }); } public void deleteNpc(UUID uuid) { - UtilServer.runAsync(() -> getResource(true).del(getKey(REDIS_KEY_PREFIX + uuid.toString()))); + UtilServer.runAsync(() -> + { + try (Jedis jedis = getResource(true)) + { + jedis.del(getKey(REDIS_KEY_PREFIX + uuid.toString())); + } + }); } public void insertNpc(UUID uuid, String serverName) { - UtilServer.runAsync(() -> getResource(true).setex(REDIS_KEY_PREFIX + uuid.toString(), 60, serverName)); + UtilServer.runAsync(() -> + { + try (Jedis jedis = getResource(true)) + { + jedis.setex(REDIS_KEY_PREFIX + uuid.toString(), 60, serverName); + } + }); } } \ No newline at end of file From f73c78809ab7864034c47889bdebb24c4ad5a1d8 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Fri, 7 Jul 2017 06:47:15 -0400 Subject: [PATCH 06/14] Whoops, forgot to change a line --- .../mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java index 379093f82..ce0dc8a9d 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java @@ -23,7 +23,7 @@ public class QuitNPCRepository extends RedisRepository { try (Jedis jedis = getResource(false)) { - return getResource(false).get(getKey(REDIS_KEY_PREFIX + uuid.toString())); + return jedis.get(getKey(REDIS_KEY_PREFIX + uuid.toString())); } }); } From dd128244023ebe428817657c4295413100266009 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Fri, 7 Jul 2017 07:13:31 -0400 Subject: [PATCH 07/14] Fix NPE in LootModule --- .../src/mineplex/gemhunters/loot/LootModule.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java index 9aa42e3ac..07e0afb7c 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java @@ -672,6 +672,10 @@ public class LootModule extends MiniPlugin { for (LootItemReward reward : _itemRewards) { + if (reward.getPlayer() == null) + { + continue; + } if (reward.getPlayer().equals(event.getEntity())) { reward.death(event); From c0cc3789b14dec71afe48f08e7c0ac01be277a16 Mon Sep 17 00:00:00 2001 From: cnr Date: Fri, 7 Jul 2017 16:45:04 -0700 Subject: [PATCH 08/14] Fix server tps metadata key --- .../core/antihack/logging/builtin/ServerInfoMetadata.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/ServerInfoMetadata.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/ServerInfoMetadata.java index 18c64a3c2..cd937ec64 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/ServerInfoMetadata.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/logging/builtin/ServerInfoMetadata.java @@ -14,7 +14,7 @@ public class ServerInfoMetadata extends AnticheatMetadata private static final String KEY_SERVER_NAME = "server-name"; private static final String KEY_SERVER_REGION = "server-region"; private static final String KEY_SERVER_GROUP = "server-group"; - private static final String KEY_SERVER_TPS = ""; + private static final String KEY_SERVER_TPS = "server-tps"; @Override public String getId() From cecc3614b8ccdd6d3efca05772acbf5b03676ab4 Mon Sep 17 00:00:00 2001 From: cnr Date: Tue, 11 Jul 2017 23:17:58 -0700 Subject: [PATCH 09/14] Set the correct key in QuitNPCRepository --- .../mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java index ce0dc8a9d..160e5352c 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/quitnpc/QuitNPCRepository.java @@ -45,7 +45,7 @@ public class QuitNPCRepository extends RedisRepository { try (Jedis jedis = getResource(true)) { - jedis.setex(REDIS_KEY_PREFIX + uuid.toString(), 60, serverName); + jedis.setex(getKey(REDIS_KEY_PREFIX + uuid.toString()), 60, serverName); } }); } From c695bb570eb54f47c9e6a856874baf4dbb663e25 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Mon, 10 Jul 2017 03:53:51 -0400 Subject: [PATCH 10/14] Fix several thread-related issues in the leaderboard system --- .../core/leaderboard/Leaderboard.java | 28 +++-- .../core/leaderboard/LeaderboardManager.java | 2 +- .../leaderboard/LeaderboardRepository.java | 108 +++++++++--------- 3 files changed, 78 insertions(+), 60 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java index c90639b66..fd72e005b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/Leaderboard.java @@ -15,13 +15,13 @@ import mineplex.core.leaderboard.LeaderboardRepository.LeaderboardSQLType; public class Leaderboard { - private String _display; - private Pair _statDisplay; - private String[] _statNames; - private int[] _statIds; - private int _size, _start; - private LeaderboardSQLType _type; - private Location _loc; + private final String _display; + private final Pair _statDisplay; + private final String[] _statNames; + private final int[] _statIds; + private final int _size, _start; + private final LeaderboardSQLType _type; + private final Location _loc; private Hologram _holo; public Leaderboard(String display, Pair statDisplayNames, String[] statNames, LeaderboardSQLType type, Location displayLoc, int size) @@ -37,6 +37,7 @@ public class Leaderboard _statIds = new int[_statNames.length]; _type = type; _size = size; + _start = start; _loc = displayLoc; update(new LinkedHashMap<>()); @@ -52,12 +53,15 @@ public class Leaderboard return _start; } + /** + * The returned array is not safe for mutation + */ public String[] getStatNames() { return _statNames; } - public int[] getStatIds() + public synchronized int[] getStatIds() { return _statIds; } @@ -89,6 +93,14 @@ public class Leaderboard _holo = new Hologram(Managers.get(LeaderboardManager.class).getHologramManager(), _loc, display.toArray(new String[display.size()])).start(); } + public synchronized void setStatId(int index, int id) + { + if (_statIds.length > index && index >= 0) + { + _statIds[index] = id; + } + } + public void deconstruct() { if (_holo != null) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java index 88a84c29d..e2849a5d0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardManager.java @@ -120,7 +120,7 @@ public class LeaderboardManager extends MiniPlugin final int index = i; Managers.get(StatsManager.class).loadStatId(board.getStatNames()[index], id -> { - board.getStatIds()[index] = id.intValue(); + board.setStatId(index, id.intValue()); }); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardRepository.java index f9b286039..4ef0e86cf 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/leaderboard/LeaderboardRepository.java @@ -90,73 +90,79 @@ public class LeaderboardRepository extends RepositoryBase public void insertStats(int accountId, Map stats) { - try ( - Connection c = getConnection(); - PreparedStatement updateStat = c.prepareStatement(UPDATE_STAT); - PreparedStatement insertStat = c.prepareStatement(INSERT_STAT); - ) + UtilServer.runAsync(() -> { - for (Integer statId : stats.keySet()) + try ( + Connection c = getConnection(); + PreparedStatement updateStat = c.prepareStatement(UPDATE_STAT); + PreparedStatement insertStat = c.prepareStatement(INSERT_STAT); + ) { - updateStat.setLong(1, stats.get(statId)); - updateStat.setInt(2, accountId); - updateStat.setInt(3, statId); - updateStat.addBatch(); - } - int[] rowsAffected = updateStat.executeBatch(); - int i = 0; - for (Integer statId : stats.keySet()) - { - if (rowsAffected[i] < 1) + for (Integer statId : stats.keySet()) { - insertStat.setInt(1, accountId); - insertStat.setInt(2, statId); - insertStat.setLong(3, stats.get(statId)); - insertStat.addBatch(); + updateStat.setLong(1, stats.get(statId)); + updateStat.setInt(2, accountId); + updateStat.setInt(3, statId); + updateStat.addBatch(); } - i++; + int[] rowsAffected = updateStat.executeBatch(); + int i = 0; + for (Integer statId : stats.keySet()) + { + if (rowsAffected[i] < 1) + { + insertStat.setInt(1, accountId); + insertStat.setInt(2, statId); + insertStat.setLong(3, stats.get(statId)); + insertStat.addBatch(); + } + i++; + } + insertStat.executeBatch(); } - insertStat.executeBatch(); - } - catch (SQLException e) - { - e.printStackTrace(); - } + catch (SQLException e) + { + e.printStackTrace(); + } + }); } public void loadLeaderboard(Leaderboard board, Consumer> leaderboard) { - Map names = new LinkedHashMap<>(); - try ( - Connection c = getConnection(); - Statement s = c.createStatement(); - ) + UtilServer.runAsync(() -> { - s.execute(board.getType().getStatement(board.getStatIds(), board.getStart(), board.getSize())); - for (int i = 0; i < board.getStatIds().length; i++) + Map names = new LinkedHashMap<>(); + try ( + Connection c = getConnection(); + Statement s = c.createStatement(); + ) { - try (ResultSet rs = s.getResultSet()) + s.execute(board.getType().getStatement(board.getStatIds(), board.getStart(), board.getSize())); + for (int i = 0; i < board.getStatIds().length; i++) { - while (rs.next()) + try (ResultSet rs = s.getResultSet()) { - names.merge(rs.getString("name"), rs.getInt("value"), Integer::sum); - } - - if (!s.getMoreResults()) - { - break; + while (rs.next()) + { + names.merge(rs.getString("name"), rs.getInt("value"), Integer::sum); + } + + if (!s.getMoreResults()) + { + break; + } } } } - } - catch (SQLException ex) - { - ex.printStackTrace(); - } - finally - { - UtilServer.runSync(() -> leaderboard.accept(names)); - } + catch (SQLException ex) + { + ex.printStackTrace(); + } + finally + { + UtilServer.runSync(() -> leaderboard.accept(names)); + } + }); } @SuppressWarnings("unchecked") From 8a18be0c5c96688122340bc6d9f3da74cbe0ea02 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 12 Jul 2017 00:41:47 +0100 Subject: [PATCH 11/14] Shorten and fix a typo in the senior moderator title --- .../core/titles/tracks/staff/SeniorModeratorTrack.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/staff/SeniorModeratorTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/staff/SeniorModeratorTrack.java index 5001c38c3..3521e362d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/staff/SeniorModeratorTrack.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/staff/SeniorModeratorTrack.java @@ -18,10 +18,10 @@ public class SeniorModeratorTrack extends ItemizedTrack public SeniorModeratorTrack() { - super("staff-srmod", ChatColor.GOLD, "Sr.Mod", "I my team is the best team", "Team loyalty at its finest", true); + super("staff-srmod", ChatColor.GOLD, "Sr.Mod", "My Team's the Best Team", "Team loyalty at its finest", true); getRequirements() .addTier(new TrackTier( - "I think my team is the best team", + "My Team's the Best Team", null, this::owns, new TrackFormat(ChatColor.GOLD, ChatColor.GOLD) From d15063a0659b51d9a08f0619395f8f7f59097b91 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 12 Jul 2017 01:20:13 +0100 Subject: [PATCH 12/14] Fix "serverName" is restarting --- Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java index 68a0c10c1..062a529d3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Portal.java @@ -132,7 +132,7 @@ public class Portal extends MiniPlugin { if (server.getGroup().equalsIgnoreCase("Clans") && server.getMotd().equalsIgnoreCase("Restarting soon")) { - UtilPlayer.message(player, F.main(getName(), C.cGold + "serverName" + C.cRed + " is restarting!")); + UtilPlayer.message(player, F.main(getName(), C.cGold + serverName + C.cRed + " is restarting!")); return; } if (server.getPlayerCount() < server.getMaxPlayerCount() || playerRank.has(Rank.ULTRA)) From 035c5e9011977ee42694d6e61953ef17423e2041 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 12 Jul 2017 17:00:20 +0100 Subject: [PATCH 13/14] Fix a typo --- .../src/mineplex/core/achievement/AchievementCategory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index 885bf7939..ae6a80c2d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -43,7 +43,7 @@ public enum AchievementCategory StatDisplay.fromGame("Wins", GameDisplay.SkywarsTeams, "Wins"), StatDisplay.fromGame("Games Played", GameDisplay.SkywarsTeams, "Wins", "Losses"), StatDisplay.fromGame("Kills", GameDisplay.SkywarsTeams, "Kills"), StatDisplay.fromGame("Deaths", GameDisplay.SkywarsTeams, "Deaths"), StatDisplay.fromGame("Gems Earned", GameDisplay.SkywarsTeams, "GemsEarned") }, - Material.FEATHER, 0, GameCategory.SURVIVAL, "Destructor Kit", false, GameDisplay.Skywars.getGameId(), GameDisplay.SkywarsTeams.getGameId()), + Material.FEATHER, 0, GameCategory.SURVIVAL, "Earth Kit", false, GameDisplay.Skywars.getGameId(), GameDisplay.SkywarsTeams.getGameId()), UHC("Ultra Hardcore", null, new StatDisplay[] { From 5cac083941f2cee396fc6243da214083e5d5b642 Mon Sep 17 00:00:00 2001 From: Dan Mulloy Date: Wed, 12 Jul 2017 23:06:13 -0400 Subject: [PATCH 14/14] Add command to get versions, spawn wither skeletons with /mob --- .../core/creature/command/MobCommand.java | 13 ++++ .../src/mineplex/core/monitor/LagMeter.java | 6 ++ .../core/monitor/VersionsCommand.java | 74 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/monitor/VersionsCommand.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/creature/command/MobCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/creature/command/MobCommand.java index 33e0ed950..6b9e16de1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/creature/command/MobCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/creature/command/MobCommand.java @@ -250,6 +250,19 @@ public class MobCommand extends MultiCommandBase } argHandle.add(arg); } + + else if (arg.equalsIgnoreCase("wither")) + { + for (Entity ent : entSet) + { + if (ent instanceof Skeleton) + { + ((Skeleton) ent).setSkeletonType(SkeletonType.WITHER); + } + } + + argHandle.add(arg); + } } for (String arg : argHandle) argSet.remove(arg); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java index e34150584..4a89c9d7d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java @@ -42,6 +42,12 @@ public class LagMeter extends MiniPlugin _start = System.currentTimeMillis(); } + @Override + public void addCommands() + { + addCommand(new VersionsCommand(this)); + } + @EventHandler public void onPlayerCommandPreProcess(PlayerCommandPreprocessEvent event) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/monitor/VersionsCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/monitor/VersionsCommand.java new file mode 100644 index 000000000..ef2bdab58 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/monitor/VersionsCommand.java @@ -0,0 +1,74 @@ +package mineplex.core.monitor; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.print.attribute.IntegerSyntax; + +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; + +/** + * Statistics on versions + * @author Dan + */ +public class VersionsCommand extends CommandBase +{ + public VersionsCommand(LagMeter plugin) + { + super(plugin, Rank.DEVELOPER, "versions", "getver"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + Map versions = new HashMap<>(); + for (Player player : Bukkit.getOnlinePlayers()) + { + int version = ((CraftPlayer) player).getHandle().getProtocol(); + int players = versions.getOrDefault(version, 0); + versions.put(version, players + 1); + } + + UtilPlayer.message(caller, F.main("Version", "Distribution on " + C.cGold + + UtilServer.getServerName())); + + List> sorted = versions + .entrySet().stream() + .sorted(Comparator.comparing(Map.Entry::getValue, (i1, i2) -> -i1.compareTo(i2))) + .collect(Collectors.toList()); + for (Map.Entry entry : sorted) + { + UtilPlayer.message(caller, + F.main("Version", C.cYellow + entry.getKey() + C.cGray + ": " + C.cGreen + + entry.getValue() + C.cGray + " players")); + } + } else if (args.length == 1) + { + List players = UtilPlayer.matchOnline(caller, args[0], true); + if (!players.isEmpty()) + { + Player player = players.get(0); + UtilPlayer.message(caller, + F.main("Version", C.cYellow + player.getName() + C.cGray + " is on protocol " + + C.cGreen + ((CraftPlayer) player).getHandle().getProtocol())); + } + } else + { + UtilPlayer.message(caller, F.main("Version", "Invalid argument list.")); + } + } +}