Open Treasure chests through cosmetic gui, purchase treasure keys, some bug fixes

This commit is contained in:
Shaun Bennett 2014-09-18 17:33:05 -05:00
parent b8d157f99f
commit 51ad6d8368
8 changed files with 171 additions and 29 deletions

View File

@ -5,7 +5,7 @@ import org.bukkit.Material;
public enum CurrencyType public enum CurrencyType
{ {
Tokens(" Tokens", Material.EMERALD), Tokens(" Tokens", Material.EMERALD),
Coins(" Coins", Material.GOLD_INGOT), Coins(" Coins", Material.DOUBLE_PLANT),
Gems("Gems", Material.DIAMOND); Gems("Gems", Material.DIAMOND);
private String _prefix; private String _prefix;

View File

@ -3,7 +3,6 @@ package mineplex.core.cosmetic;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
@ -24,6 +23,7 @@ import mineplex.core.inventory.InventoryManager;
import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.mount.MountManager; import mineplex.core.mount.MountManager;
import mineplex.core.pet.PetManager; import mineplex.core.pet.PetManager;
import mineplex.core.treasure.TreasureManager;
public class CosmeticManager extends MiniPlugin public class CosmeticManager extends MiniPlugin
{ {
@ -31,13 +31,19 @@ public class CosmeticManager extends MiniPlugin
private GadgetManager _gadgetManager; private GadgetManager _gadgetManager;
private MountManager _mountManager; private MountManager _mountManager;
private PetManager _petManager; private PetManager _petManager;
private TreasureManager _treasureManager;
private CosmeticShop _shop; private CosmeticShop _shop;
private boolean _showInterface = true; private boolean _showInterface = true;
private int _interfaceSlot = 4; private int _interfaceSlot = 4;
public CosmeticManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, GadgetManager gadgetManager, MountManager mountManager, PetManager petManager, boolean useBooster) public CosmeticManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, GadgetManager gadgetManager, MountManager mountManager, PetManager petManager, boolean useBooster)
{
this(plugin, clientManager, donationManager, inventoryManager, gadgetManager, mountManager, petManager, useBooster, null);
}
public CosmeticManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, GadgetManager gadgetManager, MountManager mountManager, PetManager petManager, boolean useBooster, TreasureManager treasureManager)
{ {
super("Cosmetic Manager", plugin); super("Cosmetic Manager", plugin);
@ -45,6 +51,7 @@ public class CosmeticManager extends MiniPlugin
_gadgetManager = gadgetManager; _gadgetManager = gadgetManager;
_mountManager = mountManager; _mountManager = mountManager;
_petManager = petManager; _petManager = petManager;
_treasureManager = treasureManager;
_shop = new CosmeticShop(this, clientManager, donationManager, _moduleName, useBooster); _shop = new CosmeticShop(this, clientManager, donationManager, _moduleName, useBooster);
} }
@ -177,4 +184,9 @@ public class CosmeticManager extends MiniPlugin
{ {
return _showInterface; return _showInterface;
} }
public TreasureManager getTreasureManager()
{
return _treasureManager;
}
} }

View File

@ -3,21 +3,41 @@ package mineplex.core.cosmetic.ui.button;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import mineplex.core.cosmetic.ui.page.Menu; import mineplex.core.cosmetic.ui.page.Menu;
import mineplex.core.shop.item.SingleButton; import mineplex.core.shop.item.IButton;
public class TreasureButton extends SingleButton public class TreasureButton implements IButton
{ {
private Menu _menu; private Menu _menu;
private boolean _hasEnoughChests;
private boolean _hasEnoughKeys;
private boolean _canPurchaseKey;
public TreasureButton(Menu menu) public TreasureButton(Menu menu, boolean hasEnoughChests, boolean hasEnoughKeys, boolean canPurchaseKey)
{ {
_menu = menu; _menu = menu;
_hasEnoughChests = hasEnoughChests;
_hasEnoughKeys = hasEnoughKeys;
_canPurchaseKey = canPurchaseKey;
} }
@Override @Override
public void Clicked(Player player) public void ClickedLeft(Player player)
{ {
if (_hasEnoughChests && _hasEnoughKeys)
{
_menu.openTreasure(player);
player.closeInventory();
}
else if (_hasEnoughChests && _canPurchaseKey)
{
_menu.attemptPurchaseKey(player);
}
} }
@Override
public void ClickedRight(Player player)
{
if (_canPurchaseKey)
_menu.attemptPurchaseKey(player);
}
} }

