Advertisement
Guest User

Container

a guest
Mar 7th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. package net.asdfowkw.tech.blocks.windgenerator;
  2.  
  3. import net.asdfowkw.tech.Tech;
  4. import net.asdfowkw.tech.network.MessageSetEnergy;
  5. import net.minecraft.entity.player.EntityPlayer;
  6. import net.minecraft.entity.player.EntityPlayerMP;
  7. import net.minecraft.inventory.Container;
  8. import net.minecraft.inventory.IInventory;
  9. import net.minecraft.inventory.Slot;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraftforge.items.CapabilityItemHandler;
  12. import net.minecraftforge.items.IItemHandler;
  13. import net.minecraftforge.items.SlotItemHandler;
  14.  
  15. public class ContainerWindGenerator extends Container {
  16.  
  17. private TileEntityWindGenerator te;
  18. private int[] prevFields;
  19.  
  20. public ContainerWindGenerator(IInventory playerInventory, TileEntityWindGenerator te){
  21. this.te = te;
  22.  
  23. addOwnSlots();
  24. addPlayerSlots(playerInventory);
  25. }
  26.  
  27. private void addPlayerSlots(IInventory playerInventory) {
  28. //Slots for main inventory
  29. for (int row = 0; row < 3; ++row){
  30. for (int col = 0; col < 9; ++col){
  31. int x = 9 + col * 18;
  32. int y = row * 18 + 70;
  33. this.addSlotToContainer(new Slot(playerInventory, col + row * 9 + 10, x, y));
  34. }
  35. }
  36. //Slots for actionbar
  37. for (int row = 0; row < 9; ++row){
  38. int x = 9 + row * 18;
  39. int y = 58 + 70;
  40. this.addSlotToContainer(new Slot(playerInventory, row, x, y));
  41. }
  42. }
  43.  
  44. private void addOwnSlots(){
  45. IItemHandler itemHandler = this.te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
  46. int x = 9;
  47. int y = 6;
  48.  
  49. // Add our own slots
  50. int slotIndex = 0;
  51. for (int i = 0; i < itemHandler.getSlots(); i++) {
  52. addSlotToContainer(new SlotItemHandler(itemHandler, slotIndex, x, y));
  53. slotIndex++;
  54. x += 18;
  55. }
  56. }
  57.  
  58. @Override
  59. public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
  60. ItemStack itemstack = null;
  61. Slot slot = this.inventorySlots.get(index);
  62.  
  63. if (slot != null && slot.getHasStack()) {
  64. ItemStack itemstack1 = slot.getStack();
  65. itemstack = itemstack1.copy();
  66.  
  67. if (index < TileEntityWindGenerator.SLOT_COUNT) {
  68. if (!this.mergeItemStack(itemstack1, TileEntityWindGenerator.SLOT_COUNT, this.inventorySlots.size(), true)) {
  69. return null;
  70. }
  71. } else if (!this.mergeItemStack(itemstack1, 0, TileEntityWindGenerator.SLOT_COUNT, false)) {
  72. return null;
  73. }
  74.  
  75. if (itemstack1.stackSize == 0) {
  76. slot.putStack(null);
  77. } else {
  78. slot.onSlotChanged();
  79. }
  80. }
  81.  
  82. return itemstack;
  83. }
  84.  
  85. @Override
  86. public boolean canInteractWith(EntityPlayer playerIn) {
  87. return te.isUseableByPlayer(playerIn);
  88. }
  89.  
  90. @Override
  91. public void detectAndSendChanges(){
  92. super.detectAndSendChanges();
  93.  
  94. boolean needUpdate = false;
  95.  
  96. int[] fields = this.te.getFields();
  97. for (int i = 0; i < prevFields.length; i++){
  98. if(prevFields[i] != fields[i]){
  99. prevFields[i] = fields[i];
  100. needUpdate = true;
  101. }
  102. }
  103.  
  104. if(needUpdate){
  105. this.listeners.stream().filter(watcher -> watcher instanceof EntityPlayerMP).forEach(watcher -> Tech.channel.sendTo(new MessageSetEnergy(te.getPos(), te.buffer.getEnergyStored()), (EntityPlayerMP) watcher));
  106. }
  107. }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement