From c38290a92008973f22e3a1f76c023b798af2ded8 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 17 Jan 2014 22:37:56 +0800 Subject: [PATCH] Added hot plate stack size cache preventing smelt time cheat --- .../archaic/crate/InventoryCrate.java | 4 +- .../archaic/firebox/TileHotPlate.java | 53 +++++++++++++------ 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/java/resonantinduction/archaic/crate/InventoryCrate.java b/src/main/java/resonantinduction/archaic/crate/InventoryCrate.java index db4d96c7..25daca6b 100644 --- a/src/main/java/resonantinduction/archaic/crate/InventoryCrate.java +++ b/src/main/java/resonantinduction/archaic/crate/InventoryCrate.java @@ -53,9 +53,9 @@ public class InventoryCrate extends ExternalInventory } @Override - public NBTTagCompound save(NBTTagCompound nbt) + public void save(NBTTagCompound nbt) { - return nbt; + } @Override diff --git a/src/main/java/resonantinduction/archaic/firebox/TileHotPlate.java b/src/main/java/resonantinduction/archaic/firebox/TileHotPlate.java index 55514045..4ee3e5fe 100644 --- a/src/main/java/resonantinduction/archaic/firebox/TileHotPlate.java +++ b/src/main/java/resonantinduction/archaic/firebox/TileHotPlate.java @@ -10,8 +10,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.packet.Packet; import net.minecraft.tileentity.TileEntity; import resonantinduction.core.ResonantInduction; -import universalelectricity.api.vector.Vector2; -import universalelectricity.api.vector.Vector3; import calclavia.lib.network.IPacketReceiver; import calclavia.lib.network.IPacketSender; import calclavia.lib.network.PacketHandler; @@ -33,6 +31,7 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender */ private final int POWER = 50000; public final int[] smeltTime = new int[] { 0, 0, 0, 0 }; + public final int[] stackSizeCache = new int[] { 0, 0, 0, 0 }; public static final int MAX_SMELT_TIME = 200; public TileHotPlate() @@ -60,7 +59,8 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender /** * Heat up all slots */ - smeltTime[i] = MAX_SMELT_TIME * this.getStackInSlot(i).stackSize; + stackSizeCache[i] = this.getStackInSlot(i).stackSize; + smeltTime[i] = MAX_SMELT_TIME * stackSizeCache[i]; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } else if (smeltTime[i] > 0) @@ -73,7 +73,7 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender if (!worldObj.isRemote) { ItemStack outputStack = FurnaceRecipes.smelting().getSmeltingResult(getStackInSlot(i)).copy(); - outputStack.stackSize = this.getStackInSlot(i).stackSize; + outputStack.stackSize = stackSizeCache[i]; setInventorySlotContents(i, outputStack); worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } @@ -90,6 +90,40 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender } } + @Override + public void onInventoryChanged() + { + super.onInventoryChanged(); + + /** + * Update cache calculation. + */ + for (int i = 0; i < invSlots; i++) + { + if (getStackInSlot(i) != null) + { + if (stackSizeCache[i] != getStackInSlot(i).stackSize) + { + if (smeltTime[i] > 0) + { + smeltTime[i] += (getStackInSlot(i).stackSize - stackSizeCache[i]) * MAX_SMELT_TIME; + } + + stackSizeCache[i] = getStackInSlot(i).stackSize; + } + } + else + { + stackSizeCache[i] = 0; + } + } + + if (worldObj != null) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + public boolean canSmelt(ItemStack stack) { return FurnaceRecipes.smelting().getSmeltingResult(stack) != null; @@ -125,17 +159,6 @@ public class TileHotPlate extends TileExternalInventory implements IPacketSender return ResonantInduction.PACKET_TILE.getPacket(this, this.getPacketData(0).toArray()); } - @Override - public void onInventoryChanged() - { - super.onInventoryChanged(); - - if (worldObj != null) - { - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - } - /** * 1 - Description Packet * 2 - Energy Update