View File

@ -1,5 +1,7 @@
package mineplex.core.cosmetic.ui.page; package mineplex.core.cosmetic.ui.page;
import java.util.ArrayList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -8,6 +10,8 @@ import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.CurrencyType; import mineplex.core.common.CurrencyType;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.CosmeticManager;
import mineplex.core.cosmetic.event.ActivateGemBoosterEvent; import mineplex.core.cosmetic.event.ActivateGemBoosterEvent;
import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.cosmetic.ui.CosmeticShop;
@ -29,13 +33,15 @@ import mineplex.core.shop.item.ShopItem;
import mineplex.core.shop.item.SingleButton; import mineplex.core.shop.item.SingleButton;
import mineplex.core.shop.page.ConfirmationPage; import mineplex.core.shop.page.ConfirmationPage;
import mineplex.core.shop.page.ShopPageBase; import mineplex.core.shop.page.ShopPageBase;
import mineplex.core.treasure.TreasureKey;
import mineplex.core.treasure.TreasureManager;
public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop> public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop>
{ {
public Menu(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) public Menu(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player)
{ {
super(plugin, shop, clientManager, donationManager, "Inventory", player); super(plugin, shop, clientManager, donationManager, "Inventory", player);
BuildPage(); BuildPage();
} }
@ -45,21 +51,35 @@ public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop>
AddItem(2, new ShopItem(175, DonationManager.Get(Player.getName()).getCoins() + " Coins", 1, false)); AddItem(2, new ShopItem(175, DonationManager.Get(Player.getName()).getCoins() + " Coins", 1, false));
int treasureChestCount = Plugin.getInventoryManager().Get(Player).getItemCount("Treasure Chest"); int treasureChestCount = Plugin.getInventoryManager().Get(Player).getItemCount("Treasure Chest");
int treasureKeyCount = Plugin.getInventoryManager().Get(Player).getItemCount("Treasure Key");
boolean canPurchaseKey = DonationManager.Get(Player.getName()).GetBalance(CurrencyType.Coins) >= 1000;
if (treasureChestCount <= 0 && Player.getName().equals("Phinary")) // if (treasureChestCount <= 0 && Player.getName().equals("Phinary"))
{ // {
Plugin.getInventoryManager().addItemToInventory(Player, "Utility", "Treasure Chest", 1); // Plugin.getInventoryManager().addItemToInventory(Player, "Utility", "Treasure Chest", 1);
treasureChestCount = Plugin.getInventoryManager().Get(Player).getItemCount("Treasure Chest"); // treasureChestCount = Plugin.getInventoryManager().Get(Player).getItemCount("Treasure Chest");
} // }
if (treasureChestCount > 0) ArrayList<String> lore = new ArrayList<String>();
{
AddButton(4, new ShopItem(Material.CHEST, C.cGold + treasureChestCount + " Treasure Chests", new String[] { ChatColor.RESET + "Click to Open Treasure Chest" }, 1, false), new TreasureButton(this)); lore.add(" ");
} lore.add(C.cYellow + "Treasure Keys Owned: " + ChatColor.RESET + treasureKeyCount);
lore.add(" ");
if (treasureChestCount > 0 && treasureKeyCount > 0)
lore.add(ChatColor.RESET + "Left Click to Open Treasure Chest");
else if (treasureChestCount > 0)
lore.add(ChatColor.RESET + "You must purchase a Treasure Key to open Treasure");
else else
{ lore.add(ChatColor.RESET + "You do not own any Treasure Chests to unlock");
AddItem(4, new ShopItem(Material.CHEST, ChatColor.RESET + C.cGold + treasureChestCount + " Treasure Chests" + ChatColor.RESET, new String[] { ChatColor.RESET + "Coming soon..." }, 1, false));
} lore.add(" ");
if (canPurchaseKey)
lore.add(ChatColor.RESET + "Right Click to purchase Treasure Key");
else
lore.add(ChatColor.RESET + "You need 1000 coins to purchase a Treasure Key");
AddButton(4, new ShopItem(Material.CHEST, C.cGold + treasureChestCount + " Treasure Chests", lore.toArray(new String[0]), 1, false), new TreasureButton(this, treasureChestCount > 0, treasureKeyCount > 0, canPurchaseKey));
final GemBooster gemBoosterItem = new GemBooster(Shop.getBoosterEnabled(), Plugin.getInventoryManager().Get(Player).getItemCount("Gem Booster")); final GemBooster gemBoosterItem = new GemBooster(Shop.getBoosterEnabled(), Plugin.getInventoryManager().Get(Player).getItemCount("Gem Booster"));
@ -254,4 +274,30 @@ public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop>
{ {
Shop.OpenPageForPlayer(player, new MusicPage(Plugin, Shop, ClientManager, DonationManager, "Music", player)); Shop.OpenPageForPlayer(player, new MusicPage(Plugin, Shop, ClientManager, DonationManager, "Music", player));
} }
public void openTreasure(Player player)
{
TreasureManager treasureManager = Plugin.getTreasureManager();
if (treasureManager == null)
{
UtilPlayer.message(player, F.main("Treasure", "You cannot open treasures on this server"));
}
else
{
treasureManager.attemptOpenTreasure(player);
}
}
public void attemptPurchaseKey(Player player)
{
Shop.OpenPageForPlayer(player, new ConfirmationPage<CosmeticManager, CosmeticShop>(Plugin, Shop, ClientManager, DonationManager, new Runnable()
{
public void run()
{
System.out.println("Added treasure key");
Plugin.getInventoryManager().addItemToInventory(Player, "Treasure", "Treasure Key", 1);
Refresh();
}
}, this, new TreasureKey(), CurrencyType.Coins, Player));
}
} }

