OSDN Git Service

Merge branch 'master' of https://scm.sourceforge.jp/gitroot/chemicraft/chemicraft
[chemicraft/chemicraft.git] / common / chemicraft / container / ContainerDecompositionTable.java
1 package chemicraft.container;
2
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;
16
17 public class ContainerDecompositionTable extends Container {
18
19         /**
20          * Worldのインスタンス
21          */
22         private World worldObj;
23
24
25         /**
26          * BlockのX, Y, Z座標
27          */
28         private int posX;
29         private int posY;
30         private int posZ;
31
32
33         /**
34          * the TileEntity.
35          */
36         private TileEntityDecompositionTable tileEntity;
37
38
39         /**
40          * the inventory.
41          */
42         private InventoryDecomposition inv;
43
44
45
46         /**
47          * the inventoryPlayer.
48          */
49         private InventoryPlayer invp;
50
51
52
53         public ContainerDecompositionTable(EntityPlayer par1EntityPlayer, TileEntityDecompositionTable par2)
54         {
55                 super();
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;
63                 //GenerateInventory
64                 this.generateSlots("Decomposition", par2.getInventorys());
65                 //GeneratePlayerInventory
66                 int var3;
67
68                 for (var3 = 0; var3 < 3; ++var3)
69                 {
70                         for (int var4 = 0; var4 < 9; ++var4)
71                         {
72                                 this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var4 + var3 * 9 + 9, 8 + var4 * 18, 85 + var3 * 18));
73                         }
74                 }
75
76                 for (var3 = 0; var3 < 9; ++var3)
77                 {
78                         this.addSlotToContainer(new Slot(par1EntityPlayer.inventory, var3, 8 + var3 * 18, 143));
79                 }
80
81                 this.tileEntity.getInventorys().setEventHandler(this);
82         }
83
84
85
86         @Override
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]);
91                         }
92                 }
93                 this.inv.setFlag(true);
94         }
95
96
97
98         @Override
99         public void updateCraftingResults(){
100                 super.updateCraftingResults();
101         }
102
103
104
105         @Override
106         public void onCraftGuiClosed(EntityPlayer par1EntityPlayer){
107                 super.onCraftGuiClosed(par1EntityPlayer);
108         }
109
110
111
112         @Override
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;
115         }
116
117
118
119         @Override
120         public ItemStack slotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer)
121         {
122                 if(par1 < 16){
123                         return null;
124                 }else{
125                         super.slotClick(par1, par2, par3, par4EntityPlayer);
126                 }
127                 return null;
128         }
129
130
131
132         @Override
133         public ItemStack transferStackInSlot(int par1){
134                 return null;
135         }
136
137
138
139         public void onButtonClick(int par1){
140                 if(par1 == 0){
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);
148                                         }else{
149                                                 this.tileEntity.setItemDrop(true);
150                                                 this.tileEntity.setButtonClick(true);
151                                                 PacketDispatcher.sendPacketToServer(this.tileEntity.getDescriptionPacket());
152                                                 this.tileEntity.setButtonClick(false);
153                                         }
154                                 }
155                         }
156                 }
157         }
158
159
160
161         private void generateSlots(String activeTabs, IInventory inventorys){
162                 int count = 0;
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));
166                                 count++;
167                         }
168                 }
169                 this.addSlotToContainer(new Slot(inventorys, count, 28, 30));
170         }
171
172 }