Mrhand3

InventoryHelper

Jan 30th, 2014
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. package Mrhand3.SOARYN.InventoryReg;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.List;
  6.  
  7. import net.minecraft.entity.player.EntityPlayer;
  8. import net.minecraft.inventory.IInventory;
  9. import net.minecraft.item.Item;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.nbt.NBTTagCompound;
  12. import net.minecraft.nbt.NBTTagList;
  13.  
  14. public class InventoryHelper implements IInventory
  15. {
  16. protected List<IInventoryThing> callbacks;
  17. protected String inventoryTitle;
  18. protected int slotsCount;
  19. protected ItemStack[] inventoryContents;
  20. protected boolean isInvNameLocalized;
  21.  
  22. public InventoryHelper(String name, boolean isInvNameLocalized, int size)
  23. {
  24. callbacks = new ArrayList<IInventoryThing>();
  25. this.isInvNameLocalized = isInvNameLocalized;
  26. this.slotsCount = size;
  27. this.inventoryTitle = name;
  28. this.inventoryContents = new ItemStack[size];
  29. }
  30.  
  31. public void addCallback(IInventoryThing callback)
  32. {
  33. callbacks.add(callback);
  34. }
  35.  
  36. @Override
  37. public void closeChest() {}
  38.  
  39. @Override
  40. public ItemStack decrStackSize(int par1, int par2)
  41. {
  42. if (this.inventoryContents[par1] != null)
  43. {
  44. ItemStack itemstack;
  45.  
  46. if (this.inventoryContents[par1].stackSize <= par2)
  47. {
  48. itemstack = this.inventoryContents[par1];
  49. this.inventoryContents[par1] = null;
  50. this.onInventoryChanged(par1);
  51. return itemstack;
  52. }
  53.  
  54. itemstack = this.inventoryContents[par1].splitStack(par2);
  55.  
  56. if (this.inventoryContents[par1].stackSize == 0)
  57. {
  58. this.inventoryContents[par1] = null;
  59. }
  60.  
  61. this.onInventoryChanged(par1);
  62. return itemstack;
  63. }
  64.  
  65. return null;
  66. }
  67.  
  68. @Override
  69. public int getInventoryStackLimit()
  70. {
  71. return 64;
  72. }
  73.  
  74. @Override
  75. public String getInvName()
  76. {
  77. return this.inventoryTitle;
  78. }
  79.  
  80. @Override
  81. public int getSizeInventory()
  82. {
  83. return slotsCount;
  84. }
  85.  
  86. @Override
  87. public ItemStack getStackInSlot(int i)
  88. {
  89. return this.inventoryContents[i];
  90. }
  91.  
  92. public ItemStack getStackInSlot(Enum<?> i)
  93. {
  94. return getStackInSlot(i.ordinal());
  95. }
  96.  
  97. @Override
  98. public ItemStack getStackInSlotOnClosing(int i)
  99. {
  100. if (i >= this.inventoryContents.length)
  101. {
  102. return null;
  103. }
  104.  
  105. if (this.inventoryContents[i] != null)
  106. {
  107. ItemStack itemstack = this.inventoryContents[i];
  108. this.inventoryContents[i] = null;
  109. return itemstack;
  110. }
  111.  
  112. return null;
  113. }
  114.  
  115. @Override
  116. public boolean isInvNameLocalized()
  117. {
  118. return isInvNameLocalized;
  119. }
  120.  
  121. public boolean isItem(int slot, Item item)
  122. {
  123. return inventoryContents[slot] != null
  124. && inventoryContents[slot].getItem() == item;
  125. }
  126.  
  127. @Override
  128. public boolean isItemValidForSlot(int i, ItemStack itemstack)
  129. {
  130. return true;
  131. }
  132.  
  133. @Override
  134. public boolean isUseableByPlayer(EntityPlayer entityplayer)
  135. {
  136. return true;
  137. }
  138.  
  139. public void onInventoryChanged(int slotNumber)
  140. {
  141. for (IInventoryThing callback : callbacks)
  142. {
  143. callback.onInventoryChanged(this, slotNumber);
  144. }
  145. }
  146.  
  147. @Override
  148. public void openChest() {}
  149.  
  150. public void clearAndSetSlotCount(int amount)
  151. {
  152. this.slotsCount = amount;
  153. inventoryContents = new ItemStack[amount];
  154. onInventoryChanged(0);
  155. }
  156.  
  157. public void readFromNBT(NBTTagCompound tag)
  158. {
  159. if (tag.hasKey("size"))
  160. {
  161. this.slotsCount = tag.getInteger("size");
  162. }
  163.  
  164. NBTTagList nbttaglist = tag.getTagList("Items");
  165. inventoryContents = new ItemStack[slotsCount];
  166.  
  167. for (int i = 0; i < nbttaglist.tagCount(); i++)
  168. {
  169. NBTTagCompound stacktag = (NBTTagCompound)nbttaglist.tagAt(i);
  170. int j = stacktag.getByte("Slot");
  171.  
  172. if (j >= 0 && j < inventoryContents.length)
  173. {
  174. inventoryContents[j] = ItemStack.loadItemStackFromNBT(stacktag);
  175. }
  176. }
  177. }
  178.  
  179. @Override
  180. public void setInventorySlotContents(int i, ItemStack itemstack)
  181. {
  182. this.inventoryContents[i] = itemstack;
  183.  
  184. if (itemstack != null && itemstack.stackSize > getInventoryStackLimit())
  185. {
  186. itemstack.stackSize = getInventoryStackLimit();
  187. }
  188.  
  189. this.onInventoryChanged(i);
  190. }
  191.  
  192. public void writeToNBT(NBTTagCompound tag)
  193. {
  194. tag.setInteger("size", getSizeInventory());
  195. NBTTagList nbttaglist = new NBTTagList();
  196.  
  197. for (int i = 0; i < inventoryContents.length; i++)
  198. {
  199. if (inventoryContents[i] != null)
  200. {
  201. NBTTagCompound stacktag = new NBTTagCompound();
  202. stacktag.setByte("Slot", (byte)i);
  203. inventoryContents[i].writeToNBT(stacktag);
  204. nbttaglist.appendTag(stacktag);
  205. }
  206. }
  207.  
  208. tag.setTag("Items", nbttaglist);
  209. }
  210.  
  211. /**
  212. * This bastard never even gets called, so ignore it
  213. */
  214. @Override
  215. public void onInventoryChanged() {}
  216.  
  217. public void copyFrom(IInventory inventory)
  218. {
  219. for (int i = 0; i < inventory.getSizeInventory(); i++)
  220. {
  221. if (i < getSizeInventory())
  222. {
  223. ItemStack stack = inventory.getStackInSlot(i);
  224.  
  225. if (stack != null)
  226. {
  227. setInventorySlotContents(i, stack.copy());
  228. }
  229. else
  230. {
  231. setInventorySlotContents(i, null);
  232. }
  233. }
  234. }
  235. }
  236.  
  237. public List<ItemStack> contents()
  238. {
  239. return Arrays.asList(inventoryContents);
  240. }
  241. }
Advertisement
Add Comment
Please, Sign In to add comment