View File

@ -11,7 +11,7 @@ public abstract class Reward
{ {
protected static final Random RANDOM = new Random(); protected static final Random RANDOM = new Random();
// Reward Manager used to log rewards given to players. Shitty way to do this, but it works for now // Reward Manager used to log rewards given to players.
private RewardManager _rewardManager; private RewardManager _rewardManager;
private RewardRarity _rarity; private RewardRarity _rarity;

View File

@ -0,0 +1,28 @@
package mineplex.core.treasure;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.common.CurrencyType;
import mineplex.core.shop.item.SalesPackageBase;
/**
* Created by shaun on 14-09-18.
*/
public class TreasureKey extends SalesPackageBase
{
public TreasureKey()
{
super("Treasure Key", Material.LEVER, (byte) 0, new String[] { ChatColor.RESET + "Used to open Treasure Chests" }, 1000);
KnownPackage = false;
OneTimePurchaseOnly = false;
}
@Override
public void Sold(Player player, CurrencyType currencyType)
{
}
}

View File

@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
@ -48,12 +49,14 @@ public class TreasureManager extends MiniPlugin
{ {
private NautHashMap<Player, Treasure> _playerTreasureMap; private NautHashMap<Player, Treasure> _playerTreasureMap;
private RewardManager _rewardManager; private RewardManager _rewardManager;
private InventoryManager _inventoryManager;
public TreasureManager(JavaPlugin plugin, DonationManager donationManager, InventoryManager inventoryManager) public TreasureManager(JavaPlugin plugin, DonationManager donationManager, InventoryManager inventoryManager)
{ {
super("Treasure", plugin); super("Treasure", plugin);
_playerTreasureMap = new NautHashMap<Player, Treasure>(); _playerTreasureMap = new NautHashMap<Player, Treasure>();
_inventoryManager = inventoryManager;
_rewardManager = new RewardManager(donationManager, inventoryManager, _rewardManager = new RewardManager(donationManager, inventoryManager,
250, 500, 250, 500,
750, 1500, 750, 1500,
@ -73,7 +76,7 @@ public class TreasureManager extends MiniPlugin
public void attemptOpenTreasure(Player player) public void attemptOpenTreasure(Player player)
{ {
if (checkNearbyBlocks(player) || checkNearSpawn(player) || checkInAir(player) || checkNearbyTreasure(player)) if (checkNearbyBlocks(player) || checkNearSpawn(player) || checkInAir(player) || checkNearbyTreasure(player) || checkNoTreasureAndKey(player))
return; return;
TreasureStartEvent event = new TreasureStartEvent(player); TreasureStartEvent event = new TreasureStartEvent(player);
@ -84,6 +87,10 @@ public class TreasureManager extends MiniPlugin
return; return;
} }
// Remove a treasure and a key
_inventoryManager.addItemToInventory(player, "Treasure", "Treasure Key", -1);
_inventoryManager.addItemToInventory(player, "Treasure", "Treasure Chest", -1);
Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest")); Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + C.cGreen + "Treasure Chest"));
Reward[] rewards = _rewardManager.getRewards(player, true); Reward[] rewards = _rewardManager.getRewards(player, true);
@ -103,6 +110,23 @@ public class TreasureManager extends MiniPlugin
} }
private boolean checkNoTreasureAndKey(Player player)
{
int treasureCount = _inventoryManager.Get(player).getItemCount("Treasure Chest");
int treasureKeyCount = _inventoryManager.Get(player).getItemCount("Treasure Key");
if (treasureCount < 1)
{
UtilPlayer.message(player, F.main("Treasure", "You don't have any treasure chests."));
}
else if (treasureKeyCount < 1)
{
UtilPlayer.message(player, F.main("Treasure", "You don't have any treasure keys."));
}
return (treasureCount < 1 || treasureKeyCount < 1);
}
private boolean checkNearbyTreasure(Player player) private boolean checkNearbyTreasure(Player player)
{ {
boolean nearTreasure = false; boolean nearTreasure = false;
@ -281,6 +305,19 @@ public class TreasureManager extends MiniPlugin
} }
} }
@EventHandler
public void inventoryOpen(InventoryOpenEvent event)
{
// Prevent players in treasures from opening inventories
if (event.getPlayer() instanceof Player)
{
if (_playerTreasureMap.containsKey(((Player) event.getPlayer())))
{
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void interact(PlayerInteractEvent event) public void interact(PlayerInteractEvent event)
{ {

View File

@ -53,10 +53,7 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTitle;
import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilWorld;
import mineplex.core.treasure.TreasureManager;
import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.CosmeticManager;
import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.DisguiseManager;
import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.disguise.disguises.DisguiseSlime;
@ -72,6 +69,7 @@ import mineplex.core.preferences.PreferencesManager;
import mineplex.core.projectile.ProjectileManager; import mineplex.core.projectile.ProjectileManager;
import mineplex.core.stats.StatsManager; import mineplex.core.stats.StatsManager;
import mineplex.core.task.TaskManager; import mineplex.core.task.TaskManager;
import mineplex.core.treasure.TreasureManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.hub.commands.ForcefieldRadius; import mineplex.hub.commands.ForcefieldRadius;
@ -83,7 +81,6 @@ import mineplex.hub.modules.MapManager;
import mineplex.hub.modules.NewsManager; import mineplex.hub.modules.NewsManager;
import mineplex.hub.modules.ParkourManager; import mineplex.hub.modules.ParkourManager;
import mineplex.hub.modules.TextManager; import mineplex.hub.modules.TextManager;
import mineplex.hub.modules.UHCManager;
import mineplex.hub.modules.VisibilityManager; import mineplex.hub.modules.VisibilityManager;
import mineplex.hub.modules.WorldManager; import mineplex.hub.modules.WorldManager;
import mineplex.hub.party.Party; import mineplex.hub.party.Party;
@ -92,6 +89,7 @@ import mineplex.hub.poll.PollManager;
import mineplex.hub.tutorial.TutorialManager; import mineplex.hub.tutorial.TutorialManager;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent;
import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
public class HubManager extends MiniClientPlugin<HubClient> public class HubManager extends MiniClientPlugin<HubClient>
@ -117,6 +115,7 @@ public class HubManager extends MiniClientPlugin<HubClient>
private InventoryManager _inventoryManager; private InventoryManager _inventoryManager;
private NewsManager _news; private NewsManager _news;
private AchievementManager _achievementManager; private AchievementManager _achievementManager;
private TreasureManager _treasureManager;
private Location _spawn; private Location _spawn;
private int _scoreboardTick = 0; private int _scoreboardTick = 0;
@ -161,8 +160,8 @@ public class HubManager extends MiniClientPlugin<HubClient>
_mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager); _mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager);
_inventoryManager = new InventoryManager(plugin); _inventoryManager = new InventoryManager(plugin);
_gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin)); _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin));
new CosmeticManager(_plugin, clientManager, donationManager, _inventoryManager, _gadgetManager, _mountManager, petManager, false); _treasureManager = new TreasureManager(_plugin, donationManager, _inventoryManager);
new TreasureManager(_plugin, donationManager, _inventoryManager); new CosmeticManager(_plugin, clientManager, donationManager, _inventoryManager, _gadgetManager, _mountManager, petManager, false, _treasureManager);
_partyManager = partyManager; _partyManager = partyManager;
_preferences = preferences; _preferences = preferences;