Posted January 27, 20169 yr I have been looking for a way to set and get the current slot that an itemstack is in and I just cant find it. I am sure there is one. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr set and get the current slot that an itemstack is in ItemStack doesn't know where it is. It just is. If in inventory, inventory knows tho. player.inventory.mainInventory - array of 36 player slots, you can iterate through them, check if there is an item and replace/move it. Or are we talking about other inventories? IInventory has getStackInSlot(index) or you can return whole array if you want and do same as above. 1.7.10 is no longer supported by forge, you are on your own.
January 27, 20169 yr Author Well the first thing I am trying to do is copy an item stack from one slot to another. I managed to copy it but I am not sure how to delete the original. slot.inventory.setInventorySlotContents(itemstack.stackSize, itemstack); BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr Author woops thanks and also how do I delete the original itemstack and keep the new one? BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr set the old slot where the itemstack was to null/replace it with the new one. java garbage collection will do the rest
January 27, 20169 yr Author yea but itemstack will just be called for both of them i cant differentiate them. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr Author Easiest way to do this is just give you my code. package com.looke81.Tat.items; import java.util.ArrayList; import java.util.List; import java.util.Random; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import com.looke81.Tat.Tat; public class EnergyIngot extends Item { public EnergyIngot() { this.setCreativeTab(Tat.TatTab); } private Random random = new Random(); public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected) { EntityPlayer player= (EntityPlayer) entity; if(entity instanceof EntityPlayer){ List stacks = player.inventoryContainer.inventoryItemStacks; List slots = player.inventoryContainer.inventorySlots; int index = random.nextInt(slots.size()); Slot slot= (Slot) slots.get(index); ItemStack stack= (ItemStack) stacks.get(index); if(stack == null && slot != null){ slot.inventory.setInventorySlotContents(slot.slotNumber, itemstack); } } } } Yes I know this is kinda crazy but don't worry i'm not planning on doing it every tick this is just for test purposes. What I am trying to do is delete the old item that the new one was copied from. Thanks for your help so far. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr EntityPlayer player= (EntityPlayer) entity; if(entity instanceof EntityPlayer) Rethink this code please.
January 27, 20169 yr Author EntityPlayer player= (EntityPlayer) entity; if(entity instanceof EntityPlayer) Rethink this code please. oh so i guess: EntityPlayer player= (EntityPlayer) entity; already checks if the entity is an entityplayer i didn't know that thanks. Also Don't use the Container, it will just be confusing (e.g. you are using slot.slotNumber as the inventory slot index, but that's not right). What is this "old item", "new item" you are talking about? Please clarify. right yea just use the original index course. The "old item" is the item that i have copied from and the new item is the new item made by: slot.inventory.setInventorySlotContents(index, itemstack); Edit: and I want to delete the old item to move the item. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr Author Not if the item spawning the new item is in a different slot. I understand why your confused but I'm not sure how else to explain it. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr already checks if the entity is an entityplayer Nope. Its casting, not instanceof. Rethink this code please. You mean "rethink your life!" player.inventory.mainInventory - array of 36 player slots, you can iterate through them, check if there is an item and replace/move it. Why not? public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected) { if (entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) entity; ItemStack old = itemstack; for (int i = 0; i < 36; ++i) { if (player.inventory.mainInventory[i] == itemstack) player.inventory.mainInventory[i] = null; // removes itemstack from inventory. } // At this point, your inventory doesn't have your itemstack anymore and "old" holds last reference to it. // What are you trying to do next is mystery to me. } } Not if the item spawning the new item is in a different slot. I understand why your confused but I'm not sure how else to explain it. WHAT EXACLY are your trying to do? 1.7.10 is no longer supported by forge, you are on your own.
January 27, 20169 yr Author WHAT EXACLY are your trying to do? Probably should have opened with this but wanted to try on my own. Okay so i was trying to see if I could make an item "bounce around" the players inventory by making it move to random slots. I was going to do this by getting a random slot. If that slot had nothing in it (== null) I would copy the item into that slot (this is were we are). Then I would delete the item that was copied from. If the slot did have an item in it I was planning on switching the two items slots. I hope this helps. BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr while(true) int randomIndex=random.nextInt(maxIndex); if(inv.getSlot(randomIndex)==null) placeItemHereAndSetOtherOneNull(); //TODO: prevent infinite loop
January 27, 20169 yr Author placeItemHereAndSetOtherOneNull(); So what I am asking is how would I set the item there and make the other one null without making them both null because they are both being called onUpdate()? BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr player.mainInventory.setStackInSlot(randomIndex, itemstack); player.mainInventory.setStackInSlot(itemSlot, null);
January 27, 20169 yr int rand = worldIn.rand.nextInt(36); ItemStack someItem = player.inventory.mainInventory[rand]; player.inventory.mainInventory[rand] = itemstack; player.inventory.mainInventory[itemSlot] = someItem; I am learning for tomorrow exam - everything is (much) more fun than that ;_; Idk how it will work in client/server manners. EDIT Btw. I just LOVE how everyone else is trying their best to help OP without shooting themselves in head Lolololol EDIT Ah, yes indeed (post below) 1.7.10 is no longer supported by forge, you are on your own.
January 27, 20169 yr you dont need to search for the item, you get it passed as argument (int itemSlot)
January 27, 20169 yr Author Wow I feel like an entrepreneur on dragons den whose been offered deals from everyone (its a TV show if you don't get reference). So il go for Failender first. player.mainInventory.setStackInSlot(randomIndex, itemstack); player.mainInventory.setStackInSlot(itemSlot, null); yes but were do you suppose I get itemSlot from? As I only have the slot of the new item and itemstack will call them both. (looking into other two solutions thankyou very much just give me some time) BioWarfare Mod: http://goo.gl/BYWQty
January 27, 20169 yr public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected)
January 27, 20169 yr yes but were do you suppose I get itemSlot from? you dont need to search for the item, you get it passed as argument (int itemSlot) int rand = worldIn.rand.nextInt(36); ItemStack someItem = player.inventory.mainInventory[rand]; player.inventory.mainInventory[rand] = itemstack; player.inventory.mainInventory[itemSlot] = someItem; I think this is everybody here now: (no offense intended) [Edit: Removed image. Sorry Ernio, but that was a step too far] 1.7.10 is no longer supported by forge, you are on your own.
January 27, 20169 yr Author well your not wrong about my stupidity I feel like an idiot for not seeing itemSlot... BioWarfare Mod: http://goo.gl/BYWQty
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.