1 package pcc.chemicraft.core.tileentity;
3 import java.io.DataOutputStream;
4 import java.util.Iterator;
5 import java.util.Random;
7 import net.minecraft.block.Block;
8 import net.minecraft.item.ItemStack;
9 import net.minecraft.nbt.NBTTagCompound;
10 import net.minecraft.nbt.NBTTagList;
11 import net.minecraft.network.packet.Packet;
12 import net.minecraft.tileentity.TileEntity;
13 import pcc.chemicraft.core.ChemiCraftAPI;
14 import pcc.chemicraft.core.inventory.InventoryPyrolysisTableFuel;
15 import pcc.chemicraft.core.inventory.InventoryPyrolysisTableMaterial;
16 import pcc.chemicraft.core.inventory.InventoryPyrolysisTableResult;
17 import pcc.chemicraft.core.system.PacketHandler;
19 import com.google.common.io.ByteArrayDataInput;
21 public class TileEntityPyrolysisTable extends TileEntity {
23 private InventoryPyrolysisTableMaterial invm = new InventoryPyrolysisTableMaterial();
24 private InventoryPyrolysisTableResult invr = new InventoryPyrolysisTableResult();
25 private InventoryPyrolysisTableFuel invf = new InventoryPyrolysisTableFuel();
30 private float heat = 0;
35 private float burnTime = 0;
40 private float fuelRestTime = 0;
45 private static final int MAX_HEAT = 1700;
50 private static final int MIN_HEAT = 400;
53 * 燃料の燃焼速度比率・素材の燃焼速度比率の中心となる熱量
55 private static final int CENTER_HEAT = 1050;
60 private static final int MAX_BURN_TIME = 2000;
65 public static final Random rand = new Random();
68 public void updateEntity() {
70 // boolean var2 = false;
72 boolean var1 = this.worldObj.canBlockSeeTheSky(xCoord, yCoord + 1, zCoord);
73 if (this.worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.fire.blockID) {
74 if (this.heat < 1700) {
75 if (this.worldObj.isRaining() && var1 && !this.worldObj.isThundering()) {
77 } else if (this.worldObj.isThundering() && var1) {
87 if(this.worldObj.isRaining() && var1 && !this.worldObj.isThundering()) {
89 } else if(this.worldObj.isThundering() && var1) {
99 if (this.fuelRestTime >= 0) {
100 this.burnTime += 10 * CENTER_HEAT / this.heat;
101 this.fuelRestTime -= 10 * CENTER_HEAT / this.heat;
104 if (this.burnTime >= MAX_BURN_TIME) {
105 Iterator<ItemStack> itMaterial = ChemiCraftAPI.instance().getPyrolysisRecipeList().keySet().iterator();
106 while (itMaterial.hasNext()) {
107 ItemStack itemstackMaterial = itMaterial.next();
108 ItemStack materialItem = this.invm.getStackInSlot(0);
109 if (materialItem != null) {
110 if (this.isInItemCheck(itemstackMaterial)) {
112 if (itemstackMaterial.itemID == materialItem.itemID && itemstackMaterial.getItemDamage() == materialItem.getItemDamage()) {
113 this.inItem(itemstackMaterial);
114 if (materialItem.stackSize > 1) {
115 this.invm.setInventorySlotContents(0, new ItemStack(materialItem.itemID, --materialItem.stackSize, materialItem.getItemDamage()));
117 this.invm.setInventorySlotContents(0, null);
127 boolean var3 = false;
128 if (this.heat > MIN_HEAT) {
129 Iterator<ItemStack> itMaterial = ChemiCraftAPI.instance().getPyrolysisRecipeList().keySet().iterator();
130 while (itMaterial.hasNext()) {
131 ItemStack itemstackMaterial = itMaterial.next();
132 ItemStack materialItem = this.invm.getStackInSlot(0);
133 if (materialItem != null) {
134 if (this.isInItemCheck(itemstackMaterial)) {
136 if (itemstackMaterial.itemID == materialItem.itemID && itemstackMaterial.getItemDamage() == materialItem.getItemDamage()) {
138 if (this.fuelRestTime <= 0) {
139 Iterator<ItemStack> itFuel = ChemiCraftAPI.instance().getPyrolysisFuelList().keySet().iterator();
140 while (itFuel.hasNext()) {
141 ItemStack itemstackFuel = itFuel.next();
142 ItemStack fuelItem = this.invf.getStackInSlot(0);
143 if (fuelItem != null) {
144 if (itemstackFuel.itemID == fuelItem.itemID && itemstackFuel.getItemDamage() == fuelItem.getItemDamage()) {
145 this.fuelRestTime = ChemiCraftAPI.instance().getPyrolysisFuelList().get(itemstackFuel);
146 if (fuelItem.stackSize > 1) {
147 this.invf.setInventorySlotContents(0, new ItemStack(fuelItem.itemID, --fuelItem.stackSize, fuelItem.getItemDamage()));
150 this.invf.setInventorySlotContents(0, null);
170 DebugTick.setDebugData("PyrolysisTable" +
171 "(x:" + this.xCoord +
172 " y:" + this.yCoord +
173 " z:" + this.zCoord + ")",
174 new DebugData("Heat", this.heat),
175 new DebugData("FuelRestTime", this.fuelRestTime),
176 new DebugData("BurnTime", this.burnTime),
177 new DebugData("アイテムが入るか", var2)
183 public void readFromNBT(NBTTagCompound par1) {
184 super.readFromNBT(par1);
185 this.heat = par1.getFloat("Heat");
186 this.burnTime = par1.getFloat("BurnTime");
187 this.fuelRestTime = par1.getFloat("FuelRestTime");
189 NBTTagList var2 = par1.getTagList("Items");
190 for (int var3 = 0; var3 < var2.tagCount(); ++var3)
192 NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
193 int var5 = var4.getByte("Slot") & 255;
195 if (var5 >= 0 && var5 < this.invm.getSizeInventory())
197 this.invm.setInventorySlotContents(var5, ItemStack.loadItemStackFromNBT(var4));
201 NBTTagList var6 = par1.getTagList("Items2");
202 for (int var3 = 0; var3 < var6.tagCount(); ++var3)
204 NBTTagCompound var7 = (NBTTagCompound)var6.tagAt(var3);
205 int var8 = var7.getByte("Slot2") & 255;
207 if (var8 >= 0 && var8 < this.invr.getSizeInventory())
209 this.invr.setInventorySlotContents(var8, ItemStack.loadItemStackFromNBT(var7));
213 NBTTagList var9 = par1.getTagList("Items3");
214 for (int var3 = 0; var3 < var9.tagCount(); ++var3)
216 NBTTagCompound var10 = (NBTTagCompound)var9.tagAt(var3);
217 int var11 = var10.getByte("Slot3") & 255;
219 if (var11 >= 0 && var11 < this.invf.getSizeInventory())
221 this.invf.setInventorySlotContents(var11, ItemStack.loadItemStackFromNBT(var10));
227 public void writeToNBT(NBTTagCompound par1) {
228 super.writeToNBT(par1);
229 par1.setFloat("Heat", this.heat);
230 par1.setFloat("BurnTime", this.burnTime);
231 par1.setFloat("FuelRestTime", this.fuelRestTime);
233 NBTTagList var2 = new NBTTagList();
234 for (int var3 = 0; var3 < this.invm.getSizeInventory(); ++var3)
236 if (this.invm.getStackInSlot(var3) != null)
238 NBTTagCompound var4 = new NBTTagCompound();
239 var4.setByte("Slot", (byte)var3);
240 this.invm.getStackInSlot(var3).writeToNBT(var4);
241 var2.appendTag(var4);
244 par1.setTag("Items", var2);
246 NBTTagList var5 = new NBTTagList();
247 for (int var6 = 0; var6 < this.invr.getSizeInventory(); ++var6)
249 if (this.invr.getStackInSlot(var6) != null)
251 NBTTagCompound var7 = new NBTTagCompound();
252 var7.setByte("Slot2", (byte)var6);
253 this.invr.getStackInSlot(var6).writeToNBT(var7);
254 var5.appendTag(var7);
257 par1.setTag("Items2", var5);
259 NBTTagList var8 = new NBTTagList();
260 for (int var9 = 0; var9 < this.invf.getSizeInventory(); ++var9)
262 if (this.invf.getStackInSlot(var9) != null)
264 NBTTagCompound var10 = new NBTTagCompound();
265 var10.setByte("Slot3", (byte)var9);
266 this.invf.getStackInSlot(var9).writeToNBT(var10);
267 var8.appendTag(var10);
270 par1.setTag("Items3", var8);
274 public Packet getDescriptionPacket() {
275 return PacketHandler.getPacket(this);
278 public void readPacket(ByteArrayDataInput data) {
280 this.heat = data.readFloat();
281 this.burnTime = data.readInt();
282 this.fuelRestTime = data.readFloat();
283 for(int i = 0;i < this.invm.getSizeInventory();i++){
284 int id = data.readInt();
285 int size = data.readByte();
286 int damage = data.readInt();
287 if (id != 0 && size != 0){
288 this.invm.setInventorySlotContents(i, new ItemStack(id, size, damage));
290 this.invm.setInventorySlotContents(i, null);
294 for(int i = 0;i < this.invr.getSizeInventory();i++){
295 int id = data.readInt();
296 int size = data.readByte();
297 int damage = data.readInt();
298 if (id != 0 && size != 0){
299 this.invr.setInventorySlotContents(i, new ItemStack(id, size, damage));
301 this.invr.setInventorySlotContents(i, null);
305 for(int i = 0;i < this.invf.getSizeInventory();i++){
306 int id = data.readInt();
307 int size = data.readByte();
308 int damage = data.readInt();
309 if (id != 0 && size != 0){
310 this.invf.setInventorySlotContents(i, new ItemStack(id, size, damage));
312 this.invf.setInventorySlotContents(i, null);
315 } catch (Exception e) {
321 public void writePacket(DataOutputStream dos){
323 dos.writeFloat(this.heat);
324 dos.writeFloat(this.burnTime);
325 dos.writeFloat(this.fuelRestTime);
326 for(int i = 0;i < this.invm.getSizeInventory();i++){
330 ItemStack itemstack = this.invm.getStackInSlot(i);
331 if (itemstack != null){
332 id = itemstack.itemID;
333 size = itemstack.stackSize;
334 damage = itemstack.getItemDamage();
337 dos.writeInt(damage);
345 for(int i = 0;i < this.invr.getSizeInventory();i++){
349 ItemStack itemstack = this.invr.getStackInSlot(i);
350 if (itemstack != null){
351 id = itemstack.itemID;
352 size = itemstack.stackSize;
353 damage = itemstack.getItemDamage();
356 dos.writeInt(damage);
364 for(int i = 0;i < this.invf.getSizeInventory();i++){
368 ItemStack itemstack = this.invf.getStackInSlot(i);
369 if (itemstack != null){
370 id = itemstack.itemID;
371 size = itemstack.stackSize;
372 damage = itemstack.getItemDamage();
375 dos.writeInt(damage);
382 } catch (Exception e) {
387 public float getBurnTime() {
388 return this.burnTime;
391 public float getHeat() {
395 public InventoryPyrolysisTableMaterial getInvMaterial() {
399 public InventoryPyrolysisTableResult getInvResult() {
403 public InventoryPyrolysisTableFuel getInvFuel() {
407 public boolean isInItemCheck(ItemStack key) {
408 ItemStack[] results = ChemiCraftAPI.instance().getPyrolysisRecipeList().get(key).clone();
409 ItemStack[] containerResults = new ItemStack[this.invr.getSizeInventory()];
410 for (int j = 0; j < this.invr.getSizeInventory(); j++) {
411 containerResults[j] = this.invr.getStackInSlot(j);
414 for (int i = 0; i < results.length; i++) {
415 int var1 = results[i].itemID;
416 int var3 = results[i].getItemDamage();
417 int var5 = results[i].stackSize;
418 for (int j = 0; j < containerResults.length; j++) {
419 if (containerResults[j] == null) {
420 containerResults[j] = results[i];
424 int var2 = containerResults[j].itemID;
425 int var4 = containerResults[j].getItemDamage();
426 int var6 = containerResults[j].stackSize;
427 int var7 = containerResults[j].getMaxStackSize();
428 if (var1 == var2 && var3 == var4) {
429 if (var5 + var6 <= var7) {
430 containerResults[j] = results[i];
440 for (int i = 0; i < results.length; i++) {
441 if (results[i] != null) {
448 public void inItem(ItemStack key) {
449 ItemStack[] results = ChemiCraftAPI.instance().getPyrolysisRecipeList().get(key);
451 for (int i = 0; i < results.length; i++) {
452 ItemStack[] containerResults = new ItemStack[this.invr.getSizeInventory()];
453 for (int j = 0; j < this.invr.getSizeInventory(); j++) {
454 containerResults[j] = this.invr.getStackInSlot(j);
456 int var1 = results[i].itemID;
457 int var3 = results[i].getItemDamage();
458 int var5 = results[i].stackSize;
459 for (int j = 0; j < containerResults.length; j++) {
460 if (containerResults[j] == null) {
461 this.invr.setInventorySlotContents(j, results[i]);
464 int var2 = containerResults[j].itemID;
465 int var4 = containerResults[j].getItemDamage();
466 int var6 = containerResults[j].stackSize;
467 int var7 = containerResults[j].getMaxStackSize();
468 if (var1 == var2 && var3 == var4) {
469 if (var5 + var6 <= var7) {
470 this.invr.setInventorySlotContents(j, new ItemStack(results[i].itemID, var5 + var6, results[i].getItemDamage()));
473 this.invr.setInventorySlotContents(j, new ItemStack(results[i].itemID, var7, results[i].getItemDamage()));
482 public float getFuelRestTime() {