From 4a91d2821bc7546e25f85ebbdbcd9c5d89b2cbdb Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 5 Jun 2017 20:57:30 +0100 Subject: [PATCH] Achievements --- .../core/achievement/Achievement.java | 26 ++++++++- .../core/achievement/AchievementCategory.java | 6 ++- .../src/mineplex/core/game/GameDisplay.java | 2 + .../mineplex/core/titles/tracks/Track.java | 2 +- .../tracks/standard/GemHuntersTrack.java | 9 ++++ .../src/mineplex/gemhunters/GemHunters.java | 1 + .../gemhunters/death/DeathModule.java | 53 +++++++++++-------- .../gemhunters/economy/CashOutModule.java | 23 +++++--- .../mineplex/gemhunters/loot/LootModule.java | 6 ++- .../gemhunters/quest/QuestModule.java | 7 ++- 10 files changed, 100 insertions(+), 35 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index 1d1dd47c4..f9820de1b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -1201,7 +1201,31 @@ public enum Achievement new String[]{"Skyfall.SupplyDropsOpened"}, new String[]{"Be the first to open 20 Supply Drops"}, new int[]{20}, - AchievementCategory.SKYFALL); + AchievementCategory.SKYFALL), + + GEM_HUNTERS_KILLS("Gem Killer", 5000, + new String[]{"Gem Hunters.Kills"}, + new String[]{"+1 for each kill"}, + new int[]{10,25,50,100,1000}, + AchievementCategory.GEM_HUNTERS), + + GEM_HUNTERS_GEMS_EARNED("Gem Millionaire", 5000, + new String[]{"Gem Hunters.GemsEarned"}, + new String[]{"+1 for each Gem cashed out"}, + new int[]{1000,2500,5000,10000,100000}, + AchievementCategory.GEM_HUNTERS), + + GEM_HUNTERS_QUESTS("Quest Complete", 5000, + new String[]{"Gem Hunters.QuestsOpened"}, + new String[]{"+1 for each quest completed"}, + new int[]{10,25,50,100,1000}, + AchievementCategory.GEM_HUNTERS), + + GEM_HUNTERS_CHESTS_OPENED("Loot Get!", 5000, + new String[]{"Gem Hunters.ChestsOpened"}, + new String[]{"+1 for each chest opened"}, + new int[]{50,100,200,400,1000}, + AchievementCategory.GEM_HUNTERS); private String _name; private String[] _desc; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java index 3a2d752df..a1ebeb4f8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java @@ -213,7 +213,11 @@ public enum AchievementCategory StatDisplay.fromGame("Wins", GameDisplay.SkyfallTeams, "Wins"), StatDisplay.fromGame("Games Played", GameDisplay.SkyfallTeams, "Wins", "Losses"), StatDisplay.fromGame("Kills", GameDisplay.SkyfallTeams, "Kills"), StatDisplay.fromGame("Deaths", GameDisplay.SkyfallTeams, "Deaths"), StatDisplay.fromGame("Gems Earned", GameDisplay.SkyfallTeams, "GemsEarned"), null, StatDisplay.fromGame("Booster Rings", GameDisplay.SkyfallTeams, "Rings")}, - Material.DIAMOND_BOOTS, 0, GameCategory.SURVIVAL, null, false, GameDisplay.Skyfall.getGameId(), GameDisplay.SkyfallTeams.getGameId()); + Material.DIAMOND_BOOTS, 0, GameCategory.SURVIVAL, null, false, GameDisplay.Skyfall.getGameId(), GameDisplay.SkyfallTeams.getGameId()), + + GEM_HUNTERS("Gem Hunters", null, + new StatDisplay[] {StatDisplay.KILLS, StatDisplay.GEMS_EARNED, StatDisplay.fromGame("Quests Complete", GameDisplay.GemHunters, "QuestsCompleted"), StatDisplay.fromGame("Chests Opened", GameDisplay.GemHunters, "ChestsOpened")}, + Material.EMERALD, 0, GameCategory.SURVIVAL, null, false, GameDisplay.GemHunters.getGameId()); private String _name; private String[] _statsToPull; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index 6f6f38241..e238880ed 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -104,6 +104,8 @@ public enum GameDisplay AlienInvasion("Alien Invasion", Material.ENDER_STONE, (byte) 0, GameCategory.EVENT, 69, false), + GemHunters("Gem Hunters", Material.EMERALD, (byte) 0, GameCategory.SURVIVAL, 71, false), + Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999, false), Brawl("Brawl", Material.DIAMOND, (byte) 0, GameCategory.EVENT, 998, false); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/Track.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/Track.java index bb436bd21..d7db74382 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/Track.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/Track.java @@ -78,7 +78,7 @@ public class Track implements Listener return this._trackRequirements; } - public final String getStatName() + public String getStatName() { return "track." + _id; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/standard/GemHuntersTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/standard/GemHuntersTrack.java index e247ee9da..21fffdd87 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/standard/GemHuntersTrack.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/titles/tracks/standard/GemHuntersTrack.java @@ -59,4 +59,13 @@ public class GemHuntersTrack extends Track getRequirements() .withRequirement(1, "Gem Earned in Gem Hunters"); } + + /** + * Overriding this means we can hit two birds with one stat. + */ + @Override + public String getStatName() + { + return "Gem Hunters.GemsEarned"; + } } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java index 463ba8d28..ce821a7a5 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java @@ -188,6 +188,7 @@ public class GemHunters extends JavaPlugin // Creatures Creature creature = new Creature(this); + creature.SetDisableCustomDrops(true); // The old classic Damage Manager DamageManager damageManager = new DamageManager(this, new CombatManager(this), new NpcManager(this, creature), disguiseManager, new ConditionManager(this)); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/DeathModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/DeathModule.java index 4f9baa634..2d75e67d9 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/DeathModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/death/DeathModule.java @@ -1,11 +1,20 @@ package mineplex.gemhunters.death; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - +import com.google.common.collect.Sets; +import mineplex.core.MiniPlugin; +import mineplex.core.ReflectivelyCreateMiniPlugin; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.stats.StatsManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.gemhunters.death.event.PlayerCustomRespawnEvent; +import mineplex.gemhunters.playerstatus.PlayerStatusModule; +import mineplex.gemhunters.playerstatus.PlayerStatusType; +import mineplex.gemhunters.spawn.SpawnModule; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -13,7 +22,6 @@ import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -22,25 +30,14 @@ import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; -import com.google.common.collect.Sets; - -import mineplex.core.MiniPlugin; -import mineplex.core.ReflectivelyCreateMiniPlugin; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTextMiddle; -import mineplex.core.common.util.UtilTime; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.gemhunters.death.event.PlayerCustomRespawnEvent; -import mineplex.gemhunters.playerstatus.PlayerStatusModule; -import mineplex.gemhunters.playerstatus.PlayerStatusType; -import mineplex.gemhunters.spawn.SpawnModule; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; /** * This module handles anything to do with a players death @@ -56,6 +53,7 @@ public class DeathModule extends MiniPlugin private static final int DEATH_ANIMATION_COUNTDOWN = 2000; private final PlayerStatusModule _playerStatus; + private final StatsManager _stats; private final SpawnModule _spawn; private final Map _toRemove; @@ -65,6 +63,7 @@ public class DeathModule extends MiniPlugin super("Death"); _playerStatus = require(PlayerStatusModule.class); + _stats = require(StatsManager.class); _spawn = require(SpawnModule.class); _toRemove = new HashMap<>(); @@ -80,6 +79,14 @@ public class DeathModule extends MiniPlugin player.setFoodLevel(20); player.setExhaustion(0); + // Record the stats + Player killer = player.getKiller(); + + if (killer != null) + { + _stats.incrementStat(player, "Gem Hunters.Kills", 1); + } + startAnimation(player); _toRemove.put(player.getUniqueId(), System.currentTimeMillis()); } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/economy/CashOutModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/economy/CashOutModule.java index 117327538..a28cbb327 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/economy/CashOutModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/economy/CashOutModule.java @@ -3,16 +3,20 @@ package mineplex.gemhunters.economy; import mineplex.core.MiniPlugin; import mineplex.core.ReflectivelyCreateMiniPlugin; import mineplex.core.common.currency.GlobalCurrency; -import mineplex.core.common.util.*; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.donation.DonationManager; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.portal.GenericServer; import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; import mineplex.core.recharge.Recharge; -import mineplex.core.titles.tracks.TrackManager; -import mineplex.core.titles.tracks.standard.GemHuntersTrack; +import mineplex.core.stats.StatsManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.gemhunters.economy.command.CashOutItemCommand; @@ -32,7 +36,12 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import java.text.DecimalFormat; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; @ReflectivelyCreateMiniPlugin public class CashOutModule extends MiniPlugin @@ -46,7 +55,7 @@ public class CashOutModule extends MiniPlugin private static final int CASH_OUT_MAX_MOVE_DISTANCE_SQUARED = 4; private final DonationManager _donation; - private final TrackManager _track; + private final StatsManager _stats; private final Map _sessions; private final Set _aboutToCashOut; @@ -56,7 +65,7 @@ public class CashOutModule extends MiniPlugin super("Cash Out"); _donation = require(DonationManager.class); - _track = require(TrackManager.class); + _stats = require(StatsManager.class); _sessions = new HashMap<>(); _aboutToCashOut = new HashSet<>(); @@ -151,7 +160,7 @@ public class CashOutModule extends MiniPlugin _aboutToCashOut.add(player.getUniqueId()); - _track.getTrack(GemHuntersTrack.class).incrementFor(player, completeEvent.getGems()); + _stats.incrementStat(player, "Gem Hunters.GemsEarned", completeEvent.getGems()); _donation.rewardCurrencyUntilSuccess(GlobalCurrency.GEM, player, "Earned", completeEvent.getGems()); session.endSession(); 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 dbff05dc6..b759af50b 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/loot/LootModule.java @@ -5,6 +5,7 @@ import mineplex.core.ReflectivelyCreateMiniPlugin; import mineplex.core.common.util.*; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.google.GoogleSheetsManager; +import mineplex.core.stats.StatsManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.gemhunters.economy.EconomyModule; @@ -58,6 +59,7 @@ public class LootModule extends MiniPlugin private final EconomyModule _economy; private final GoogleSheetsManager _sheets; private final SafezoneModule _safezone; + private final StatsManager _stats; private final WorldDataModule _worldData; private final Map> _chestLoot; @@ -73,6 +75,7 @@ public class LootModule extends MiniPlugin _economy = require(EconomyModule.class); _sheets = require(GoogleSheetsManager.class); _safezone = require(SafezoneModule.class); + _stats = require(StatsManager.class); _worldData = require(WorldDataModule.class); _chestLoot = new HashMap<>(); _chestProperties = new HashMap<>(); @@ -453,7 +456,8 @@ public class LootModule extends MiniPlugin event.setCancelled(true); return; } - + + _stats.incrementStat(player, "Gem Hunters.ChestsOpened", 1); fillChest(player, block, key); } diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/quest/QuestModule.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/quest/QuestModule.java index da43ba06c..de1c5b612 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/quest/QuestModule.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/quest/QuestModule.java @@ -5,6 +5,7 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import mineplex.core.common.util.*; +import mineplex.core.stats.StatsManager; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; @@ -87,6 +88,7 @@ public class QuestModule extends MiniClientPlugin }; private final EconomyModule _economy; + private final StatsManager _stats; private final WorldDataModule _worldData; private QuestModule() @@ -94,6 +96,7 @@ public class QuestModule extends MiniClientPlugin super("Quest"); _economy = require(EconomyModule.class); + _stats = require(StatsManager.class); _worldData = require(WorldDataModule.class); Menu menu = new QuestUI(this); @@ -311,7 +314,9 @@ public class QuestModule extends MiniClientPlugin } player.sendMessage(F.main(_moduleName, "Completed " + F.name(quest.getName()) + ".")); - + + _stats.incrementStat(player, "Gem Hunters.Quests Completed", 1); + QuestPlayerData playerData = Get(player); playerData.getActiveQuests().remove(Integer.valueOf(quest.getId())); playerData.getCompletedQuests().add(quest.getId());