ThePocketSoul Posted November 29, 2013 Posted November 29, 2013 Hello! I'm having a problem with removing metadata items. The problem isn't its not removing one of the item, it does, but it removes one of each of the metadata items if you have them in your inventory... Code: public void removeItem(EntityPlayer ep, ItemStack removeitem, int remove) { IInventory inv = ep.inventory; for(int i=0; i < inv.getSizeInventory(); i++) { if(inv.getStackInSlot(i) != null) { ItemStack j = inv.getStackInSlot(i); if(j.getItem() != null && j.getItem() == removeitem.getItem()) { inv.decrStackSize(i, remove); } } } } Thanks ahead of time! Quote
Busti Posted November 29, 2013 Posted November 29, 2013 You need to test for the metadata because the item never changes with the metadata. Quote PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.
robin4002 Posted November 29, 2013 Posted November 29, 2013 public void removeItem(EntityPlayer ep, ItemStack removeitem, int remove, int metadata) { IInventory inv = ep.inventory; for(int i=0; i < inv.getSizeInventory(); i++) { if(inv.getStackInSlot(i) != null) { ItemStack j = inv.getStackInSlot(i); if(j.getItem() != null && j.getItem() == removeitem.getItem() && j.getItemDamage() == metadata) { inv.decrStackSize(i, remove); } } } } Quote
ThePocketSoul Posted November 29, 2013 Author Posted November 29, 2013 On 11/29/2013 at 6:53 PM, robin4002 said: public void removeItem(EntityPlayer ep, ItemStack removeitem, int remove, int metadata) { IInventory inv = ep.inventory; for(int i=0; i < inv.getSizeInventory(); i++) { if(inv.getStackInSlot(i) != null) { ItemStack j = inv.getStackInSlot(i); if(j.getItem() != null && j.getItem() == removeitem.getItem() && j.getItem().getItemDamage() == metadata) { inv.decrStackSize(i, remove); } } } } Thanks but getItemDamage doesn't work... i changed it to this and it worked public void removeItem(EntityPlayer ep, ItemStack removeitem, int remove, int metadata) { IInventory inv = ep.inventory; for(int i=0; i < inv.getSizeInventory(); i++) { if(inv.getStackInSlot(i) != null) { ItemStack j = inv.getStackInSlot(i); if(j.getItem() != null && j.getItem() == removeitem.getItem() && j.getItem().getDamage(j) == metadata) { inv.decrStackSize(i, remove); } } } } Quote
SamTebbs33 Posted November 30, 2013 Posted November 30, 2013 You need to use j.getItemDamage(). That gets the damage/metadata of the itemstack Quote "Thinking that coding is the nerdy IT guy at work rebooting your computer is like thinking that music is what happens when the piano tuner comes round." - Ed Rex
robin4002 Posted November 30, 2013 Posted November 30, 2013 On 11/29/2013 at 7:11 PM, ThePocketSoul said: Thanks but getItemDamage doesn't work... My bad, getItemDamage() is in ItemStack.java, not Item.java. j.getItemDamage() should work. 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.