Posted June 21, 201411 yr Is there anyway to detect when an itemstack is put into and taken out of a slot? I can do both by using the putStack method in the Slot class, but doesn't get called when you just take an itemstack out of the slot. I've also tried comparing the inventory during the last tick and the inventory during the current tick. package ttm.handler.event; import java.util.HashMap; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import ttm.inventory.InventoryPlayerExtended; import ttm.util.LogUtil; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; public class FMLServerEventHandler { public HashMap<String, ItemStack[]> lastInventoryMap = new HashMap<String, ItemStack[]>(); @SubscribeEvent public void playerTick(TickEvent.PlayerTickEvent event) { if(event.phase == Phase.START) { EntityPlayer player = event.player; InventoryPlayerExtended inventory = InventoryPlayerExtended.forPlayer(player); if(lastInventoryMap.get(player.getDisplayName()) == null) { lastInventoryMap.put(player.getDisplayName(), inventory.inventory); } else { ItemStack[] lastInventory = lastInventoryMap.get(player.getDisplayName()); ItemStack[] currentInventory = inventory.inventory; for(int i = 0; i < 5; i++) { ItemStack lastStack = lastInventory[i]; ItemStack currentStack = currentInventory[i]; if(lastStack == null && currentStack != null) { LogUtil.info("EQUIP:" + currentStack.getDisplayName()); } else if(lastStack != null && currentStack == null) { LogUtil.info("UNEQUIP:" + lastStack.getDisplayName()); } else if(lastStack != null && currentStack != null) { if(!lastStack.equals(currentStack)) { LogUtil.info("LAST:" + lastStack.getDisplayName()); LogUtil.info("CURRENT:" + currentStack.getDisplayName()); } } } lastInventoryMap.remove(player.getDisplayName()); lastInventoryMap.put(player.getDisplayName(), inventory.inventory); } } } } For some reason, it prints "EQUIP: item.blah" and then "UNEQUIP: item.blah" in the next tick. Solved: The putStack method passes the itemstack that is put into it, and the onPickupFromSlot method passes the itemstack that is taken out of it. Kain
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.