1 package chemicraft.container;
3 import net.minecraft.src.Container;
4 import net.minecraft.src.EntityPlayer;
5 import net.minecraft.src.IInventory;
6 import net.minecraft.src.InventoryPlayer;
7 import net.minecraft.src.ItemStack;
8 import net.minecraft.src.Slot;
9 import net.minecraft.src.World;
10 import chemicraft.ChemiCraft;
11 import chemicraft.ChemiCraftAPI;
12 import chemicraft.inventory.InventoryDecomposition;
13 import chemicraft.slot.SlotDecompositionResult;
14 import chemicraft.tileentity.TileEntityDecompositionTable;
15 import cpw.mods.fml.common.network.PacketDispatcher;
17 public class ContainerDecompositionTable extends Container {
22 private World worldObj;
36 private TileEntityDecompositionTable tileEntity;
42 private InventoryDecomposition inv;
47 * the inventoryPlayer.
49 private InventoryPlayer invp;
53 public ContainerDecompositionTable(EntityPlayer par1EntityPlayer, TileEntityDecompositionTable par2)
56 this.worldObj = par2.worldObj;
57 this.posX = par2.xCoord;
58 this.posY = par2.yCoord;
59 this.posZ = par2.zCoord;
60 this.tileEntity = par2;
61 this.inv = par2.getInventorys();
62 this.invp = par1EntityPlayer.inventory;
64 this.generateSlots("Decomposition", par2.getInventorys());
65 //GeneratePlayerInventory
68 for (var3 = 0; var3 < 3; ++var3)
70 for (int var4 = 0; var4 < 9; ++var4)
72 this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 85 + var3 * 18));
76 for (var3 = 0; var3 < 9; ++var3)
78 this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var3, 8 + var3 * 18, 143));
81 this.tileEntity.getInventorys().setEventHandler(this);
87 public void onCraftMatrixChanged(IInventory par1IInventory){
88 if(ChemiCraftAPI.instance.getCraftingManager().getDecompositionResults(this.inv) != null){
89 for(int i = 0;i < ChemiCraftAPI.instance.getCraftingManager().getDecompositionResults(this.inv).length;i++){
90 this.inv.setInventorySlotContents(i, ChemiCraftAPI.instance.getCraftingManager().getDecompositionResults(this.inv)[i]);
93 this.inv.setFlag(true);
99 public void updateCraftingResults(){
100 super.updateCraftingResults();
106 public void onCraftGuiClosed(EntityPlayer par1EntityPlayer){
107 super.onCraftGuiClosed(par1EntityPlayer);
113 public boolean canInteractWith(EntityPlayer par1EntityPlayer){
114 return this.worldObj.getBlockId(this.posX, this.posY, this.posZ) != ChemiCraft.instance.decompositionTableID ? false : par1EntityPlayer.getDistanceSq((double)this.posX + 0.5D, (double)this.posY + 0.5D, (double)this.posZ + 0.5D) <= 64.0D;
120 public ItemStack slotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer)
125 super.slotClick(par1, par2, par3, par4EntityPlayer);
133 public ItemStack transferStackInSlot(int par1){
139 public void onButtonClick(int par1){
141 if(this.inv.getStackInSlot(16) != null && this.inv.getStackInSlot(0) != null){
142 for(int loop = 0;loop < this.inv.getStackInSlot(16).stackSize;loop++){
143 if(this.invp.player.inventory.getFirstEmptyStack() != -1){
144 this.tileEntity.setItemDrop(false);
145 this.tileEntity.setButtonClick(true);
146 PacketDispatcher.sendPacketToServer(this.tileEntity.getDescriptionPacket());
147 this.tileEntity.setButtonClick(false);
149 this.tileEntity.setItemDrop(true);
150 this.tileEntity.setButtonClick(true);
151 PacketDispatcher.sendPacketToServer(this.tileEntity.getDescriptionPacket());
152 this.tileEntity.setButtonClick(false);
161 private void generateSlots(String activeTabs, IInventory inventorys){
163 for(int i = 0;i < 4;i++){
164 for(int j = 0;j < 4;j++){
165 this.addSlotToContainer(new SlotDecompositionResult(inventorys, count, 90 + 18 * j, 8 + 18 * i));
169 this.addSlotToContainer(new Slot(inventorys, count, 28, 30));