package noppes.npcs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import java.util.HashMap; public class NpcMiscInventory implements IInventory { public HashMap items = new HashMap(); public int stackLimit = 64; private int size; public NpcMiscInventory(int size) { this.size = size; } public NBTTagCompound getToNBT() { NBTTagCompound nbttagcompound = new NBTTagCompound(); nbttagcompound.setTag("NpcMiscInv", NBTTags.nbtItemStackList(items)); return nbttagcompound; } public void setFromNBT(NBTTagCompound nbttagcompound) { items = NBTTags.getItemStackList(nbttagcompound.getTagList("NpcMiscInv", 10)); } @Override public int getSizeInventory() { return size; } @Override public ItemStack getStackInSlot(int var1) { return items.get(var1); } @Override public ItemStack decrStackSize(int par1, int par2) { if (items.get(par1) == null) return null; ItemStack var4 = null; if (items.get(par1).stackSize <= par2) { var4 = items.get(par1); items.put(par1, null); } else { var4 = items.get(par1).splitStack(par2); if (items.get(par1).stackSize == 0) { items.put(par1, null); } } return var4; } public boolean decrStackSize(ItemStack eating, int decrease) { for (int slot : items.keySet()) { ItemStack item = items.get(slot); if (items != null && eating == item && item.stackSize >= decrease) { item.splitStack(decrease); if (item.stackSize <= 0) items.put(slot, null); return true; } } return false; } @Override public ItemStack getStackInSlotOnClosing(int var1) { if (items.get(var1) != null) { ItemStack var3 = items.get(var1); items.put(var1, null); return var3; } return null; } @Override public void setInventorySlotContents(int var1, ItemStack var2) { if (var1 >= getSizeInventory()) return; items.put(var1, var2); } @Override public int getInventoryStackLimit() { return stackLimit; } @Override public boolean isUseableByPlayer(EntityPlayer var1) { return true; } @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return true; } @Override public String getInventoryName() { return "Npc Misc Inventory"; } @Override public boolean hasCustomInventoryName() { return true; } @Override public void markDirty() { } @Override public void openInventory() { } @Override public void closeInventory() { } public boolean addItemStack(ItemStack item) { ItemStack mergable; boolean merged = false; while ((mergable = getMergableItem(item)) != null && mergable.stackSize > 0) { int size = mergable.getMaxStackSize() - mergable.stackSize; if (size > item.stackSize) { mergable.stackSize = mergable.getMaxStackSize(); item.stackSize -= size; merged = true; } else { mergable.stackSize += item.stackSize; item.stackSize = 0; } } if (item.stackSize <= 0) return true; int slot = firstFreeSlot(); if (slot >= 0) { items.put(slot, item.copy()); item.stackSize = 0; return true; } return merged; } public ItemStack getMergableItem(ItemStack item) { for (ItemStack is : items.values()) { if (NoppesUtilPlayer.compareItems(item, is, false, false) && is.stackSize < is.getMaxStackSize()) { return is; } } return null; } public int firstFreeSlot() { for (int i = 0; i < getSizeInventory(); i++) { if (items.get(i) == null) return i; } return -1; } public void setSize(int i) { size = i; } }