Solved Stained Glass problem

Discussion in 'Plugin Development' started by Random_Tomato, May 26, 2017.

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

    Random_Tomato

    So basically I am making a hats plugin, just for fun and I have an issue which I cannot figure out how to fix.
    in the GUI (below) I have figured out how to set different types of Stained Glass (Orange in the image) the problem now is that with 'if(item.getType() == Material.STAINED_GLASS)' always detects any glass and sets it to white.

    [​IMG]

    When the orange one is clicked I want it to detect that, at the moment it is treating it like a normal stained glass

    Hopefully that makes sense (Code below also)
    - Thanks ~Random

    hatsMenu (open)

    Code:
    package me.hubEssentials.hats;
    
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class hatsMenu implements CommandExecutor {
        public static final String INV_NAME = ChatColor.RED + "" + ChatColor.BOLD + "Hats";
        public boolean onCommand(CommandSender sender, Command command, String commandLabel, String [] args) {
            if(!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "You must be a player to execute this command!");
                return false;
            }
     
            Player player = (Player) sender;
     
            // INVENTORY 1
     
            Inventory inv = Bukkit.createInventory(null, 54, INV_NAME);
     
            // Line 2
     
            ItemStack ice = new ItemStack(Material.ICE, 1);
            ItemMeta iceMeta = ice.getItemMeta();
            iceMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "Ice Hat");
            ice.setItemMeta(iceMeta);
            inv.setItem(0, ice);
     
            ItemStack stainedWhite = new ItemStack(Material.STAINED_GLASS, 1);
            ItemMeta stainedWhiteMeta = stainedWhite.getItemMeta();
            stainedWhiteMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "White Stained Glass Hat");
            stainedWhite.setItemMeta(stainedWhiteMeta);
            inv.setItem(1, stainedWhite);
     
            ItemStack stainedOrange = new ItemStack(Material.STAINED_GLASS, 1, (short) 1);
            ItemMeta stainedOrangeMeta = stainedOrange.getItemMeta();
            stainedOrangeMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "Orange Stained Glass Hat");
            stainedOrange.setItemMeta(stainedOrangeMeta);
            inv.setItem(2, stainedOrange);
     
     
            // Line 5
     
            ItemStack barrier = nameItem(Material.BARRIER, ChatColor.RED + "" + ChatColor.BOLD + "Clear Hat");
            inv.setItem(49, barrier);
     
            ItemStack close = nameItem(Material.SPRUCE_DOOR_ITEM, ChatColor.RED + "" + ChatColor.BOLD + "Close the menu");
            inv.setItem(53, close);
     
            // OPEN THE INV
     
            player.openInventory(inv);
     
            return true;
         
        }
     
        private ItemStack nameItem(ItemStack item, String name) {
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(name);
     
            item.setItemMeta(meta);
            return item;
        }
    
        private ItemStack nameItem(Material item, String name) {
            return nameItem(new ItemStack(item), name);
        }
    
    }


    hatsClick (open)

    Code:
    package me.hubEssentials.hats;
    
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.inventory.meta.ItemMeta;
    
    public class hatsClick implements Listener {
        public static String INV_NAME = ChatColor.RED + "" + ChatColor.BOLD + "Hats";
    
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
            Inventory inv = event.getInventory();
            if(!(event.getWhoClicked() instanceof Player))
            return;
     
            if(!inv.getTitle().equals(ChatColor.RED + "" + ChatColor.BOLD + "Hats"))
                return;
     
    
            Player player = (Player) event.getWhoClicked();
            PlayerInventory inventory = player.getInventory();
            ItemStack item = event.getCurrentItem();
     
        // Blocks which will be used as hats
    
        //LINE 2
            ItemStack ice = new ItemStack(Material.ICE, 1);
            ItemMeta iceMeta = ice.getItemMeta();
            iceMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "Ice Hat");
            ice.setItemMeta(iceMeta);
     
            ItemStack stainedWhite = new ItemStack(Material.STAINED_GLASS, 1);
            ItemMeta stainedWhiteMeta = stainedWhite.getItemMeta();
            stainedWhiteMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "White Stained Glass Hat");
            stainedWhite.setItemMeta(stainedWhiteMeta);
     
               ItemStack stainedOrange = new ItemStack(Material.STAINED_GLASS, 1, (short) 1);
            ItemMeta stainedOrangeMeta = stainedOrange.getItemMeta();
            stainedOrangeMeta.setDisplayName(ChatColor.RED + "" + ChatColor.BOLD + "Orange Stained Glass Hat");
            stainedOrange.setItemMeta(stainedOrangeMeta);
     
    
     
        // What happens onClick
     
            if(item.getType() == Material.ICE) {
                inventory.setHelmet(ice);
            }
     
            if(item.getType() == Material.STAINED_GLASS) {
                inventory.setHelmet(stainedWhite);
            }
     
            if(item.getType() == Material.STAINED_GLASS) {
                inventory.setHelmet(stainedOrange);
    // i want to make this detect when the orange glass is clicked not every stained glass
            }
     
        //LINE 6
            ItemStack clear = new ItemStack(Material.AIR, 1); 
     
            if(item.getType() == Material.BARRIER) {
                inventory.setHelmet(clear);
            }
     
                   player.closeInventory();
                event.setCancelled(true);
    
            }
    
    }
     
    Last edited: May 26, 2017
  2. Offline

    Caderape2

    @Random_Tomato itemstack.getDurability(). For the blocks, it returns the data of the item, 1 for orange wool for example.
    So you have to check the type, and the durability
     
    Zombie_Striker and RithikVaderX3 like this.
Thread Status:
Not open for further replies.

Share This Page