diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java index 3d8aedbb7..657d98b30 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java @@ -78,6 +78,11 @@ public class GadgetPage extends ShopPageBase } protected void addGadget(Gadget gadget, int slot) + { + addGadget(gadget, slot, false); + } + + protected void addGadget(Gadget gadget, int slot, boolean locked) { List itemLore = new ArrayList(); @@ -102,7 +107,7 @@ public class GadgetPage extends ShopPageBase itemLore.add(" " + (gadget.getSet().isActive(getPlayer()) ? C.cGreen : C.cGray) + bonus); } - if (!gadget.ownsGadget(getPlayer())) + if (!gadget.ownsGadget(getPlayer()) || locked) { if (gadget.getCost(GlobalCurrency.TREASURE_SHARD) == -1) { @@ -261,7 +266,7 @@ public class GadgetPage extends ShopPageBase ItemMeta im = item.getItemMeta(); im.setDisplayName(C.cGreen + C.Bold + gadget.getName()); - if (gadget.ownsGadget(getPlayer())) + if (gadget.ownsGadget(getPlayer()) && !locked) { if (gadget.getActive().contains(getPlayer())) { @@ -320,7 +325,7 @@ public class GadgetPage extends ShopPageBase } //Standard - if (gadget.ownsGadget(getPlayer())) + if (gadget.ownsGadget(getPlayer()) && !locked) { ItemStack gadgetItemStack; /*if (gadget instanceof MorphWitch) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/WinEffectPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/WinEffectPage.java index 3236de2fb..de763e016 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/WinEffectPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/WinEffectPage.java @@ -5,10 +5,12 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.shop.item.IButton; @@ -30,6 +32,9 @@ public class WinEffectPage extends GadgetPage for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.WIN_EFFECT)) { + if (gadget instanceof WinEffectRankBased) + continue; + addGadget(gadget, slot); if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.WIN_EFFECT) == gadget) @@ -40,6 +45,31 @@ public class WinEffectPage extends GadgetPage if (slot == 17) slot += 2; } + + // Adds rank based win effects + Rank maxRank = WinEffectRankBased.getHighestRankForPlayer(getPlayer()); + + for (WinEffectRankBased.WinEffectType winEffectType : WinEffectRankBased.WinEffectType.values()) + { + Rank originalRank = maxRank; + + if (maxRank.equals(Rank.ALL)) + maxRank = Rank.ULTRA; + + WinEffectRankBased winEffectRankBased = getPlugin().getGadgetManager().getRankBasedWinEffect(winEffectType, maxRank); + if (winEffectRankBased != null) + { + addGadget(winEffectRankBased, slot, (originalRank.equals(Rank.ALL))); + + if (winEffectRankBased.isActive(getPlayer())) + addGlow(slot); + + slot++; + + if (slot == 17) + slot += 2; + } + } addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index 83eb1995a..33478c909 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -29,6 +29,7 @@ import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; import mineplex.core.blockrestore.BlockRestore; +import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; @@ -208,6 +209,12 @@ import mineplex.core.gadget.gadgets.wineffect.WinEffectPodium; import mineplex.core.gadget.gadgets.wineffect.WinEffectRiseOfTheElderGuardian; import mineplex.core.gadget.gadgets.wineffect.WinEffectSnowTrails; import mineplex.core.gadget.gadgets.wineffect.WinEffectWinterWarfare; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankEternal; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankHero; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankLegend; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankTitan; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankUltra; import mineplex.core.gadget.persistence.UserGadgetPersistence; import mineplex.core.gadget.set.SetCandyCane; import mineplex.core.gadget.set.SetCupidsLove; @@ -276,6 +283,7 @@ public class GadgetManager extends MiniPlugin private SoulManager _soulManager; private Map> _gadgets; + private List _rankBasedWinEffects; private final Map _lastMove = new HashMap<>(); private final Map> _playerActiveGadgetMap = new HashMap<>(); @@ -357,6 +365,7 @@ public class GadgetManager extends MiniPlugin private void createGadgets() { _gadgets = new HashMap<>(); + _rankBasedWinEffects = new ArrayList<>(); // Items addGadget(new ItemEtherealPearl(this)); @@ -538,6 +547,13 @@ public class GadgetManager extends MiniPlugin addGadget(new WinEffectWinterWarfare(this)); addGadget(new WinEffectLoveIsABattlefield(this)); + // Rank based win effects + addGadget(new WinEffectRankUltra(this)); + addGadget(new WinEffectRankHero(this)); + addGadget(new WinEffectRankLegend(this)); + addGadget(new WinEffectRankTitan(this)); + addGadget(new WinEffectRankEternal(this)); + // Music addGadget(new MusicGadget(this, "13 Disc", new String[] {""}, -2, 2256, 178000)); addGadget(new MusicGadget(this, "Cat Disc", new String[] {""}, -2, 2257, 185000)); @@ -669,6 +685,9 @@ public class GadgetManager extends MiniPlugin _gadgets.put(gadget.getGadgetType(), new ArrayList<>()); _gadgets.get(gadget.getGadgetType()).add(gadget); + + if (gadget instanceof WinEffectRankBased) + _rankBasedWinEffects.add((WinEffectRankBased) gadget); } @EventHandler @@ -815,6 +834,18 @@ public class GadgetManager extends MiniPlugin } return null; } + + public WinEffectRankBased getRankBasedWinEffect(WinEffectRankBased.WinEffectType winEffectType, Rank rank) + { + for (WinEffectRankBased winEffectRankBased : _rankBasedWinEffects) + { + if (winEffectRankBased.getWinEffectType().equals(winEffectType) && winEffectRankBased.getRank().equals(rank)) + { + return winEffectRankBased; + } + } + return null; + } // Disallows two armor gadgets in same slot. public void removeOutfit(Player player, ArmorSlot slot) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/WinEffectRankBased.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/WinEffectRankBased.java new file mode 100644 index 000000000..8822869ca --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/WinEffectRankBased.java @@ -0,0 +1,113 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.Managers; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.WinEffectGadget; + +/** + * Helper class to create win effects based on ranks + */ +public abstract class WinEffectRankBased extends WinEffectGadget +{ + + private Rank _rank; + private WinEffectType _winEffectType; + + /** + * @param manager The gadget manager + * @param rank The rank needed for the win room + * @param winEffectType The win effect type, used to display in menus + * @param alternativeSalepackageNames + */ + public WinEffectRankBased(GadgetManager manager, Rank rank, WinEffectType winEffectType, String... alternativeSalepackageNames) + { + super(manager, winEffectType.getName() + " " + rank.getRawTag(), winEffectType.getLore(), + (rank.equals(Rank.ETERNAL) ? -15 : (rank.equals(Rank.TITAN) ? -13 : (rank.equals(Rank.LEGEND) ? -12 : (rank.equals(Rank.HERO) ? -11 : -10)))), + winEffectType.getMaterial(), winEffectType.getData(), true, alternativeSalepackageNames); + _rank = rank; + _winEffectType = winEffectType; + _schematicName = winEffectType.getSchematic().replace("%r%", rank.getRawTag()); + } + + public Rank getRank() + { + return _rank; + } + + public WinEffectType getWinEffectType() + { + return _winEffectType; + } + + /** + * Gets the highest possible rank for the player + * @param player The player + * @return The highest rank for that player or null if GadgetManager isn't loaded + */ + public static Rank getHighestRankForPlayer(Player player) + { + GadgetManager gadgetManager = Managers.get(GadgetManager.class); + if (gadgetManager != null) + { + Rank rank = gadgetManager.getClientManager().Get(player).GetRank(); + if (rank.has(Rank.ETERNAL)) + return Rank.ETERNAL; + else + return rank; + } + return null; + } + + public enum WinEffectType + { + RANK_WIN_EFFECT("Rank Win Effect", UtilText.splitLinesToArray(new String[]{C.cGray + "Placeholder"}, LineFormat.LORE), Material.GLASS, (byte) 0, "WinRank%r%"); + + private String _name; + private String[] _lore; + private Material _material; + private byte _data; + private String _schematic; + + WinEffectType(String name, String[] lore, Material material, byte data, String schematic) + { + _name = name; + _lore = lore; + _material = material; + _data = data; + _schematic = schematic; + } + + public String getName() + { + return _name; + } + + public String[] getLore() + { + return _lore; + } + + public Material getMaterial() + { + return _material; + } + + public byte getData() + { + return _data; + } + + public String getSchematic() + { + return _schematic; + } + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankEternal.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankEternal.java new file mode 100644 index 000000000..846f43216 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankEternal.java @@ -0,0 +1,29 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects; + +import org.bukkit.Bukkit; + +import mineplex.core.common.Rank; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; + +public class WinEffectRankEternal extends WinEffectRankBased +{ + + public WinEffectRankEternal(GadgetManager manager) + { + super(manager, Rank.ETERNAL, WinEffectType.RANK_WIN_EFFECT); + } + + @Override + public void play() + { + Bukkit.broadcastMessage("Playing effect win effect eternal: " + getName()); + } + + @Override + public void finish() + { + Bukkit.broadcastMessage("Playing effect win effect eternal: " + getName()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankHero.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankHero.java new file mode 100644 index 000000000..eff18f125 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankHero.java @@ -0,0 +1,29 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects; + +import org.bukkit.Bukkit; + +import mineplex.core.common.Rank; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; + +public class WinEffectRankHero extends WinEffectRankBased +{ + + public WinEffectRankHero(GadgetManager manager) + { + super(manager, Rank.HERO, WinEffectType.RANK_WIN_EFFECT); + } + + @Override + public void play() + { + Bukkit.broadcastMessage("Playing effect win effect hero: " + getName()); + } + + @Override + public void finish() + { + Bukkit.broadcastMessage("Playing effect win effect hero: " + getName()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankLegend.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankLegend.java new file mode 100644 index 000000000..bf15f89a3 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankLegend.java @@ -0,0 +1,29 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects; + +import org.bukkit.Bukkit; + +import mineplex.core.common.Rank; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; + +public class WinEffectRankLegend extends WinEffectRankBased +{ + + public WinEffectRankLegend(GadgetManager manager) + { + super(manager, Rank.LEGEND, WinEffectType.RANK_WIN_EFFECT); + } + + @Override + public void play() + { + Bukkit.broadcastMessage("Playing effect win effect legend: " + getName()); + } + + @Override + public void finish() + { + Bukkit.broadcastMessage("Playing effect win effect legend: " + getName()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankTitan.java new file mode 100644 index 000000000..607dc9b39 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankTitan.java @@ -0,0 +1,29 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects; + +import org.bukkit.Bukkit; + +import mineplex.core.common.Rank; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; + +public class WinEffectRankTitan extends WinEffectRankBased +{ + + public WinEffectRankTitan(GadgetManager manager) + { + super(manager, Rank.TITAN, WinEffectType.RANK_WIN_EFFECT); + } + + @Override + public void play() + { + Bukkit.broadcastMessage("Playing effect win effect titan: " + getName()); + } + + @Override + public void finish() + { + Bukkit.broadcastMessage("Playing effect win effect titan: " + getName()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankUltra.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankUltra.java new file mode 100644 index 000000000..7db8fbd2d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/wineffect/rankrooms/rankwineffects/WinEffectRankUltra.java @@ -0,0 +1,29 @@ +package mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects; + +import org.bukkit.Bukkit; + +import mineplex.core.common.Rank; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.wineffect.rankrooms.WinEffectRankBased; + +public class WinEffectRankUltra extends WinEffectRankBased +{ + + public WinEffectRankUltra(GadgetManager manager) + { + super(manager, Rank.ULTRA, WinEffectType.RANK_WIN_EFFECT); + } + + @Override + public void play() + { + Bukkit.broadcastMessage("Playing effect win effect ultra: " + getName()); + } + + @Override + public void finish() + { + Bukkit.broadcastMessage("Playing effect win effect ultra: " + getName()); + } + +}