1 package asia.tcrs.ccnp.chemicraftnext.core.container;
3 import asia.tcrs.ccnp.chemicraftnext.core.ChemiCraftAPI;
4 import asia.tcrs.ccnp.chemicraftnext.core.ChemiCraftCore;
5 import asia.tcrs.ccnp.chemicraftnext.core.inventory.InventoryChemicalCraftingMaterial;
6 import asia.tcrs.ccnp.chemicraftnext.core.inventory.InventoryChemicalCraftingNBT;
7 import asia.tcrs.ccnp.chemicraftnext.core.inventory.InventoryChemicalCraftingResult;
8 import asia.tcrs.ccnp.chemicraftnext.core.nbt.ChemicalNBTRecipe;
9 import asia.tcrs.ccnp.chemicraftnext.core.slot.SlotAtom;
10 import asia.tcrs.ccnp.chemicraftnext.core.slot.SlotResult;
11 import asia.tcrs.ccnp.chemicraftnext.core.tileentity.TileEntityChemicalCraftingTable;
12 import net.minecraft.entity.player.EntityPlayer;
13 import net.minecraft.inventory.Container;
14 import net.minecraft.inventory.IInventory;
15 import net.minecraft.inventory.Slot;
16 import net.minecraft.item.ItemStack;
17 import net.minecraft.world.World;
19 public class ContainerChemicalCraftingTable extends Container {
24 private World worldObj;
38 private TileEntityChemicalCraftingTable tileEntity;
41 private InventoryChemicalCraftingMaterial invm;
42 private InventoryChemicalCraftingResult invr;
43 private InventoryChemicalCraftingNBT invn;
45 private ChemicalNBTRecipe useNBT;
49 public ContainerChemicalCraftingTable(EntityPlayer par1EntityPlayer, TileEntityChemicalCraftingTable par2)
52 this.worldObj = par2.worldObj;
53 this.posX = par2.xCoord;
54 this.posY = par2.yCoord;
55 this.posZ = par2.zCoord;
56 this.tileEntity = par2;
57 this.invm = (InventoryChemicalCraftingMaterial) this.tileEntity.chemicalCraftingInvMaterial;
58 this.invr = (InventoryChemicalCraftingResult) this.tileEntity.chemicalCraftingInvResult;
59 this.invn = (InventoryChemicalCraftingNBT) this.tileEntity.chemicalCraftingInvNBT;
61 this.generateSlots(this.invm, this.invr, this.invn);
62 //GeneratePlayerInventory
65 for (var3 = 0; var3 < 3; ++var3)
67 for (int var4 = 0; var4 < 9; ++var4)
69 this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 85 + var3 * 18));
73 for (var3 = 0; var3 < 9; ++var3)
75 this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var3, 8 + var3 * 18, 143));
78 this.invm.setEventHandler(this);
79 this.invr.setEventHandler(this);
80 this.invn.setEventHandler(this);
81 this.onCraftMatrixChanged(invm);
87 public void onCraftMatrixChanged(IInventory par1IInventory){
88 this.useNBT = ChemiCraftAPI.instance().getCraftingManager().chemicalCrafting(this.invm, this.invr, this.invn);
92 public void onCraftGuiClosed(EntityPlayer par1EntityPlayer)
94 super.onCraftGuiClosed(par1EntityPlayer);
96 if (!this.worldObj.isRemote)
98 for (int i = 0; i < 9; ++i)
100 ItemStack itemstack = this.invm.getStackInSlotOnClosing(i);
102 if (itemstack != null)
104 par1EntityPlayer.dropPlayerItem(itemstack);
111 public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer par4EntityPlayer)
114 if(this.invr.getStackInSlot(0) == null) return super.slotClick(par1, par2, par3, par4EntityPlayer);
115 ItemStack var1 = par4EntityPlayer.inventory.getItemStack();
117 if(var1.stackSize + this.invr.getStackInSlot(0).stackSize >= var1.getMaxStackSize()) return super.slotClick(par1, par2, par3, par4EntityPlayer);
119 for(int i = 0;i < this.invm.getSizeInventory();i++){
120 if(this.invm.getStackInSlot(i) != null){
121 if(this.invm.getStackInSlot(i).stackSize > 1){
122 this.invm.getStackInSlot(i).stackSize--;
124 this.invm.setInventorySlotContents(i, null);
128 ItemStack[] matchNBT = new ItemStack[this.invn.getSizeInventory()];
129 for(int i = 0;i < this.invn.getSizeInventory();i++){
130 matchNBT[i] = this.invn.getStackInSlot(i);
132 if(this.useNBT == null) return super.slotClick(par1, par2, par3, par4EntityPlayer);
133 ItemStack[] useItems = this.useNBT.getMatchItems(matchNBT);
134 for(int i = 0;i < useItems.length;i++){
135 if(useItems[i] != null){
136 this.invn.setInventorySlotContents(i, null);
140 return super.slotClick(par1, par2, par3, par4EntityPlayer);
144 public boolean canInteractWith(EntityPlayer par1EntityPlayer){
145 return this.worldObj.getBlockId(this.posX, this.posY, this.posZ) != ChemiCraftCore.instance.chemicalCraftingTableID ? false : par1EntityPlayer.getDistanceSq((double)this.posX + 0.5D, (double)this.posY + 0.5D, (double)this.posZ + 0.5D) <= 64.0D;
151 public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) {
152 ItemStack var3 = null;
153 Slot var4 = (Slot)this.inventorySlots.get(par2);
154 Slot var6 = (Slot)this.inventorySlots.get(0);
156 if (var4 != null && var4.getHasStack()) {
157 ItemStack var5 = var4.getStack();
159 if (par2 >= 0 && par2 < 3) {
160 if (!this.mergeItemStack(var5, 13,49, false)) {
164 if (par2 >= 3 && par2 < 13) {
165 if (!this.mergeItemStack(var5, 13, 49, false)) {
168 } else if (par2 >= 13 && par2 < 49) {
169 if (var6.isItemValid(var3)) {
170 if (!this.mergeItemStack(var5, 0, 2, false)) {
173 } else if (!this.mergeItemStack(var5, 3, 13, false)) {
178 if (var5.stackSize == 0) {
179 var4.putStack((ItemStack)null);
181 var4.onSlotChanged();
184 if (var5.stackSize == var3.stackSize) {
188 var4.onPickupFromSlot(par1EntityPlayer, var5);
196 private void generateSlots(IInventory materialInv, IInventory resultInv, IInventory nbtInv){
197 for(int i = 0;i < 3;i++){
198 this.addSlotToContainer(new SlotAtom(invn, i, 30 + 18 * i, 7));
200 for(int i = 0;i < 3;i++){
201 for(int j = 0;j < 3;j++){
202 this.addSlotToContainer(new Slot(invm, i * 3 + j, 30 + 18 * j, 27 + 18 * i));
205 this.addSlotToContainer(new SlotResult(invr, 0, 123, 33));