From 3758946dbc2a15612140e710df60ec09d5c04cab Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 21 Oct 2017 19:06:48 +0100 Subject: [PATCH] Start on Cake Wars Kit Progression --- .../src/mineplex/core/MiniClientPlugin.java | 2 +- .../src/mineplex/core/MiniDbClientPlugin.java | 4 +- .../evolvedprogression/EvolvedCurrency.java | 46 +++++++++++ .../EvolvedProgressionManager.java | 45 +++++++++++ .../core/evolvedprogression/EvolvedTrack.java | 76 +++++++++++++++++++ .../EvKitProgressionModule.java | 56 +++++++++++++- .../arcade/managers/GamePlayerManager.java | 8 +- .../managers/ProgressingKitManager.java | 14 +++- 8 files changed, 242 insertions(+), 9 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedCurrency.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedProgressionManager.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedTrack.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/MiniClientPlugin.java b/Plugins/Mineplex.Core/src/mineplex/core/MiniClientPlugin.java index 5f406b27d..1c2ed3b52 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/MiniClientPlugin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/MiniClientPlugin.java @@ -11,7 +11,7 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public abstract class MiniClientPlugin extends MiniPlugin +public abstract class MiniClientPlugin extends MiniPlugin { private static final Object _clientDataLock = new Object(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/MiniDbClientPlugin.java b/Plugins/Mineplex.Core/src/mineplex/core/MiniDbClientPlugin.java index da7020024..6f7c219f1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/MiniDbClientPlugin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/MiniDbClientPlugin.java @@ -10,10 +10,10 @@ import mineplex.core.account.CoreClientManager; import mineplex.core.account.ILoginProcessor; import mineplex.core.common.util.UtilServer; -public abstract class MiniDbClientPlugin extends MiniClientPlugin implements ILoginProcessor +public abstract class MiniDbClientPlugin extends MiniClientPlugin implements ILoginProcessor { - protected CoreClientManager ClientManager = null; + protected final CoreClientManager ClientManager; public MiniDbClientPlugin(String moduleName) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedCurrency.java b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedCurrency.java new file mode 100644 index 000000000..712835bea --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedCurrency.java @@ -0,0 +1,46 @@ +package mineplex.core.evolvedprogression; + +import org.bukkit.Material; + +public enum EvolvedCurrency +{ + + LEATHER(1, "Leather", Material.LEATHER, 4), + GOLD(2, "Gold", Material.GOLD_INGOT, 3), + IRON(3, "Iron", Material.IRON_INGOT, 1), + DIAMOND(4, "Diamond", Material.DIAMOND, 1), + NETHER_STAR(5, "Nether Star", Material.NETHER_STAR, 1); + + private final int _id; + private final String _name; + private final Material _material; + private final int _maxPerRoll; + + EvolvedCurrency(int id, String name, Material material, int maxPerRoll) + { + _id = id; + _name = name; + _material = material; + _maxPerRoll = maxPerRoll; + } + + public int getId() + { + return _id; + } + + public String getName() + { + return _name; + } + + public Material getMaterial() + { + return _material; + } + + public int getMaxPerRoll() + { + return _maxPerRoll; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedProgressionManager.java b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedProgressionManager.java new file mode 100644 index 000000000..bade2734a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedProgressionManager.java @@ -0,0 +1,45 @@ +package mineplex.core.evolvedprogression; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +import org.bukkit.entity.Player; + +import mineplex.core.MiniClientPlugin; +import mineplex.core.ReflectivelyCreateMiniPlugin; + +@ReflectivelyCreateMiniPlugin +public class EvolvedProgressionManager extends MiniClientPlugin> +{ + + private EvolvedProgressionManager() + { + super("Evolved Progression"); + } + + public EvolvedTrack get(Player player, String kitName) + { + List tracks = Get(player); + + for (EvolvedTrack track : tracks) + { + if (track.getKitName().equals(kitName)) + { + return track; + } + } + + EvolvedTrack track = new EvolvedTrack(kitName, new HashMap<>(), new HashMap<>(), new HashMap<>()); + tracks.add(track); + + return track; + } + + @Override + protected List addPlayer(UUID uuid) + { + return new ArrayList<>(); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedTrack.java b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedTrack.java new file mode 100644 index 000000000..2b7e28f76 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/evolvedprogression/EvolvedTrack.java @@ -0,0 +1,76 @@ +package mineplex.core.evolvedprogression; + +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.Material; + +import mineplex.core.common.util.UtilItem.ItemCategory; + +public class EvolvedTrack +{ + + // Assigns the price of an item based on its type. Integer[] { leather, gold, iron, diamond} + private final static Map ITEM_COSTS; + + static + { + ITEM_COSTS = new HashMap<>(); + + ITEM_COSTS.put(Material.LEATHER_HELMET, new Integer[] {3, 0, 0, 0}); + ITEM_COSTS.put(Material.LEATHER_CHESTPLATE, new Integer[] {7, 0, 0, 0}); + ITEM_COSTS.put(Material.LEATHER_LEGGINGS, new Integer[] {5, 0, 0, 0}); + ITEM_COSTS.put(Material.LEATHER_BOOTS, new Integer[] {3, 0, 0, 0}); + + ITEM_COSTS.put(Material.GOLD_HELMET, new Integer[] {25, 8, 0, 0}); + ITEM_COSTS.put(Material.GOLD_CHESTPLATE, new Integer[] {50, 12, 0, 0}); + ITEM_COSTS.put(Material.GOLD_LEGGINGS, new Integer[] {50, 10, 0, 0}); + ITEM_COSTS.put(Material.GOLD_BOOTS, new Integer[] {25, 8, 0, 0}); + + ITEM_COSTS.put(Material.IRON_HELMET, new Integer[] {50, 0, 5, 0}); + ITEM_COSTS.put(Material.IRON_CHESTPLATE, new Integer[] {100, 0, 10, 0}); + ITEM_COSTS.put(Material.IRON_LEGGINGS, new Integer[] {100, 0, 8, 0}); + ITEM_COSTS.put(Material.IRON_BOOTS, new Integer[] {50, 0, 5, 0}); + + ITEM_COSTS.put(Material.DIAMOND_HELMET, new Integer[] {100, 0, 0, 5}); + ITEM_COSTS.put(Material.DIAMOND_CHESTPLATE, new Integer[] {250, 0, 0, 10}); + ITEM_COSTS.put(Material.DIAMOND_LEGGINGS, new Integer[] {250, 0, 0, 9}); + ITEM_COSTS.put(Material.DIAMOND_BOOTS, new Integer[] {100, 0, 0, 5}); + + ITEM_COSTS.put(Material.STONE_SWORD, new Integer[] {5, 1, 0, 0}); + ITEM_COSTS.put(Material.IRON_SWORD, new Integer[] {5, 0, 8, 0}); + ITEM_COSTS.put(Material.DIAMOND_SWORD, new Integer[] {10, 0, 0, 10}); + } + + public static Map getItemCosts() + { + return ITEM_COSTS; + } + + private final String _kitName; + private final Map _currencyMap; + private final Map _itemLevelUnlocks; + private final Map _itemLevelEquipped; + + public EvolvedTrack(String kitName, Map currencyMap, Map itemLevelUnlocks, Map itemLevelEquipped) + { + _kitName = kitName; + _currencyMap = currencyMap; + _itemLevelUnlocks = itemLevelUnlocks; + _itemLevelEquipped = itemLevelEquipped; + } + + public int incrementCurrency(EvolvedCurrency currency, int amount) + { + int newAmount = _currencyMap.get(currency) + amount; + + _currencyMap.put(currency, newAmount); + + return newAmount; + } + + public String getKitName() + { + return _kitName; + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/kitprogression/EvKitProgressionModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/kitprogression/EvKitProgressionModule.java index 3624c22d5..f2d6a45c8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/kitprogression/EvKitProgressionModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/kitprogression/EvKitProgressionModule.java @@ -1,16 +1,70 @@ package nautilus.game.arcade.game.modules.kitprogression; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.Managers; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.weight.WeightSet; +import mineplex.core.evolvedprogression.EvolvedCurrency; +import mineplex.core.evolvedprogression.EvolvedProgressionManager; +import mineplex.core.evolvedprogression.EvolvedTrack; + +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.modules.Module; public class EvKitProgressionModule extends Module { - public EvKitProgressionModule() + private final static EvolvedProgressionManager PROGRESSION_MANAGER; + private final static WeightSet CURRENCY_WEIGHT; + + static { + PROGRESSION_MANAGER = Managers.require(EvolvedProgressionManager.class); + CURRENCY_WEIGHT = new WeightSet<>(); + + CURRENCY_WEIGHT.add(48, EvolvedCurrency.LEATHER); + CURRENCY_WEIGHT.add(18, EvolvedCurrency.GOLD); + CURRENCY_WEIGHT.add(9, EvolvedCurrency.IRON); + CURRENCY_WEIGHT.add(4, EvolvedCurrency.DIAMOND); + CURRENCY_WEIGHT.add(1, EvolvedCurrency.NETHER_STAR); } @Override protected void setup() { } + + @EventHandler + public void gameEnd(GameStateChangeEvent event) + { + if (event.GetState() != GameState.End) + { + return; + } + + for (Player player : getGame().GetPlayers(true)) + { + EvolvedTrack track = PROGRESSION_MANAGER.get(player, getGame().GetKit(player).GetName()); + int rolls = 3; + + if (getGame().WinnerTeam != null) + { + if (getGame().WinnerTeam.HasPlayer(player)) + { + rolls++; + } + } + + for (int i = 0; i < rolls + (Math.random() < 0.1 ? 1 : 0); i++) + { + EvolvedCurrency currency = CURRENCY_WEIGHT.generateRandom(); + int amount = UtilMath.r(currency.getMaxPerRoll()) + 1; + + track.incrementCurrency(currency, amount); + } + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java index 0db04986d..d10dfb7a9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GamePlayerManager.java @@ -306,7 +306,7 @@ public class GamePlayerManager implements Listener return; } - KitClick(player, kit); + KitClick(player, kit, false); event.setCancelled(true); } @@ -339,15 +339,15 @@ public class GamePlayerManager implements Listener return; } - KitClick(player, kit); + KitClick(player, kit, true); } - public void KitClick(final Player player, final Kit kit) + public void KitClick(final Player player, final Kit kit, boolean leftClick) { /** * Moved to {@link ProgressingKitManager#entityClick(Player, Kit)} */ - Manager.getProgressionKitManager().entityClick(player, kit); + Manager.getProgressionKitManager().entityClick(player, kit, leftClick); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java index 34cda3c72..15a2bd81e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java @@ -151,6 +151,11 @@ public class ProgressingKitManager implements Listener } public void entityClick(Player player, Kit kit) + { + entityClick(player, kit, false); + } + + public void entityClick(Player player, Kit kit, boolean leftClick) { PlayerKitApplyEvent kitEvent = new PlayerKitApplyEvent(_manager.GetGame(), kit, player); UtilServer.CallEvent(kitEvent); @@ -177,7 +182,14 @@ public class ProgressingKitManager implements Listener return; } - new KitDisplayMenu((ProgressingKit) kit, _manager.getKitProgressionManager()).open(player); + if (leftClick) + { + _manager.GetGame().SetKit(player, kit, true); + } + else + { + new KitDisplayMenu((ProgressingKit) kit, _manager.getKitProgressionManager()).open(player); + } } @EventHandler