package be.isach.ultracosmetics.menu.menus; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.UltraCosmeticsData; import be.isach.ultracosmetics.config.MessageManager; import be.isach.ultracosmetics.config.SettingsManager; import be.isach.ultracosmetics.cosmetics.Category; import be.isach.ultracosmetics.cosmetics.Cosmetic; import be.isach.ultracosmetics.cosmetics.type.PetType; import be.isach.ultracosmetics.menu.ClickRunnable; import be.isach.ultracosmetics.menu.CosmeticMenu; import be.isach.ultracosmetics.player.UltraPlayer; import be.isach.ultracosmetics.util.ItemFactory; import be.isach.ultracosmetics.util.PurchaseData; import be.isach.ultracosmetics.version.AAnvilGUI; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.List; /** * Pet {@link be.isach.ultracosmetics.menu.Menu Menu}. * * @author iSach * @since 08-23-2016 */ public class MenuPets extends CosmeticMenu<PetType> { private UltraCosmetics ultraCosmetics; public MenuPets(UltraCosmetics ultraCosmetics) { super(ultraCosmetics, Category.PETS); this.ultraCosmetics = ultraCosmetics; } @Override protected void putItems(Inventory inventory, UltraPlayer ultraPlayer, int page) { addPetRenameItem(inventory, ultraPlayer); } private void addPetRenameItem(Inventory inventory, UltraPlayer player) { if (SettingsManager.getConfig().getBoolean("Pets-Rename.Enabled")) { ItemStack stack = null; int slot = inventory.getSize() - (getCategory().hasGoBackArrow() ? 5 : 6); ClickRunnable run = null; if (SettingsManager.getConfig().getBoolean("Pets-Rename.Permission-Required")) { if (player.hasPermission("ultracosmetics.pets.rename")) { if (player.getCurrentPet() != null) { stack = ItemFactory.create(ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getItemType(), ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getData(), MessageManager.getMessage("Rename-Pet").replace("%petname%", player.getCurrentPet().getType().getName())); run = data -> { renamePet(player); }; } else { stack = ItemFactory.create(ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getItemType(), ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getData(), MessageManager.getMessage("Active-Pet-Needed")); run = data -> { player.getBukkitPlayer().sendMessage(MessageManager.getMessage("Active-Pet-Needed")); player.getBukkitPlayer().closeInventory(); }; } } } else if (player.getCurrentPet() != null) { stack = ItemFactory.create(ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getItemType(), ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getData(), MessageManager.getMessage("Rename-Pet").replace("%petname%", player.getCurrentPet().getType().getName())); run = data -> { renamePet(player); }; } else { stack = ItemFactory.create(ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getItemType(), ItemFactory.createFromConfig("Categories.Rename-Pet-Item").getData(), MessageManager.getMessage("Active-Pet-Needed")); run = data -> { player.getBukkitPlayer().sendMessage(MessageManager.getMessage("Active-Pet-Needed")); player.getBukkitPlayer().closeInventory(); }; } putItem(inventory, slot, stack, run); } } private void renamePet(final UltraPlayer ultraPlayer) { Player p = ultraPlayer.getBukkitPlayer(); AAnvilGUI gui = newAnvilGUI(ultraPlayer.getBukkitPlayer(), (AAnvilGUI.AnvilClickEvent event) -> { if (event.getSlot() == AAnvilGUI.AnvilSlot.OUTPUT) { if (event.getName() == null) { return; } if (SettingsManager.getConfig().getBoolean("Pets-Rename.Requires-Money.Enabled") && UltraCosmeticsData.get().isUsingVaultEconomy()) { event.setWillClose(false); event.setWillDestroy(false); buyRenamePet(ultraPlayer, event.getName()); } else { ultraPlayer.setPetName(ultraPlayer.getCurrentPet().getType(), event.getName()); } } else { event.setWillClose(false); event.setWillDestroy(false); } }); gui.setSlot(AAnvilGUI.AnvilSlot.INPUT_LEFT, ItemFactory.create(Material.PAPER, (byte) 0x0, "")); gui.open(); } private AAnvilGUI newAnvilGUI(Player player, AAnvilGUI.AnvilClickEventHandler handler) { return UltraCosmeticsData.get().getVersionManager().newAnvilGUI(player, handler); } private void buyRenamePet(UltraPlayer ultraPlayer, final String name) { ItemStack showcaseItem = ItemFactory.create(Material.NAME_TAG, (byte) 0x0, MessageManager.getMessage("Rename-Pet-Purchase") .replace("%price%", "" + SettingsManager.getConfig().get("Pets-Rename.Requires-Money.Price")).replace("%name%", name)); PurchaseData purchaseData = new PurchaseData(); purchaseData.setPrice(SettingsManager.getConfig().getInt("Pets-Rename.Requires-Money.Price")); purchaseData.setShowcaseItem(showcaseItem); purchaseData.setOnPurchase(() -> ultraPlayer.setPetName(ultraPlayer.getCurrentPet().getType(), name)); MenuPurchase menu = new MenuPurchase(getUltraCosmetics(), MessageManager.getMessage("Menus.Rename-Pet"), purchaseData); menu.open(ultraPlayer); } @Override protected ItemStack filterItem(ItemStack itemStack, PetType cosmeticType, UltraPlayer player) { if(player.getPetName(cosmeticType) != null) { ItemStack item = itemStack.clone(); ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.setDisplayName(itemMeta.getDisplayName() + ChatColor.GRAY + " (" + player.getPetName(cosmeticType) + ")"); item.setItemMeta(itemMeta); return item; } return super.filterItem(itemStack, cosmeticType, player); } @Override public List<PetType> enabled() { return PetType.enabled(); } @Override protected void toggleOn(UltraPlayer ultraPlayer, PetType petType, UltraCosmetics ultraCosmetics) { petType.equip(ultraPlayer, ultraCosmetics); } @Override protected void toggleOff(UltraPlayer ultraPlayer) { ultraPlayer.removePet(); } @Override protected Cosmetic getCosmetic(UltraPlayer ultraPlayer) { return ultraPlayer.getCurrentPet(); } }