Bugzoo Posted September 12, 2014 Posted September 12, 2014 So if I have a list of 20 items, I want it to give the player 5 random items from that list of 20 Quote
knokko Posted September 12, 2014 Posted September 12, 2014 Create a static randomizer and change the value every tick. Quote
TheDav1311 Posted September 12, 2014 Posted September 12, 2014 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); } Quote
Bugzoo Posted September 12, 2014 Author Posted September 12, 2014 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 Quote
Bugzoo Posted September 12, 2014 Author Posted September 12, 2014 What kind of list you use? An ItemStack array Quote
TheDav1311 Posted September 12, 2014 Posted September 12, 2014 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. Quote
Bugzoo Posted September 12, 2014 Author Posted September 12, 2014 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 Quote
TheDav1311 Posted September 12, 2014 Posted September 12, 2014 In this case I need your full code Quote
Bugzoo Posted September 12, 2014 Author Posted September 12, 2014 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)}; Quote
Bugzoo Posted September 13, 2014 Author Posted September 13, 2014 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 Quote
coolboy4531 Posted September 13, 2014 Posted September 13, 2014 You need to return the "stack" not the originally itemStack field. Quote
Bugzoo Posted September 13, 2014 Author Posted September 13, 2014 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 Quote
MultiMote Posted September 13, 2014 Posted September 13, 2014 Store Item links (Mymod.someitem etc.) in your array. NOT ItemStacks. Create new ItemStacks from items in your loop. Quote
Bugzoo Posted September 13, 2014 Author Posted September 13, 2014 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}; Quote
sequituri Posted September 14, 2014 Posted September 14, 2014 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. Quote -S- (if I helped, please click Thank and applaud) http://6upnqa.dm2301.livefilestore.com/y2mtf-vG7Tqq1TiiVpIm53KWj7294NDPoHfSHHb4PzZiMAUfRCfK0UY0MwOu7Q3zTBNVTKqWjr2-xgBfFRpQT5p-QivtvknPpoABMNUw9br9WuZcBFkjePhnAbW500gVm-P/sequiturian.png[/img]
MultiMote Posted September 14, 2014 Posted September 14, 2014 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; } Quote
Bugzoo Posted September 14, 2014 Author Posted September 14, 2014 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 Quote
MultiMote Posted September 14, 2014 Posted September 14, 2014 I tested it and it works. Recheck your code. Quote
Bugzoo Posted September 14, 2014 Author Posted September 14, 2014 I tested it and it works. Recheck your code. What did you have as your array? Quote
daafganggdg Posted September 14, 2014 Posted September 14, 2014 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)]); } Quote
Bugzoo Posted September 14, 2014 Author Posted September 14, 2014 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 Quote
daafganggdg Posted September 14, 2014 Posted September 14, 2014 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. Quote
Recommended Posts
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.