Adding Enchantments To ItemStacks In Inventories.

Discussion in 'Plugin Development' started by Azrex, May 1, 2015.

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

    Azrex

    I made an ItemStack which contained a sword and added an Enchantment for it look nice. But the encahnted effect doesnt come up in the inventory.


    Code:
    package me.Azrex.InventoryGUI;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener{
    
        @Override
        public void onDisable() {
        }
    
        @Override
        public void onEnable() {
           
            getServer().getPluginManager().registerEvents(this, this);
           
        }
           
           
        private void openGUI(Player player) {
            Inventory inv = Bukkit.createInventory(null, 27, ChatColor.RED + ":-Crate Key-:");
               
            //Getting The Items       
            ItemStack sword = new ItemStack(Material.DIAMOND_SWORD);
            ItemMeta swordMeta = sword.getItemMeta();
           
            ItemStack axe = new ItemStack(Material.DIAMOND_AXE);
            ItemMeta axeMeta = axe.getItemMeta();
           
            //Item Names
            swordMeta.setDisplayName(ChatColor.RED + "The Sword Of Truth");
            sword.setItemMeta(swordMeta);
           
            axeMeta.setDisplayName(ChatColor.GREEN + "Thor's Axe");
            axe.setItemMeta(axeMeta);
           
            inv.setItem(12, sword);
            inv.setItem(14, axe);
           
            sword.addEnchantment(Enchantment.DAMAGE_ALL, 2);
           
           
            player.openInventory(inv);
           
            }
       
    
       
        @EventHandler
        public void OnPlayerInteract(PlayerInteractEvent event) {
            Action a= event.getAction();
            ItemStack is = event.getItem();
           
            if(a == Action.PHYSICAL || is == null || is.getType()==Material.AIR)
                return;
           
                 if (is.getType() == Material.COMPASS)
                  openGUI(event.getPlayer());
        }
       
            @EventHandler   
            public void OnInventoryClick(InventoryClickEvent event) {
               
                if(!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase(":-Crate Key-:"))
                    return;
                Player player = (Player) event.getWhoClicked();
                        event.setCancelled(true);
                   
                        if(event.getCurrentItem()== null || event.getCurrentItem().getType()==Material.AIR || !event.getCurrentItem().hasItemMeta()){
                            player.closeInventory();
                            return;
                           
                        }
                       
            }
           
        
    }
     
  2. If you create a new itemstack instance, you need to add the enchantment before you set the item in the inventory, but what u cán do is use inv.getItem(<slot>).addEnchantment
     
  3. Offline

    Reynergodoy

    you should add the enchantment before the ItemStack, not before the add in the inventory

    Code:
    package me.Azrex.InventoryGUI;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    public class Main extends JavaPlugin implements Listener{
        @Override
        public void onDisable() {
        }
        @Override
        public void onEnable() {
        
            getServer().getPluginManager().registerEvents(this, this);
        
        }
        
        
        private void openGUI(Player player) {
            Inventory inv = Bukkit.createInventory(null, 27, ChatColor.RED + ":-Crate Key-:");
            
            //Getting The Items   
            ItemStack sword = new ItemStack(Material.DIAMOND_SWORD);
            ItemMeta swordMeta = sword.getItemMeta();
            sword.addEnchantment(Enchantment.DAMAGE_ALL, 0);
        
            ItemStack axe = new ItemStack(Material.DIAMOND_AXE);
            ItemMeta axeMeta = axe.getItemMeta();
        
            //Item Names
            swordMeta.setDisplayName(ChatColor.RED + "The Sword Of Truth");
            sword.setItemMeta(swordMeta);
        
            axeMeta.setDisplayName(ChatColor.GREEN + "Thor's Axe");
            axe.setItemMeta(axeMeta);
        
            inv.setItem(12, sword);
            inv.setItem(14, axe);
        
        
        
            player.openInventory(inv);
        
            }
    
    
        @EventHandler
        public void OnPlayerInteract(PlayerInteractEvent event) {
            Action a= event.getAction();
            ItemStack is = event.getItem();
        
            if(a == Action.PHYSICAL || is == null || is.getType()==Material.AIR)
                return;
        
                 if (is.getType() == Material.COMPASS)
                  openGUI(event.getPlayer());
        }
    
            @EventHandler
            public void OnInventoryClick(InventoryClickEvent event) {
            
                if(!ChatColor.stripColor(event.getInventory().getName()).equalsIgnoreCase(":-Crate Key-:"))
                    return;
                Player player = (Player) event.getWhoClicked();
                        event.setCancelled(true);
                
                        if(event.getCurrentItem()== null || event.getCurrentItem().getType()==Material.AIR || !event.getCurrentItem().hasItemMeta()){
                            player.closeInventory();
                            return;
                        
                        }
                    
            }
        
    
    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
Thread Status:
Not open for further replies.

Share This Page