Posted September 12, 201411 yr So if I have a list of 20 items, I want it to give the player 5 random items from that list of 20
September 12, 201411 yr You should double the list if you need it twice. Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(YOURLIST.size() - 1); ItemStack stack = YOURLIST.get(r); player.inventory.addItemStackToInventory(stack); //if you want not 2 times the same one YOURLIST.remove(r); }
September 12, 201411 yr Author You should double the list if you need it twice. Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(YOURLIST.size() - 1); ItemStack stack = YOURLIST.get(r); player.inventory.addItemStackToInventory(stack); //if you want not 2 times the same one YOURLIST.remove(r); } MyList.get and MyList.remove dont work
September 12, 201411 yr With a Array I don't know how to delete, but you get it in this way. Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(YOURLIST.size() - 1); ItemStack stack = YOURLIST[r]; player.inventory.addItemStackToInventory(stack); } I would use a ArrayList in your situation.
September 12, 201411 yr Author With a Array I don't know how to delete, but you get it in this way. Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(YOURLIST.size() - 1); ItemStack stack = YOURLIST[r]; player.inventory.addItemStackToInventory(stack); } I would use a ArrayList in your situation. That doesnt seem to be giving me any items at all
September 12, 201411 yr Author In this case I need your full code package com.bugzoo.Lootcube; import java.util.Random; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemPokepack extends Item{ public ItemPokepack(){ setMaxStackSize(1); setUnlocalizedName("pokePack"); } @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(Lootcube.pokelist.length - 1); ItemStack stack = Lootcube.pokelist[r]; player.inventory.addItemStackToInventory(stack); } return itemStack; } } MyList: public static ItemStack[] pokelist = {new ItemStack(Cascoon), new ItemStack(Silcoon), new ItemStack(Purugly), new ItemStack(Gothita), new ItemStack(Watchog), new ItemStack(Dunsparce), new ItemStack(Sunkern), new ItemStack(Wormadam), new ItemStack(Patrat), new ItemStack(Luvdisk), new ItemStack(Mewtwo), new ItemStack(Charizard), new ItemStack(Arceus), new ItemStack(Lugia), new ItemStack(Slaking), new ItemStack(Dragonite), new ItemStack(Mew)};
September 13, 201411 yr Author I found out that if I even give the player pokeList[1] it doesnt give the player anything, so it must be something up with the array
September 13, 201411 yr Author You need to return the "stack" not the originally itemStack field. I cant return stack because it will only be made if the for loop runs. And if i make a public ItemStack variable, that just crashes the game
September 13, 201411 yr Store Item links (Mymod.someitem etc.) in your array. NOT ItemStacks. Create new ItemStacks from items in your loop.
September 13, 201411 yr Author Store Item links (Mymod.someitem etc.) in your array. NOT ItemStacks. Create new ItemStacks from items in your loop. Still doesnt give me any items ItemClass: package com.bugzoo.Lootcube; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemPokepack extends Item{ public ItemPokepack(){ setMaxStackSize(1); setUnlocalizedName("pokePack"); } public Item stack; @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ Random rand = new Random(); for(int m = 0; m < 6; m++) { int r = rand.nextInt(Lootcube.pokelist.length - 1); stack = Lootcube.pokelist[r]; player.inventory.addItemStackToInventory(new ItemStack(stack)); player.inventory.consumeInventoryItem(this); } return new ItemStack(stack); } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List dataList, boolean b){ dataList.add("Pack Of Random Pokemon Cards"); } } List: public static Item[] pokelist = {Cascoon, Silcoon, Purugly, Gothita, Watchog, Dunsparce};
September 14, 201411 yr You IDE is not giving you an error message about this nonsense: public static Item[] pokelist = {Cascoon, Silcoon, Purugly, Gothita, Watchog, Dunsparce}; Class names are not items. Do you even read error messages? On the other hand, many new coders name instances with initial cap... either is very wrong. -S- (if I helped, please click Thank and applaud) http://6upnqa.dm2301.livefilestore.com/y2mtf-vG7Tqq1TiiVpIm53KWj7294NDPoHfSHHb4PzZiMAUfRCfK0UY0MwOu7Q3zTBNVTKqWjr2-xgBfFRpQT5p-QivtvknPpoABMNUw9br9WuZcBFkjePhnAbW500gVm-P/sequiturian.png[/img]
September 14, 201411 yr public Item stack; @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ Random rand = new Random(); //itemRand for(int m = 0; m < 6; m++) //you said 5 { int r = rand.nextInt(Lootcube.pokelist.length - 1); //nextInt counts from 0 stack = Lootcube.pokelist[r]; player.inventory.addItemStackToInventory(new ItemStack(stack)); player.inventory.consumeInventoryItem(this); itemStack.stackSize--; } return new ItemStack(stack); //why? return itemStack; } public static Item[] pokelist = {Items.apple, Items.carrot, Items.potato, Items.slime_ball, Items.arrow, Items.beef, Items.shears}; @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ if(world.isRemote)return itemStack; //because ghost items List<Item> tempList = new ArrayList<Item>(); tempList.addAll(Arrays.asList(pokelist)); //because remove() causes UnsupportedOperationException for(int m = 0; m < 5; m++) { player.inventory.addItemStackToInventory(new ItemStack(tempList.remove(itemRand.nextInt(tempList.size())))); //because science itemStack.stackSize--; } return itemStack; }
September 14, 201411 yr Author public Item stack; @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ Random rand = new Random(); //itemRand for(int m = 0; m < 6; m++) //you said 5 { int r = rand.nextInt(Lootcube.pokelist.length - 1); //nextInt counts from 0 stack = Lootcube.pokelist[r]; player.inventory.addItemStackToInventory(new ItemStack(stack)); player.inventory.consumeInventoryItem(this); itemStack.stackSize--; } return new ItemStack(stack); //why? return itemStack; } public static Item[] pokelist = {Items.apple, Items.carrot, Items.potato, Items.slime_ball, Items.arrow, Items.beef, Items.shears}; @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player){ if(world.isRemote)return itemStack; //because ghost items List<Item> tempList = new ArrayList<Item>(); tempList.addAll(Arrays.asList(pokelist)); //because remove() causes UnsupportedOperationException for(int m = 0; m < 5; m++) { player.inventory.addItemStackToInventory(new ItemStack(tempList.remove(itemRand.nextInt(tempList.size())))); //because science itemStack.stackSize--; } return itemStack; } I'm still not getting any items when I right click
September 14, 201411 yr Author I tested it and it works. Recheck your code. What did you have as your array?
September 14, 201411 yr I'd just use this: Random rand = new Random(); ItemStack[] itemstack = new ItemStack[20]; itemstack[0] = new ItemStack(Items.apple, 2); itemstack[1] = new ItemStack(Items.bread, 34); //... for(int i = 0; i < 5; i++) { player.inventory.addItemStackToInventory(itemstack[rand.nextInt(20)]); }
September 14, 201411 yr Author I'd just use this: Random rand = new Random(); ItemStack[] itemstack = new ItemStack[20]; itemstack[0] = new ItemStack(Items.apple, 2); itemstack[1] = new ItemStack(Items.bread, 34); //... for(int i = 0; i < 5; i++) { player.inventory.addItemStackToInventory(itemstack[rand.nextInt(20)]); } Thank you, this works. I dont know how I didnt think of that earlier. But im having a problem where sometimes it gives me 3 items, sometimes 4 and sometimes 5
September 14, 201411 yr I'd just use this: Random rand = new Random(); ItemStack[] itemstack = new ItemStack[20]; itemstack[0] = new ItemStack(Items.apple, 2); itemstack[1] = new ItemStack(Items.bread, 34); //... for(int i = 0; i < 5; i++) { player.inventory.addItemStackToInventory(itemstack[rand.nextInt(20)]); } Thank you, this works. I dont know how I didnt think of that earlier. But im having a problem where sometimes it gives me 3 items, sometimes 4 and sometimes 5 uhhm, U have to put itemstack[2] = new ItemStack(theItemYouWant, TheAmountUWant); and so on ofc into there too (up too 19). If you have already done that and its still not working show your code. And if its adding e.g. 5 eggs 3 eggs u dont get 5 and 3 eggs but 8 in one stack ofc. And I dont know if you want to deny the chance of an ItemStack beeing added twice, if so u have to put in a check for that.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.