1 package pcc.chemicraft.tileentity;
3 import java.io.DataOutputStream;
4 import java.util.HashMap;
5 import java.util.Iterator;
6 import java.util.Random;
8 import pcc.chemicraft.debug.DebugData;
9 import pcc.chemicraft.debug.DebugTick;
10 import pcc.chemicraft.inventory.InventoryPyrolysisTableFuel;
11 import pcc.chemicraft.inventory.InventoryPyrolysisTableMaterial;
12 import pcc.chemicraft.inventory.InventoryPyrolysisTableResult;
13 import pcc.chemicraft.system.PacketHandler;
15 import net.minecraft.block.Block;
16 import net.minecraft.item.ItemStack;
17 import net.minecraft.nbt.NBTTagCompound;
18 import net.minecraft.nbt.NBTTagList;
19 import net.minecraft.network.packet.Packet;
20 import net.minecraft.tileentity.TileEntity;
21 <<<<<<< HEAD:common/pcc/chemicraft/tileentity/TileEntityPyrolysisTable.java
23 import pcc.chemicraft.inventory.InventoryPyrolysisTableFuel;
24 import pcc.chemicraft.inventory.InventoryPyrolysisTableMaterial;
25 import pcc.chemicraft.inventory.InventoryPyrolysisTableResult;
26 import pcc.chemicraft.system.PacketHandler;
27 >>>>>>> a5e4a5c40b9001657f1e36ece533651f63183fbe:common/pcc/chemicraft/tileentity/TileEntityPyrolysisTable.java
29 import com.google.common.io.ByteArrayDataInput;
31 public class TileEntityPyrolysisTable extends TileEntity {
33 private InventoryPyrolysisTableMaterial invm = new InventoryPyrolysisTableMaterial();
34 private InventoryPyrolysisTableResult invr = new InventoryPyrolysisTableResult();
35 private InventoryPyrolysisTableFuel invf = new InventoryPyrolysisTableFuel();
40 private float heat = 0;
45 private float burnTime = 0;
50 private float fuelRestTime = 0;
55 private static final int MAX_HEAT = 1700;
60 private static final int MIN_HEAT = 400;
63 * 燃料の燃焼速度比率・素材の燃焼速度比率の中心となる熱量
65 private static final int CENTER_HEAT = 1050;
70 private static final int MAX_BURN_TIME = 2000;
75 public static final Random rand = new Random();
80 private static HashMap<ItemStack, Integer> fuelList = new HashMap<ItemStack, Integer>();
85 private static HashMap<ItemStack, ItemStack[]> recipeList = new HashMap<ItemStack, ItemStack[]>();
88 public void updateEntity() {
90 //boolean var2 = false;
92 boolean var1 = this.worldObj.canBlockSeeTheSky(xCoord, yCoord + 1, zCoord);
93 if (this.worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.fire.blockID) {
94 if (this.heat < 1700) {
95 if (this.worldObj.isRaining() && var1 && !this.worldObj.isThundering()) {
97 } else if (this.worldObj.isThundering() && var1) {
107 if(this.worldObj.isRaining() && var1 && !this.worldObj.isThundering()) {
109 } else if(this.worldObj.isThundering() && var1) {
119 if (this.fuelRestTime >= 0) {
120 this.burnTime += 10 * CENTER_HEAT / this.heat;
121 this.fuelRestTime -= 10 * CENTER_HEAT / this.heat;
124 if (this.burnTime >= MAX_BURN_TIME) {
125 Iterator<ItemStack> itMaterial = recipeList.keySet().iterator();
126 while (itMaterial.hasNext()) {
127 ItemStack itemstackMaterial = itMaterial.next();
128 ItemStack materialItem = this.invm.getStackInSlot(0);
129 if (materialItem != null) {
130 if (this.isInItemCheck(itemstackMaterial)) {
132 if (itemstackMaterial.itemID == materialItem.itemID && itemstackMaterial.getItemDamage() == materialItem.getItemDamage()) {
133 this.inItem(itemstackMaterial);
134 if (materialItem.stackSize > 1) {
135 this.invm.setInventorySlotContents(0, new ItemStack(materialItem.itemID, --materialItem.stackSize, materialItem.getItemDamage()));
137 this.invm.setInventorySlotContents(0, null);
147 boolean var3 = false;
148 if (this.heat > MIN_HEAT) {
149 Iterator<ItemStack> itMaterial = recipeList.keySet().iterator();
150 while (itMaterial.hasNext()) {
151 ItemStack itemstackMaterial = itMaterial.next();
152 ItemStack materialItem = this.invm.getStackInSlot(0);
153 if (materialItem != null) {
154 if (this.isInItemCheck(itemstackMaterial)) {
156 if (itemstackMaterial.itemID == materialItem.itemID && itemstackMaterial.getItemDamage() == materialItem.getItemDamage()) {
158 if (this.fuelRestTime <= 0) {
159 Iterator<ItemStack> itFuel = fuelList.keySet().iterator();
160 while (itFuel.hasNext()) {
161 ItemStack itemstackFuel = itFuel.next();
162 ItemStack fuelItem = this.invf.getStackInSlot(0);
163 if (fuelItem != null) {
164 if (itemstackFuel.itemID == fuelItem.itemID && itemstackFuel.getItemDamage() == fuelItem.getItemDamage()) {
165 this.fuelRestTime = fuelList.get(itemstackFuel);
166 if (fuelItem.stackSize > 1) {
167 this.invf.setInventorySlotContents(0, new ItemStack(fuelItem.itemID, --fuelItem.stackSize, fuelItem.getItemDamage()));
170 this.invf.setInventorySlotContents(0, null);
190 DebugTick.setDebugData("PyrolysisTable" +
191 "(x:" + this.xCoord +
192 " y:" + this.yCoord +
193 " z:" + this.zCoord + ")",
194 new DebugData("Heat", this.heat),
195 new DebugData("FuelRestTime", this.fuelRestTime),
196 new DebugData("BurnTime", this.burnTime),
197 new DebugData("アイテムが入るか", var2)
203 public void readFromNBT(NBTTagCompound par1) {
204 super.readFromNBT(par1);
205 this.heat = par1.getFloat("Heat");
206 this.burnTime = par1.getFloat("BurnTime");
207 this.fuelRestTime = par1.getFloat("FuelRestTime");
209 NBTTagList var2 = par1.getTagList("Items");
210 for (int var3 = 0; var3 < var2.tagCount(); ++var3)
212 NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
213 int var5 = var4.getByte("Slot") & 255;
215 if (var5 >= 0 && var5 < this.invm.getSizeInventory())
217 this.invm.setInventorySlotContents(var5, ItemStack.loadItemStackFromNBT(var4));
221 NBTTagList var6 = par1.getTagList("Items2");
222 for (int var3 = 0; var3 < var6.tagCount(); ++var3)
224 NBTTagCompound var7 = (NBTTagCompound)var6.tagAt(var3);
225 int var8 = var7.getByte("Slot2") & 255;
227 if (var8 >= 0 && var8 < this.invr.getSizeInventory())
229 this.invr.setInventorySlotContents(var8, ItemStack.loadItemStackFromNBT(var7));
233 NBTTagList var9 = par1.getTagList("Items3");
234 for (int var3 = 0; var3 < var9.tagCount(); ++var3)
236 NBTTagCompound var10 = (NBTTagCompound)var9.tagAt(var3);
237 int var11 = var10.getByte("Slot3") & 255;
239 if (var11 >= 0 && var11 < this.invf.getSizeInventory())
241 this.invf.setInventorySlotContents(var11, ItemStack.loadItemStackFromNBT(var10));
247 public void writeToNBT(NBTTagCompound par1) {
248 super.writeToNBT(par1);
249 par1.setFloat("Heat", this.heat);
250 par1.setFloat("BurnTime", this.burnTime);
251 par1.setFloat("FuelRestTime", this.fuelRestTime);
253 NBTTagList var2 = new NBTTagList();
254 for (int var3 = 0; var3 < this.invm.getSizeInventory(); ++var3)
256 if (this.invm.getStackInSlot(var3) != null)
258 NBTTagCompound var4 = new NBTTagCompound();
259 var4.setByte("Slot", (byte)var3);
260 this.invm.getStackInSlot(var3).writeToNBT(var4);
261 var2.appendTag(var4);
264 par1.setTag("Items", var2);
266 NBTTagList var5 = new NBTTagList();
267 for (int var6 = 0; var6 < this.invr.getSizeInventory(); ++var6)
269 if (this.invr.getStackInSlot(var6) != null)
271 NBTTagCompound var7 = new NBTTagCompound();
272 var7.setByte("Slot2", (byte)var6);
273 this.invr.getStackInSlot(var6).writeToNBT(var7);
274 var5.appendTag(var7);
277 par1.setTag("Items2", var5);
279 NBTTagList var8 = new NBTTagList();
280 for (int var9 = 0; var9 < this.invf.getSizeInventory(); ++var9)
282 if (this.invf.getStackInSlot(var9) != null)
284 NBTTagCompound var10 = new NBTTagCompound();
285 var10.setByte("Slot3", (byte)var9);
286 this.invf.getStackInSlot(var9).writeToNBT(var10);
287 var8.appendTag(var10);
290 par1.setTag("Items3", var8);
294 public Packet getDescriptionPacket() {
295 return PacketHandler.getPacket(this);
298 public void readPacket(ByteArrayDataInput data) {
300 this.heat = data.readFloat();
301 this.burnTime = data.readInt();
302 this.fuelRestTime = data.readFloat();
303 for(int i = 0;i < this.invm.getSizeInventory();i++){
304 int id = data.readInt();
305 int size = data.readByte();
306 int damage = data.readInt();
307 if (id != 0 && size != 0){
308 this.invm.setInventorySlotContents(i, new ItemStack(id, size, damage));
310 this.invm.setInventorySlotContents(i, null);
314 for(int i = 0;i < this.invr.getSizeInventory();i++){
315 int id = data.readInt();
316 int size = data.readByte();
317 int damage = data.readInt();
318 if (id != 0 && size != 0){
319 this.invr.setInventorySlotContents(i, new ItemStack(id, size, damage));
321 this.invr.setInventorySlotContents(i, null);
325 for(int i = 0;i < this.invf.getSizeInventory();i++){
326 int id = data.readInt();
327 int size = data.readByte();
328 int damage = data.readInt();
329 if (id != 0 && size != 0){
330 this.invf.setInventorySlotContents(i, new ItemStack(id, size, damage));
332 this.invf.setInventorySlotContents(i, null);
335 } catch (Exception e) {
341 public void writePacket(DataOutputStream dos){
343 dos.writeFloat(this.heat);
344 dos.writeFloat(this.burnTime);
345 dos.writeFloat(this.fuelRestTime);
346 for(int i = 0;i < this.invm.getSizeInventory();i++){
350 ItemStack itemstack = this.invm.getStackInSlot(i);
351 if (itemstack != null){
352 id = itemstack.itemID;
353 size = itemstack.stackSize;
354 damage = itemstack.getItemDamage();
357 dos.writeInt(damage);
365 for(int i = 0;i < this.invr.getSizeInventory();i++){
369 ItemStack itemstack = this.invr.getStackInSlot(i);
370 if (itemstack != null){
371 id = itemstack.itemID;
372 size = itemstack.stackSize;
373 damage = itemstack.getItemDamage();
376 dos.writeInt(damage);
384 for(int i = 0;i < this.invf.getSizeInventory();i++){
388 ItemStack itemstack = this.invf.getStackInSlot(i);
389 if (itemstack != null){
390 id = itemstack.itemID;
391 size = itemstack.stackSize;
392 damage = itemstack.getItemDamage();
395 dos.writeInt(damage);
402 } catch (Exception e) {
407 public float getBurnTime() {
408 return this.burnTime;
411 public float getHeat() {
415 public InventoryPyrolysisTableMaterial getInvMaterial() {
419 public InventoryPyrolysisTableResult getInvResult() {
423 public InventoryPyrolysisTableFuel getInvFuel() {
427 public boolean isInItemCheck(ItemStack key) {
428 ItemStack[] results = recipeList.get(key).clone();
429 ItemStack[] containerResults = new ItemStack[this.invr.getSizeInventory()];
430 for (int j = 0; j < this.invr.getSizeInventory(); j++) {
431 containerResults[j] = this.invr.getStackInSlot(j);
434 for (int i = 0; i < results.length; i++) {
435 int var1 = results[i].itemID;
436 int var3 = results[i].getItemDamage();
437 int var5 = results[i].stackSize;
438 for (int j = 0; j < containerResults.length; j++) {
439 if (containerResults[j] == null) {
440 containerResults[j] = results[i];
444 int var2 = containerResults[j].itemID;
445 int var4 = containerResults[j].getItemDamage();
446 int var6 = containerResults[j].stackSize;
447 int var7 = containerResults[j].getMaxStackSize();
448 if (var1 == var2 && var3 == var4) {
449 if (var5 + var6 <= var7) {
450 containerResults[j] = results[i];
460 for (int i = 0; i < results.length; i++) {
461 if (results[i] != null) {
468 public void inItem(ItemStack key) {
469 ItemStack[] results = recipeList.get(key);
471 for (int i = 0; i < results.length; i++) {
472 ItemStack[] containerResults = new ItemStack[this.invr.getSizeInventory()];
473 for (int j = 0; j < this.invr.getSizeInventory(); j++) {
474 containerResults[j] = this.invr.getStackInSlot(j);
476 int var1 = results[i].itemID;
477 int var3 = results[i].getItemDamage();
478 int var5 = results[i].stackSize;
479 for (int j = 0; j < containerResults.length; j++) {
480 if (containerResults[j] == null) {
481 this.invr.setInventorySlotContents(j, results[i]);
484 int var2 = containerResults[j].itemID;
485 int var4 = containerResults[j].getItemDamage();
486 int var6 = containerResults[j].stackSize;
487 int var7 = containerResults[j].getMaxStackSize();
488 if (var1 == var2 && var3 == var4) {
489 if (var5 + var6 <= var7) {
490 this.invr.setInventorySlotContents(j, new ItemStack(results[i].itemID, var5 + var6, results[i].getItemDamage()));
493 this.invr.setInventorySlotContents(j, new ItemStack(results[i].itemID, var7, results[i].getItemDamage()));
502 public static void addFuel(ItemStack itemstack, int burnTime) {
503 fuelList.put(itemstack, burnTime);
506 public static void addRecipe(ItemStack material, ItemStack[] result) {
507 recipeList.put(material, result);