From 1f5ee1225e4874c4eedd67d6514691f4d6406e57 Mon Sep 17 00:00:00 2001 From: CovertJaguar Date: Wed, 24 Jul 2013 01:41:10 -0700 Subject: [PATCH] Desync Pump/FloodGate from world tick Having all the pumps/floodgates rebuild their queues on the same tick is probably a bad idea. --- common/buildcraft/factory/TileFloodGate.java | 12 +++++++++--- common/buildcraft/factory/TilePump.java | 6 ++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/common/buildcraft/factory/TileFloodGate.java b/common/buildcraft/factory/TileFloodGate.java index 7192f7e4..0703a5de 100644 --- a/common/buildcraft/factory/TileFloodGate.java +++ b/common/buildcraft/factory/TileFloodGate.java @@ -14,6 +14,7 @@ import buildcraft.core.liquids.FluidUtils; import buildcraft.core.liquids.Tank; import buildcraft.core.proxy.CoreProxy; import buildcraft.core.utils.BlockUtil; +import buildcraft.core.utils.Utils; import java.util.Deque; import java.util.HashSet; import java.util.LinkedList; @@ -29,13 +30,14 @@ import net.minecraftforge.fluids.IFluidHandler; public class TileFloodGate extends TileBuildCraft implements IFluidHandler { - public static final int[] REBUID_DELAY = new int[7]; + public static final int[] REBUID_DELAY = new int[8]; public static final int MAX_LIQUID = FluidContainerRegistry.BUCKET_VOLUME * 2; private final TreeMap> pumpLayerQueues = new TreeMap>(); private final Set visitedBlocks = new HashSet(); private Deque fluidsFound = new LinkedList(); private final Tank tank; private int rebuildDelay; + private int tick = Utils.RANDOM.nextInt(); static { REBUID_DELAY[0] = 128; @@ -45,6 +47,7 @@ public class TileFloodGate extends TileBuildCraft implements IFluidHandler { REBUID_DELAY[4] = 2048; REBUID_DELAY[5] = 4096; REBUID_DELAY[6] = 8192; + REBUID_DELAY[7] = 16384; } public TileFloodGate() { @@ -58,10 +61,11 @@ public class TileFloodGate extends TileBuildCraft implements IFluidHandler { if (CoreProxy.proxy.isRenderWorld(worldObj)) return; - if (worldObj.getWorldTime() % 16 == 0) { + tick++; + if (tick % 16 == 0) { FluidStack fluidtoFill = tank.drain(FluidContainerRegistry.BUCKET_VOLUME, false); if (fluidtoFill != null && fluidtoFill.amount == FluidContainerRegistry.BUCKET_VOLUME && fluidtoFill.getFluid() != null) { - if (worldObj.getWorldTime() % REBUID_DELAY[rebuildDelay] == 0) { + if (tick % REBUID_DELAY[rebuildDelay] == 0) { rebuildDelay++; if (rebuildDelay >= REBUID_DELAY.length) rebuildDelay = REBUID_DELAY.length - 1; @@ -179,12 +183,14 @@ public class TileFloodGate extends TileBuildCraft implements IFluidHandler { public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); tank.readFromNBT(data); + rebuildDelay = data.getByte("rebuildDelay"); } @Override public void writeToNBT(NBTTagCompound data) { super.writeToNBT(data); tank.writeToNBT(data); + data.setByte("rebuildDelay", (byte) rebuildDelay); } @Override diff --git a/common/buildcraft/factory/TilePump.java b/common/buildcraft/factory/TilePump.java index 5c7e2eb5..ff2e34f9 100644 --- a/common/buildcraft/factory/TilePump.java +++ b/common/buildcraft/factory/TilePump.java @@ -57,6 +57,7 @@ public class TilePump extends TileBuildCraft implements IMachine, IPowerReceptor private PowerHandler powerHandler; private TileBuffer[] tileBuffer = null; private SafeTimeTracker timer = new SafeTimeTracker(); + private int tick = Utils.RANDOM.nextInt(); public TilePump() { powerHandler = new PowerHandler(this, Type.MACHINE); @@ -88,7 +89,8 @@ public class TilePump extends TileBuildCraft implements IMachine, IPowerReceptor return; } - if (worldObj.getWorldTime() % 16 != 0) + tick++; + if (tick % 16 != 0) return; BlockIndex index = getNextIndexToPump(false); @@ -108,7 +110,7 @@ public class TilePump extends TileBuildCraft implements IMachine, IPowerReceptor } } } else { - if (worldObj.getWorldTime() % 128 == 0) { + if (tick % 128 == 0) { // TODO: improve that decision rebuildQueue();