Check for ItemStack with meta

Discussion in 'Plugin Development' started by maxecito, Apr 20, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    maxecito

    Hey guys!
    I created a custom Inventory, which works fine, now I got the same item 2 times, and Im using the meta to identify them. The first one is detected, althought the second isnt.

    Code:
    package at.skyblock.main;
    
    import java.util.ArrayList;
    import java.util.Random;
    
    import org.bukkit.ChatColor;
    import org.bukkit.DyeColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Arrow;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Villager;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.inventory.InventoryOpenEvent;
    import org.bukkit.event.player.PlayerInteractEntityEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    
    public class Events implements Listener {
    
       Main plugin;
       public boolean villager_spawned = false;
    
       public Events(Main instance) {
         plugin = instance;
       }
    
       @EventHandler
       public void onPlayerInteractEntityEvent(PlayerInteractEntityEvent event) {
         Player p = event.getPlayer();
         Entity entity = event.getRightClicked();
         if ((entity instanceof Villager))
           event.setCancelled(true);
    
         if (entity.getCustomName().equals("§a§lGaladriel")) {
           if (plugin.getConfig().getBoolean("RPG.quests.elf." + p.getName()) == false) {
             p.sendMessage(ChatColor.GRAY + "[Quest started]");
             p.sendMessage(ChatColor.GRAY + "[1/5] " + ChatColor.DARK_GREEN
                 + "My village! It is on fire!");
             p.sendMessage(ChatColor.GRAY + "[2/5] " + ChatColor.DARK_GREEN
                 + "I were able to escape, but...");
             p.sendMessage(ChatColor.GRAY + "[3/5] " + ChatColor.DARK_GREEN
                 + "our elder. He is too weak!");
             p.sendMessage(ChatColor.GRAY + "[4/5] " + ChatColor.DARK_GREEN
                 + "Please, help me out... Give me a proof he is alive!");
             p.sendMessage(ChatColor.GRAY + "[5/5] " + ChatColor.DARK_GREEN
                 + "He is located in the church, I think...");
    
             plugin.getConfig().set("RPG.quests.elf." + p.getName(), true);
           } else {
             p.sendMessage(ChatColor.RED
                 + "You've already started/done this quest!");
           }
         }
         return;
    
       }
    
       @EventHandler(priority = EventPriority.HIGH)
       public void onPlayerUse(PlayerInteractEvent event) {
         Player p = event.getPlayer();
    
         if (p.getItemInHand().getType() == Material.CHEST) {
           event.setCancelled(true);
           p.openInventory(Elf_levelup.levelup_elf);
         }
       }
    
       @EventHandler
       public void onInventoryClickTribe(InventoryClickEvent event) {
         Player p = (Player) event.getWhoClicked();
         ItemStack clicked = event.getCurrentItem();
         org.bukkit.inventory.Inventory inventory = event.getInventory();
         if ((inventory.getName().equals(Tribe_inventory.tribe_selector
             .getName())) && (clicked.getType() == Material.BOW)) {
           plugin.getConfig().set("RPG.folk." + p.getName(), "elf");
           event.setCancelled(true);
           p.closeInventory();
           p.openInventory(Class_inventory.class_selector);
    
         } else if ((inventory.getName().equals(Tribe_inventory.tribe_selector
             .getName())) && (clicked.getType() == Material.IRON_AXE)) {
    
           plugin.getConfig().set("RPG.folk." + p.getName(), "orc");
           event.setCancelled(true);
           p.closeInventory();
           p.openInventory(Class_inventory.class_selector);
    
         } else if ((inventory.getName().equals(Tribe_inventory.tribe_selector
             .getName())) && (clicked.getType() == Material.ANVIL)) {
    
           plugin.getConfig().set("RPG.folk." + p.getName(), "dwarf");
           event.setCancelled(true);
           p.closeInventory();
           p.openInventory(Class_inventory.class_selector);
         } else if ((inventory.getName().equals(Tribe_inventory.tribe_selector
             .getName())) && (clicked.getType() == Material.NETHER_STAR)) {
           plugin.getConfig().set("RPG.folk." + p.getName(), "demon");
           event.setCancelled(true);
           p.closeInventory();
           p.openInventory(Class_inventory.class_selector);
         }
       }
    
       @SuppressWarnings("unused")
       @EventHandler
       public void onInventoryClickClass(InventoryClickEvent event) {
    
         // ITEMS
         // OAKWOOD ELVEN-BOW
         ItemStack elf_bow = new ItemStack(Material.BOW, 1);
         elf_bow.addEnchantment(Enchantment.ARROW_INFINITE, 1);
         ItemMeta elf_bow_meta = elf_bow.getItemMeta();
         elf_bow_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + ChatColor.GREEN + "Oakwood elven-bow");
         ArrayList<String> lore = new ArrayList<String>();
         lore.add(ChatColor.AQUA + "Damage: 3-5");
         lore.add(ChatColor.AQUA + "Requires no Level");
         lore.add(ChatColor.AQUA + "Rarity: " + ChatColor.GREEN + "Common");
         elf_bow_meta.setLore(lore);
         elf_bow.setItemMeta(elf_bow_meta);
         // OAKWOOD ORC-AXE
         ItemStack orc_axe = new ItemStack(Material.IRON_AXE, 1);
         ItemMeta orc_axe_meta = orc_axe.getItemMeta();
         orc_axe_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + ChatColor.GREEN + "Oakwood Orc-axe");
         ArrayList<String> lore2 = new ArrayList<String>();
         lore2.add(ChatColor.AQUA + "Damage: 4-6");
         lore2.add(ChatColor.AQUA + "Requires no Level");
         lore2.add(ChatColor.AQUA + "Rarity: " + ChatColor.GREEN + "Common");
         orc_axe_meta.setLore(lore2);
         orc_axe.setItemMeta(orc_axe_meta);
    
         // LEATHER TEST DEFENCE (REMOVE AFTER TEST)
         ItemStack orc_axe2 = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
         ItemMeta orc_axe_meta2 = orc_axe2.getItemMeta();
         orc_axe_meta2.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + ChatColor.GREEN + "Simple Tunic");
         ArrayList<String> lore3 = new ArrayList<String>();
         lore3.add(ChatColor.AQUA + "+10 Health");
         orc_axe_meta2.setLore(lore3);
         orc_axe2.setItemMeta(orc_axe_meta2);
    
         // ####################
         Player p = (Player) event.getWhoClicked();
         World w = p.getWorld();
    
         // LOCATIONS
         Location elf_loc = new Location(w, -196, 64, 244);
         Location orc_loc = new Location(w, -196, 64, 244);
         Location dwarf_loc = new Location(w, -196, 64, 244);
         Location demon_loc = new Location(w, -196, 64, 244);
         // #########################
         ItemStack elf_levelupchest = new ItemStack(Material.CHEST);
         ItemMeta elf_levelupchest_meta = elf_levelupchest.getItemMeta();
         elf_levelupchest_meta.setDisplayName(ChatColor.GOLD + ""
             + ChatColor.BOLD + "Levelup Skills");
         elf_levelupchest.setItemMeta(elf_levelupchest_meta);
    
         ItemStack clicked = event.getCurrentItem();
         org.bukkit.inventory.Inventory inventory = event.getInventory();
         if ((inventory.getName().equals(Class_inventory.class_selector
             .getName())) && (clicked.getType() == Material.BLAZE_POWDER)) {
           plugin.getConfig().set("RPG.folk.class." + p.getName(), "mage");
    
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("elf")) {
    
             // p.teleport(elf_loc);
    
             p.getInventory().setItem(0, elf_bow);
             p.getInventory().setItem(8, new ItemStack(Material.ARROW));
             p.getInventory().setChestplate(orc_axe2);
             p.getInventory().setItem(7, elf_levelupchest);
    
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("dwarf")) {
    
             // p.teleport(dwarf_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("orc")) {
    
             // p.teleport(orc_loc);
    
             p.getInventory().setItem(0, orc_axe);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("demon")) {
    
             // p.teleport(demon_loc);
           }
    
           p.removePotionEffect(PotionEffectType.BLINDNESS);
           p.removePotionEffect(PotionEffectType.SLOW);
           p.sendMessage(ChatColor.GREEN
               + ""
               + ChatColor.BOLD
               + "Succesfully chose the "
               + plugin.getConfig().getString("RPG.folk." + p.getName())
               + " tribe, as "
               + plugin.getConfig().getString(
                   "RPG.folk.class." + p.getName()));
           event.setCancelled(true);
           p.closeInventory();
    
         } else if ((inventory.getName().equals(Class_inventory.class_selector
             .getName())) && (clicked.getType() == Material.SAPLING)) {
           plugin.getConfig().set("RPG.folk.class." + p.getName(), "shaman");
    
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("elf")) {
    
             // p.teleport(elf_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("dwarf")) {
    
             // p.teleport(dwarf_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("orc")) {
    
             // p.teleport(orc_loc);
           }
    
           p.removePotionEffect(PotionEffectType.BLINDNESS);
           p.removePotionEffect(PotionEffectType.SLOW);
           p.sendMessage(ChatColor.GREEN
               + ""
               + ChatColor.BOLD
               + "Succesfully chose the "
               + plugin.getConfig().getString("RPG.folk." + p.getName())
               + " tribe, as "
               + plugin.getConfig().getString(
                   "RPG.folk.class." + p.getName()));
           event.setCancelled(true);
           p.closeInventory();
         } else if ((inventory.getName().equals(Class_inventory.class_selector
             .getName())) && (clicked.getType() == Material.IRON_SWORD)) {
           plugin.getConfig().set("RPG.folk.class." + p.getName(), "warrior");
    
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("elf")) {
    
             // p.teleport(elf_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("dwarf")) {
    
             // p.teleport(dwarf_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("orc")) {
    
             // p.teleport(orc_loc);
           }
           if (plugin.getConfig().getString("RPG.folk." + p.getName())
               .equals("demon")) {
    
             // p.teleport(demon_loc);
           }
    
           p.removePotionEffect(PotionEffectType.BLINDNESS);
           p.removePotionEffect(PotionEffectType.SLOW);
           p.sendMessage(ChatColor.GREEN
               + ""
               + ChatColor.BOLD
               + "Succesfully chose the "
               + plugin.getConfig().getString("RPG.folk." + p.getName())
               + " tribe, as "
               + plugin.getConfig().getString(
                   "RPG.folk.class." + p.getName()));
           event.setCancelled(true);
         }
    
       }
    
       @SuppressWarnings("deprecation")
       @EventHandler
       public void onInventoryClickLevelup(InventoryClickEvent event) {
    
         ItemStack trickshot = new ItemStack(Material.BLAZE_POWDER);
         ItemMeta trickshot_meta = trickshot.getItemMeta();
         trickshot_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Trickshot I");
         ArrayList<String> trickshot_desc = new ArrayList<String>();
         trickshot_desc.add(ChatColor.AQUA + "10% Chance to apply");
         trickshot_desc.add(ChatColor.AQUA + "Blindness I on hit");
         trickshot_meta.setLore(trickshot_desc);
         trickshot.setItemMeta(trickshot_meta);
    
         ItemStack trickshot2 = new ItemStack(Material.BLAZE_POWDER);
         ItemMeta trickshot2_meta = trickshot2.getItemMeta();
         trickshot2_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Trickshot II");
         ArrayList<String> trickshot2_desc = new ArrayList<String>();
         trickshot2_desc.add(ChatColor.AQUA + "15% Chance to apply");
         trickshot2_desc.add(ChatColor.AQUA + "Blindness I on hit");
         trickshot2_meta.setLore(trickshot2_desc);
         trickshot2.setItemMeta(trickshot2_meta);
    
         ItemStack mobility = new ItemStack(Material.HARD_CLAY,
             DyeColor.RED.getData(), (short) 1);
         ItemMeta mobility_meta = mobility.getItemMeta();
         mobility_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Mobility I");
         ArrayList<String> mobility_desc = new ArrayList<String>();
         mobility_desc.add(ChatColor.AQUA + "Speed I for ");
         mobility_desc.add(ChatColor.AQUA + "2 seconds on hit");
         mobility_meta.setLore(mobility_desc);
         mobility.setItemMeta(mobility_meta);
    
         Player p = (Player) event.getWhoClicked();
         ItemStack clicked = event.getCurrentItem();
         org.bukkit.inventory.Inventory inventory = event.getInventory();
         if ((inventory.getName().equals(Elf_levelup.levelup_elf.getName()))) {
           if (clicked.getType().equals(mobility.getType())
               && clicked.hasItemMeta()) {
             event.setCancelled(true);
             plugin.getConfig().set(
                 "RPG.levelups." + p.getName() + ".mobility", 1);
    
             p.sendMessage(ChatColor.GREEN
                 + "Upgraded the skill Mobility to level "
                 + ChatColor.DARK_RED
                 + ""
                 + ChatColor.BOLD
                 + plugin.getConfig().getInt(
                     "RPG.levelups." + p.getName() + ".mobility"));
    
             p.closeInventory();
    
           } else if ((inventory.getName().equals(Elf_levelup.levelup_elf
               .getName()))) {
             if (clicked.getType().equals(trickshot.getType())
                 && clicked.getItemMeta()
                     .equals(trickshot.getItemMeta())) {
    
               // IS DETECTED
    
               event.setCancelled(true);
               plugin.getConfig().set(
                   "RPG.levelups." + p.getName() + ".trickshot", 1);
               p.sendMessage(ChatColor.GREEN
                   + "Upgraded the skill Trickshot to level "
                   + ChatColor.DARK_RED
                   + ""
                   + ChatColor.BOLD
                   + plugin.getConfig().getInt(
                       "RPG.levelups." + p.getName()
                           + ".trickshot"));
               p.closeInventory();
             }
    
           } else if ((inventory.getName().equals(Elf_levelup.levelup_elf
               .getName()))) {
             if (clicked.getType().equals(trickshot2.getType())
                 && clicked.getItemMeta().equals(
                     trickshot2.getItemMeta())) {
    
               // IS NOT DETECTED
    
               event.setCancelled(true);
               plugin.getConfig().set(
                   "RPG.levelups." + p.getName() + ".trickshot", 2);
               p.sendMessage(ChatColor.GREEN
                   + "Upgraded the skill Trickshot to level "
                   + ChatColor.DARK_RED
                   + ""
                   + ChatColor.BOLD
                   + plugin.getConfig().getInt(
                       "RPG.levelups." + p.getName()
                           + ".trickshot"));
               p.closeInventory();
             }
           }
         }
    
       }
    
       @EventHandler
       public void onEntityDamage(EntityDamageByEntityEvent event) {
         Entity projectile = event.getDamager();
         if (projectile instanceof Arrow) {
           Entity target = event.getEntity();
           Arrow arrow = (Arrow) event.getDamager();
    
           if (arrow.getShooter() instanceof Player) {
    
             Player shooter = (Player) arrow.getShooter();
    
             if (plugin.getConfig().getInt(
                 "RPG.levelups." + shooter.getName() + ".mobility") == 1) {
               shooter.addPotionEffect(new PotionEffect(
                   PotionEffectType.SPEED, 40, 0));
             }
             if (target instanceof Player) {
               Player damagd = (Player) target;
               Random rand = new Random();
               int randomNumber = rand.nextInt(101);
               shooter.sendMessage("" + randomNumber);
               if (plugin.getConfig().getInt(
                   "RPG.levelups." + shooter.getName() + ".trickshot") == 1) {
                 if ((int) randomNumber <= 10) {
    
                   damagd.addPotionEffect(new PotionEffect(
                       PotionEffectType.BLINDNESS, 80, 0));
                 }
               } else if (plugin.getConfig().getInt(
                   "RPG.levelups." + shooter.getName() + ".trickshot") == 2) {
                 if ((int) randomNumber <= 15) {
    
                   damagd.addPotionEffect(new PotionEffect(
                       PotionEffectType.BLINDNESS, 80, 0));
                 }
               }
             }
    
           }
         }
    
       }
    
       @EventHandler
       public void inventoryOpen(InventoryOpenEvent e) {
         Player p = (Player) e.getPlayer();
         ItemStack bought = new ItemStack(Material.WHEAT);
         ItemMeta bought_meta = bought.getItemMeta();
         bought_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Already owned");
         bought.setItemMeta(bought_meta);
    
         if (e.getInventory().getName()
             .equals(Elf_levelup.levelup_elf.getName())) {
           if (plugin.getConfig().getInt(
               "RPG.levelups." + p.getName() + ".mobility") == 1) {
             Elf_levelup.levelup_elf.setItem(0, bought);
    
           } else if (plugin.getConfig().getInt(
               "RPG.levelups." + p.getName() + ".trickshot") == 1) {
             Elf_levelup.levelup_elf.setItem(18, bought);
           }
         } else if (plugin.getConfig().getInt(
             "RPG.levelups." + p.getName() + ".trickshot") == 2) {
           Elf_levelup.levelup_elf.setItem(18, bought);
         }
    
       }
    }
    
    
    I wrote a // commentary at the item-check.

    If you need it, here is my Inventory class (Elf_levelup)
    Code:
    package at.skyblock.main;
    
    import java.util.ArrayList;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.DyeColor;
    import org.bukkit.Material;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    @SuppressWarnings("deprecation")
    public class Elf_levelup {
       public static org.bukkit.inventory.Inventory levelup_elf = Bukkit
           .createInventory(null, 27, ChatColor.DARK_GREEN + ""
               + ChatColor.BOLD + "Levelup-manager");
    
       static {
    
         ItemStack mobility = new ItemStack(Material.HARD_CLAY,
             DyeColor.RED.getData(), (short) 1);
         ItemMeta mobility_meta = mobility.getItemMeta();
         mobility_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Mobility I");
         ArrayList<String> mobility_desc = new ArrayList<String>();
         mobility_desc.add(ChatColor.AQUA + "Speed I for ");
         mobility_desc.add(ChatColor.AQUA + "2 seconds on hit");
         mobility_meta.setLore(mobility_desc);
         mobility.setItemMeta(mobility_meta);
    
         ItemStack trickshot = new ItemStack(Material.BLAZE_POWDER);
         ItemMeta trickshot_meta = trickshot.getItemMeta();
         trickshot_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Trickshot I");
         ArrayList<String> trickshot_desc = new ArrayList<String>();
         trickshot_desc.add(ChatColor.AQUA + "10% Chance to apply");
         trickshot_desc.add(ChatColor.AQUA + "Blindness I on hit");
         trickshot_meta.setLore(trickshot_desc);
         trickshot.setItemMeta(trickshot_meta);
    
         ItemStack trickshot2 = new ItemStack(Material.BLAZE_POWDER);
         ItemMeta trickshot2_meta = trickshot2.getItemMeta();
         trickshot2_meta.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD
             + "Trickshot II");
         ArrayList<String> trickshot2_desc = new ArrayList<String>();
         trickshot2_desc.add(ChatColor.AQUA + "15% Chance to apply");
         trickshot2_desc.add(ChatColor.AQUA + "Blindness I on hit");
         trickshot2_meta.setLore(trickshot2_desc);
         trickshot2.setItemMeta(trickshot2_meta);
    
         levelup_elf.setItem(0, mobility);
         levelup_elf.setItem(18, trickshot);
         levelup_elf.setItem(19, trickshot2);
       }
    }
    
    Would be awesome if someone could help me

    - Maxecito

    Now trying to check for the meta with displayname, works perfectly if there is only 1 item, but the second doesnt register

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
  2. Gad T_T

    Code:
    Inventory inventory = Bukkit.createInventory(null, 54, "TestInventory");
    
    public ItemStack namedItem(Material material, String name) {
        ItemStack stack = new ItemStack(material);
        ItemMeta im = stack.getItemMeta();
        im.setDisplayName(name);
        stack.setItemMeta(im);
    return stack;
    
    public void setupInventory() {
        inventory.setItem(o, namedItem(Material.DIRT, "One"));
        inventory.setItem(o, namedItem(Material.DIRT, "Two"));
    }
    
    @EventHandler
    public void onClick(InventoryClickEvent event) {
    Inventory ci = event.getClickedInventory();
    if(ci.getTitle() != null && ci.getTitle().equals(inventory.getTitle()) { //Don't know if title can be null so better check for it
      //Okay you can check this in so many ways, we already check the name of the inventory
      //so you could do the checks using the slots
      ItemStack stack = event.getCurrentItem();
       if(stack == null || stack.getType().equals(Material.AIR)) {
          return;
       }
       if(!stack.hasItemMeta()) {
          return;
       }
       ItemMeta im = stack.getItemMeta();
       if(!im.hasDisplayName()) {
          return;
       }
       String dn = im.getDisplayName();
       if(dn.equals("One") {
          //Stuff
       } else if(dn.equals("Two") {
          //Stuff
       }
    }
    }
    
    if(post.isSpoonFeed()) {
       post.getAuthor().flameHim();
    }
    
     
Thread Status:
Not open for further replies.

Share This Page