Anvil Recipes

Discussion in 'Plugin Development' started by ReflectionCraft, Jul 21, 2019.

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

    ReflectionCraft

    I have an overall basic understanding of using an anvil with bukkit.

    I want to make it so If I add two items you cant normally add together in an anvil, I get a custom result.
    Heres what I got so far, very simple.
    EventsClass.java (open)

    Code:
    package me.alton.Dust.Events;
    
    import java.util.List;
    
    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.AnvilInventory;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.InventoryView;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    import me.alton.Dust.Items;
    
    public class EventsClass implements Listener{
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e)
        {
            Inventory inv = e.getInventory();
            if (inv instanceof AnvilInventory)
            {
                AnvilInventory anvil = (AnvilInventory)inv;
                InventoryView view = e.getView();
                int rawSlot = e.getRawSlot();
             
                if (rawSlot == view.convertSlot(rawSlot))//If inv is upper inv (Anvil inv)
                {
                    ItemStack[] items = anvil.getContents();
                 
                    ItemStack firstSlot = items[0];
                    ItemStack secondSlot = items[1];
                    if (secondSlot == Items.dust)
                    {
                        Material resultMat = firstSlot.getType();
                        String resultName = firstSlot.getItemMeta().getDisplayName();
                        List<String> resultLore = secondSlot.getItemMeta().getLore();
                     
                        //creating result
                        ItemStack result = new ItemStack(resultMat);
                        ItemMeta resultMeta = result.getItemMeta();
                        resultMeta.setLore(resultLore);
                        result.getItemMeta().setDisplayName(resultName);
                        //creating result
    
                        anvil.setItem(2, result);
                    }
    
                }
            }
        }
    }
    


    Items.java (open)

    Code:
    package me.alton.Dust;
    
    import java.util.ArrayList;
    
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    
    import net.md_5.bungee.api.ChatColor;
    
    public class Items {
        public static ItemStack dust = new ItemStack(Material.GLOWSTONE_DUST);
        public static ItemStack dust1 = new ItemStack(Material.GLOWSTONE_DUST);
        public static ItemStack dust2 = new ItemStack(Material.GLOWSTONE_DUST);
        public static ItemStack dust3 = new ItemStack(Material.GLOWSTONE_DUST);
        public static ItemStack dust4 = new ItemStack(Material.GLOWSTONE_DUST);
    
      
        //
        //DEFAULT TIER
        //
        public static void getDefault(Player player) //Creates the dust item
        {      
            //ItemStack dust = new ItemStack(Material.GLOWSTONE_DUST);
            ItemMeta dustMeta = dust.getItemMeta();
            dustMeta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Magic Dust");
            ArrayList<String> dustLore = new ArrayList<String>();
            dustLore.add(ChatColor.GRAY + "Tier: " + ChatColor.WHITE + "Common");
          
            dustMeta.setLore(dustLore);
            dust.setItemMeta(dustMeta);  
          
            player.getInventory().addItem(dust);
        }
        //
        //DEFAULT TIER
        //
      
        //
        //TIER 1
        //
        public static void getT1(Player player) //Creates the dust item
        {      
            //ItemStack dust1 = new ItemStack(Material.GLOWSTONE_DUST);
            ItemMeta dust1Meta = dust1.getItemMeta();
            dust1Meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Magic Dust");
            dust1Meta.addEnchant(Enchantment.DURABILITY, 1, true);
            ArrayList<String> dust1Lore = new ArrayList<String>();
            dust1Lore.add(ChatColor.GRAY + "Tier: " + ChatColor.AQUA + "Magical");
          
            dust1Meta.setLore(dust1Lore);
            dust1.setItemMeta(dust1Meta);  
          
            player.getInventory().addItem(dust1);
        }
        //
        //TIER 1
        //
      
        //
        //TIER 2
        //
        public static void getT2(Player player) //Creates the dust item
        {      
            //ItemStack dust2 = new ItemStack(Material.GLOWSTONE_DUST);
            ItemMeta dust2Meta = dust2.getItemMeta();
            dust2Meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Magic Dust");
            dust2Meta.addEnchant(Enchantment.DURABILITY, 2, true);
            ArrayList<String> dust2Lore = new ArrayList<String>();
            dust2Lore.add(ChatColor.GRAY + "Tier: " + ChatColor.GREEN + "Uncommon");;
          
            dust2Meta.setLore(dust2Lore);
            dust2.setItemMeta(dust2Meta);  
          
            player.getInventory().addItem(dust2);
        }
        //
        //TIER 2
        //
      
        //
        //TIER 3
        //
        public static void getT3(Player player) //Creates the dust item
        {      
            //ItemStack dust3 = new ItemStack(Material.GLOWSTONE_DUST);
            ItemMeta dust3Meta = dust3.getItemMeta();
            dust3Meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Magic Dust");
            dust3Meta.addEnchant(Enchantment.DURABILITY, 3, true);
            ArrayList<String> dust3Lore = new ArrayList<String>();
            dust3Lore.add(ChatColor.GRAY + "Tier: " + ChatColor.GOLD + "Rare");
          
            dust3Meta.setLore(dust3Lore);
            dust3.setItemMeta(dust3Meta);  
          
            player.getInventory().addItem(dust3);
        }
        //
        //TIER 3
        //
      
        //
        //TIER 4
        //
        public static void getT4(Player player) //Creates the dust item
        {      
            //ItemStack dust4 = new ItemStack(Material.GLOWSTONE_DUST);
            ItemMeta dust4Meta = dust4.getItemMeta();
            dust4Meta.setDisplayName(ChatColor.YELLOW + "" + ChatColor.BOLD + "Magic Dust");
            dust4Meta.addEnchant(Enchantment.DURABILITY, 4, true);
            ArrayList<String> dust4Lore = new ArrayList<String>();
            dust4Lore.add(ChatColor.GRAY + "Tier: " + ChatColor.LIGHT_PURPLE + "Epic");
          
            dust4Meta.setLore(dust4Lore);
            dust4.setItemMeta(dust4Meta);  
          
            player.getInventory().addItem(dust4);
        }
        //
        //TIER 4
        //
    
    
      
    
    }
    


    Main.java (open)

    Code:
    package me.alton.Dust;
    
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import me.alton.Dust.Events.EventsClass;
    
    public class Main extends JavaPlugin{
    
        String version = "v1.0";
        private Commands commands = new Commands(); //Imports Commands class
       
        public void onEnable()
        {
            getCommand(commands.cmd1).setExecutor(commands); //Registers Command based on string its tied to
            getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "\n\n[Dust " + version + "] Enabled\n\n");
            getServer().getPluginManager().registerEvents(new EventsClass(), this);
            loadConfig();
        }
        public void onDisable()
        {
            getServer().getConsoleSender().sendMessage(ChatColor.RED + "\n\n[Dust " + version + "] Disabled\n\n");
        }
       
        public void loadConfig()
        {       
                getConfig().options().copyDefaults(true);
                saveConfig();
        }

    The problem is that my result slot when I have those two items there doesn't get set.
    I've looked around and I saw that some people are saying its a problem with bukkit not fully implementing a set slot function for the result. But that dosnt make sense to me because theres got to be a way to do it.
     
    Last edited: Jul 21, 2019
  2. Offline

    Kars

Thread Status:
Not open for further replies.

Share This Page