Randomizing recipes

Discussion in 'Plugin Development' started by JeroenV, Jun 8, 2013.

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

    JeroenV

    Hey,

    EDIT: Long story short, I need a simple way to represent an empty slot in the crafting grid.

    I've been trying to randomize the normal minecraft recipes but I've hit a few bumps in the road. I'll show you my code first and then explain what's wrong:

    Code:
    package com.hotmail.jeroenverstraelen;
     
    import org.bukkit.Material;
    import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftItemStack;
     
    import net.minecraft.server.v1_5_R3.CraftingManager;
    import net.minecraft.server.v1_5_R3.Item;
    import net.minecraft.server.v1_5_R3.ItemStack;
     
    public class Recipes {
     
     
        public void randomizeRecipes(){
        CraftingManager.getInstance().recipes.clear();
     
        for(int i=0;i<=50;i++){
            org.bukkit.inventory.ItemStack it = new org.bukkit.inventory.ItemStack(Material.getMaterial(i),(int)Math.floor(Math.random()*6)+1);
            ItemStack is = CraftItemStack.asNMSCopy(it);
         
            int types = (int) Math.floor(Math.random()*3);
         
            switch(types){
            case 0: CraftingManager.getInstance().registerShapedRecipe(is,getObject());
            case 1: CraftingManager.getInstance().registerShapedRecipe(is,getObject2());
            case 2: CraftingManager.getInstance().registerShapedRecipe(is,getObject3());
            }
        } 
     
        }
     
     
        public Object getObject(){
        String code1 = "";
        String code2 = "";
        String code3 = "";
         
        for(int i=0;i<=2;i++){
            if((int) Math.floor(Math.random()*2) == 1){
                code1 = code1+"#";
            }
            else{ code1 = code1+"X";}
            if((int) Math.floor(Math.random()*2) == 1){
                code2 = code2+"#";
            }
            else{ code2 = code2+"X";}
            if((int) Math.floor(Math.random()*2) == 1){
                code3 = code3+"#";
            }
            else{ code3 = code3+"X";}
        }
     
         
        return    new Object[] {code1,code2,code3,"#",CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem(),"X",CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.AIR)).getItem();};
        }
     
        public Object getObject2(){
        String code1 = "";
        String code2 = "";
        String code3 = "";
         
        for(int i=0;i<=2;i++){
            code1 = code1+qEnum((int) Math.floor(Math.random()*4));
            code2 = code2+qEnum((int) Math.floor(Math.random()*4));
            code3 = code3+qEnum((int) Math.floor(Math.random()*4));
        }
     
        Item im1 = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem();
        Item im2 = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem();
      Item imA =    CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.AIR)).getItem();
     
        return    new Object[] {code1,code2,code3,"#",im1,"X",im2,"Y",imA,"Z",imA};
        }
     
        public Object getObject3(){
        String code1 = "";
        String code2 = "";
        String code3 = "";
         
        for(int i=0;i<=2;i++){
            code1 = code1+qEnum((int) Math.floor(Math.random()*4));
            code2 = code2+qEnum((int) Math.floor(Math.random()*4));
            code3 = code3+qEnum((int) Math.floor(Math.random()*4));
        }
     
        Item im1 = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem();
        Item im2 = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem();
        Item im3 = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.getMaterial((int) Math.floor(Math.random()*50)))).getItem();
    Item imA =    CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.AIR)).getItem();
     
        return    new Object[] {code1,code2,code3,"#",im1,"X",im2,"Y",im3,"Z",imA};
        }
     
     
     
        public String qEnum(int i){
            switch(i){
            case 0: return "#";
            case 1: return "X";
            case 2: return "Y";
            case 3: return "Z";
            }
        return null;
        }
     
     
    }
    

    I'm getting this error:
    at this line:
    Code:
            case 0: CraftingManager.getInstance().registerShapedRecipe(is,getObject());
    Now this is most likely because I have to use a code that represents an empty slot in the crafting grid, I know I could just leave it out but that wouldn't work with the randomizing formula I made here.

    I'm using this:
    Code:
     Item imA =    CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.AIR)).getItem();
    Which gives me an NPE.


    I haven't used the minecraft ItemStack and Item in a while so there probably is an easy to get an air block or something to represent an empty slot in the crafting table and I'm just not seeing it.


    Thanks in advance,
    Jeroen V.
     
Thread Status:
Not open for further replies.

Share This Page