tterrag1098

Container Class

Nov 3rd, 2013
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.04 KB | None | 0 0
  1. package com.tterrag.simpleTransmutations.container;
  2.  
  3. import java.util.List;
  4.  
  5. import net.minecraft.entity.player.EntityPlayer;
  6. import net.minecraft.entity.player.InventoryPlayer;
  7. import net.minecraft.inventory.Container;
  8. import net.minecraft.inventory.ICrafting;
  9. import net.minecraft.inventory.ISidedInventory;
  10. import net.minecraft.inventory.Slot;
  11. import net.minecraft.item.ItemStack;
  12. import net.minecraft.network.packet.Packet250CustomPayload;
  13. import net.minecraftforge.common.ForgeDirection;
  14.  
  15. import com.tterrag.simpleTransmutations.block.BlockInfo;
  16. import com.tterrag.simpleTransmutations.block.BlockPowderAggregator;
  17. import com.tterrag.simpleTransmutations.lib.Reference;
  18. import com.tterrag.simpleTransmutations.tile.TilePowderAggregator;
  19.  
  20. import cpw.mods.fml.common.network.PacketDispatcher;
  21. import cpw.mods.fml.common.network.Player;
  22.  
  23. /**
  24.  * @author Archadia
  25.  *
  26.  */
  27. public class ContainerPowderAgg extends Container implements ISidedInventory
  28. {
  29.     private TilePowderAggregator tileEnt;
  30.  
  31.     public ContainerPowderAgg(InventoryPlayer par1InventoryPlayer, TilePowderAggregator tile)
  32.     {
  33.         bindPlayerInventory(par1InventoryPlayer);
  34.  
  35.         this.tileEnt = (TilePowderAggregator) tile;
  36.  
  37.         addSlotToContainer(new Slot(tile, 0, 56, 38));
  38.         addSlotToContainer(new SlotAggregator(tile, 1, 106, 38));
  39.     }
  40.  
  41.     public void bindPlayerInventory(InventoryPlayer inv)
  42.     {
  43.         int i;
  44.  
  45.         for (i = 0; i < 3; ++i)
  46.         {
  47.             for (int j = 0; j < 9; ++j)
  48.             {
  49.                 this.addSlotToContainer(new Slot(inv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
  50.             }
  51.         }
  52.  
  53.         for (i = 0; i < 9; ++i)
  54.         {
  55.             this.addSlotToContainer(new Slot(inv, i, 8 + i * 18, 142));
  56.         }
  57.     }
  58.  
  59.     public boolean canInteractWith(EntityPlayer par1EntityPlayer)
  60.     {
  61.         return true;
  62.     }
  63.  
  64.     public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
  65.     {
  66.         ItemStack itemstack = null;
  67.         Slot slot = (Slot) this.inventorySlots.get(par2);
  68.  
  69.         if (slot != null && slot.getHasStack())
  70.         {
  71.             ItemStack itemstack1 = slot.getStack();
  72.             itemstack = itemstack1.copy();
  73.  
  74.             if (par2 == 36 || par2 == 37)
  75.             {
  76.                 if (!this.mergeItemStack(itemstack1, 27, 36, false))
  77.                 {
  78.                     if (!this.mergeItemStack(itemstack1, 0, 27, false))
  79.                         return null;
  80.                 }
  81.                 slot.onSlotChange(itemstack1, itemstack);
  82.             }
  83.             if (par2 < 36)
  84.             {
  85.                 if (TilePowderAggregator.getItemBurnTime(itemstack) > 0)
  86.                 {
  87.                     if (!this.mergeItemStack(itemstack1, 36, 37, false))
  88.                         return null;
  89.                     slot.onSlotChange(itemstack1, itemstack);
  90.                 }
  91.                 else if (par2 < 27)
  92.                 {
  93.                     if (!this.mergeItemStack(itemstack1, 27, 36, false))
  94.                         return null;
  95.                     slot.onSlotChange(itemstack1, itemstack);
  96.                 }
  97.                 else if (par2 > 26 && par2 < 36)
  98.                 {
  99.                     if (!this.mergeItemStack(itemstack1, 0, 26, false))
  100.                         return null;
  101.                     slot.onSlotChange(itemstack1, itemstack);
  102.                 }
  103.             }
  104.  
  105.             if (itemstack1.stackSize == 0)
  106.             {
  107.                 slot.putStack((ItemStack) null);
  108.             }
  109.             else
  110.             {
  111.                 slot.onSlotChanged();
  112.             }
  113.             if (itemstack1.stackSize == itemstack.stackSize)
  114.             {
  115.                 return null;
  116.             }
  117.             slot.onPickupFromSlot(par1EntityPlayer, itemstack1);
  118.             if (itemstack1.stackSize == 0)
  119.             {
  120.                 slot.putStack(null);
  121.                 return null;
  122.             }
  123.         }
  124.         return itemstack;
  125.     }
  126.  
  127.     @SuppressWarnings("unchecked")
  128.     @Override
  129.     public void detectAndSendChanges()
  130.     {
  131.         for (ICrafting c : (List<ICrafting>) crafters)
  132.         {
  133.             if (c instanceof Player)
  134.             {
  135.                 Packet250CustomPayload packet = new Packet250CustomPayload();
  136.  
  137.                 packet.channel = Reference.CHANNEL;
  138.                 packet.length = 11;
  139.  
  140.                 byte[] bytes = new byte[11];
  141.  
  142.                 int energy = tileEnt.getEnergyStored();
  143.  
  144.                 bytes[0] = 0;
  145.                 bytes[1] = (byte) (energy & 255);
  146.                 bytes[2] = (byte) ((energy >> 8) & 255);
  147.                 bytes[3] = (byte) ((energy >> 16) & 255);
  148.                 bytes[4] = (byte) ((energy >> 24) & 255);
  149.  
  150.                 packet.data = bytes;
  151.                 PacketDispatcher.sendPacketToPlayer(packet, (Player) c);
  152.  
  153.                 int progress = ((TilePowderAggregator) tileEnt).getBurnTimeLeft();
  154.  
  155.                 bytes[5] = 1;
  156.                 bytes[6] = (byte) (progress & 255);
  157.                 bytes[7] = (byte) ((progress >> 8) & 255);
  158.                 bytes[8] = (byte) ((progress >> 16) & 255);
  159.                 bytes[9] = (byte) ((progress >> 24) & 255);
  160.  
  161.                 packet.data = bytes;
  162.                 PacketDispatcher.sendPacketToPlayer(packet, (Player) c);
  163.  
  164.                 if (tileEnt.isBurning)
  165.                     bytes[10] = 1;
  166.                 else
  167.                     bytes[10] = 0;
  168.             }
  169.         }
  170.         super.detectAndSendChanges();
  171.     }
  172.  
  173.     @Override
  174.     public int getSizeInventory()
  175.     {
  176.         return 2;
  177.     }
  178.  
  179.     @Override
  180.     public ItemStack getStackInSlot(int i)
  181.     {
  182.         return tileEnt.inventory[i];
  183.     }
  184.  
  185.     @Override
  186.     public ItemStack decrStackSize(int i, int j)
  187.     {
  188.         tileEnt.inventory[i].stackSize -= j;
  189.         if (tileEnt.inventory[i].stackSize <= 0)
  190.             return null;
  191.         else
  192.             return tileEnt.inventory[i];
  193.     }
  194.  
  195.     @Override
  196.     public ItemStack getStackInSlotOnClosing(int i)
  197.     {
  198.         return tileEnt.inventory[i];
  199.     }
  200.  
  201.     @Override
  202.     public void setInventorySlotContents(int i, ItemStack itemstack)
  203.     {
  204.         tileEnt.inventory[i] = itemstack;
  205.     }
  206.  
  207.     @Override
  208.     public String getInvName()
  209.     {
  210.         return BlockInfo.POWDER_AGGREGATOR_UNLOC_NAME;
  211.     }
  212.  
  213.     @Override
  214.     public boolean isInvNameLocalized()
  215.     {
  216.         return false;
  217.     }
  218.  
  219.     @Override
  220.     public int getInventoryStackLimit()
  221.     {
  222.         return 64;
  223.     }
  224.  
  225.     @Override
  226.     public void onInventoryChanged()
  227.     {
  228.         detectAndSendChanges();
  229.     }
  230.  
  231.     @Override
  232.     public boolean isUseableByPlayer(EntityPlayer entityplayer)
  233.     {
  234.         return true;
  235.     }
  236.  
  237.     @Override
  238.     public void openChest()
  239.     {
  240.         // Do Nothing
  241.     }
  242.  
  243.     @Override
  244.     public void closeChest()
  245.     {
  246.         // Do Nothing
  247.     }
  248.  
  249.     @Override
  250.     public boolean isItemValidForSlot(int i, ItemStack itemstack)
  251.     {
  252.         return (i == 0 && TilePowderAggregator.getItemBurnTime(tileEnt.inventory[i]) > 0);
  253.     }
  254.  
  255.     @Override
  256.     public int[] getAccessibleSlotsFromSide(int var1)
  257.     {
  258.         if (var1 == 1)
  259.             return new int[] { 0 };
  260.         else
  261.             return new int[] { 1 };
  262.     }
  263.  
  264.     @Override
  265.     public boolean canInsertItem(int i, ItemStack itemstack, int j)
  266.     {
  267.         return true;
  268.     }
  269.  
  270.     @Override
  271.     public boolean canExtractItem(int i, ItemStack itemstack, int j)
  272.     {
  273.         return false;
  274.     }
  275. }
Advertisement
Add Comment
Please, Sign In to add comment