From 1ec9d92699982df62917683aa2b9b4cb1e121231 Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Sun, 14 Sep 2014 20:52:53 +0200 Subject: [PATCH] added variable timeout for schematic, down to 1. close #1971 --- api/buildcraft/api/blueprints/Schematic.java | 8 ++++++++ api/buildcraft/api/blueprints/SchematicEntity.java | 4 ++++ api/buildcraft/api/blueprints/SchematicTile.java | 5 +++++ .../buildcraft/builders/TileAbstractBuilder.java | 3 --- common/buildcraft/builders/TileBuilder.java | 10 +++------- common/buildcraft/builders/TileFiller.java | 2 +- .../buildcraft/core/blueprints/BptBuilderBase.java | 14 +++++++++++++- .../buildcraft/core/blueprints/BuildingSlot.java | 2 ++ .../core/blueprints/BuildingSlotBlock.java | 9 +++++++++ .../core/blueprints/BuildingSlotEntity.java | 5 +++++ common/buildcraft/factory/TileQuarry.java | 4 +--- 11 files changed, 51 insertions(+), 15 deletions(-) diff --git a/api/buildcraft/api/blueprints/Schematic.java b/api/buildcraft/api/blueprints/Schematic.java index 18390e29..41e26a7f 100755 --- a/api/buildcraft/api/blueprints/Schematic.java +++ b/api/buildcraft/api/blueprints/Schematic.java @@ -275,4 +275,12 @@ public abstract class Schematic { public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) { } + + /** + * Returns the number of cycles to wait after building this schematic. Tiles + * and entities typically require more wait, around 5 cycles. + */ + public int buildTime() { + return 1; + } } diff --git a/api/buildcraft/api/blueprints/SchematicEntity.java b/api/buildcraft/api/blueprints/SchematicEntity.java index bbe27ccd..54b89c36 100755 --- a/api/buildcraft/api/blueprints/SchematicEntity.java +++ b/api/buildcraft/api/blueprints/SchematicEntity.java @@ -214,4 +214,8 @@ public class SchematicEntity extends Schematic { return false; } + @Override + public int buildTime() { + return 5; + } } diff --git a/api/buildcraft/api/blueprints/SchematicTile.java b/api/buildcraft/api/blueprints/SchematicTile.java index cc36485d..b7e4741e 100755 --- a/api/buildcraft/api/blueprints/SchematicTile.java +++ b/api/buildcraft/api/blueprints/SchematicTile.java @@ -112,4 +112,9 @@ public class SchematicTile extends SchematicBlock { tileNBT = nbt.getCompoundTag("blockCpt"); } + + @Override + public int buildTime() { + return 5; + } } diff --git a/common/buildcraft/builders/TileAbstractBuilder.java b/common/buildcraft/builders/TileAbstractBuilder.java index c540dda2..7988a17c 100755 --- a/common/buildcraft/builders/TileAbstractBuilder.java +++ b/common/buildcraft/builders/TileAbstractBuilder.java @@ -17,7 +17,6 @@ import net.minecraft.nbt.NBTTagCompound; import buildcraft.api.blueprints.ITileBuilder; import buildcraft.api.blueprints.SchematicRegistry; import buildcraft.api.core.NetworkData; -import buildcraft.api.core.SafeTimeTracker; import buildcraft.core.IBoxProvider; import buildcraft.core.LaserData; import buildcraft.core.RFBattery; @@ -42,8 +41,6 @@ public abstract class TileAbstractBuilder extends TileBuildCraft implements ITil public ArrayList buildersInAction = new ArrayList(); - protected SafeTimeTracker buildTracker = new SafeTimeTracker(5); - private int rfPrev = 0; private int rfUnchangedCycles = 0; diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index 55162c7f..de1eac47 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -695,14 +695,10 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine, IFluid } public void build () { - if (!buildTracker.markTimeIfDelay(worldObj)) { - return; - } - if (currentBuilder != null) { - currentBuilder.buildNextSlot(worldObj, this, xCoord, yCoord, zCoord); - - updateRequirements(); + if (currentBuilder.buildNextSlot(worldObj, this, xCoord, yCoord, zCoord)) { + updateRequirements(); + } } } diff --git a/common/buildcraft/builders/TileFiller.java b/common/buildcraft/builders/TileFiller.java index e7c0ba51..caa18a73 100644 --- a/common/buildcraft/builders/TileFiller.java +++ b/common/buildcraft/builders/TileFiller.java @@ -112,7 +112,7 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction return; } - if (getBattery().getEnergyStored() < POWER_ACTIVATION || !buildTracker.markTimeIfDelay(worldObj)) { + if (getBattery().getEnergyStored() < POWER_ACTIVATION) { return; } diff --git a/common/buildcraft/core/blueprints/BptBuilderBase.java b/common/buildcraft/core/blueprints/BptBuilderBase.java index f981c544..1604dbd2 100644 --- a/common/buildcraft/core/blueprints/BptBuilderBase.java +++ b/common/buildcraft/core/blueprints/BptBuilderBase.java @@ -46,6 +46,8 @@ public abstract class BptBuilderBase implements IAreaProvider { protected int x, y, z; protected boolean initialized = false; + private long nextBuildDate = 0; + public BptBuilderBase(BlueprintBase bluePrint, World world, int x, int y, int z) { this.blueprint = bluePrint; this.x = x; @@ -71,13 +73,23 @@ public abstract class BptBuilderBase implements IAreaProvider { initialized = true; } + if (world.getTotalWorldTime() < nextBuildDate) { + return false; + } + BuildingSlot slot = getNextBlock(world, builder); - return buildSlot(world, builder, slot, x + 0.5F, y + 0.5F, z + 0.5F); + if (buildSlot(world, builder, slot, x + 0.5F, y + 0.5F, z + 0.5F)) { + nextBuildDate = world.getTotalWorldTime() + slot.buildTime(); + return true; + } else { + return false; + } } public boolean buildSlot(World world, IBuildingItemsProvider builder, BuildingSlot slot, double x, double y, double z) { + if (!initialized) { initialize(); initialized = true; diff --git a/common/buildcraft/core/blueprints/BuildingSlot.java b/common/buildcraft/core/blueprints/BuildingSlot.java index 2cec1efb..9e064b72 100755 --- a/common/buildcraft/core/blueprints/BuildingSlot.java +++ b/common/buildcraft/core/blueprints/BuildingSlot.java @@ -67,4 +67,6 @@ public abstract class BuildingSlot { public abstract int getEnergyRequirement(); + public abstract int buildTime(); + } diff --git a/common/buildcraft/core/blueprints/BuildingSlotBlock.java b/common/buildcraft/core/blueprints/BuildingSlotBlock.java index 8130e329..7089465a 100755 --- a/common/buildcraft/core/blueprints/BuildingSlotBlock.java +++ b/common/buildcraft/core/blueprints/BuildingSlotBlock.java @@ -176,4 +176,13 @@ public class BuildingSlotBlock extends BuildingSlot { return schematic.getEnergyRequirement(stackConsumed); } + @Override + public int buildTime() { + if (schematic == null) { + return 1; + } else { + return schematic.buildTime(); + } + } + } diff --git a/common/buildcraft/core/blueprints/BuildingSlotEntity.java b/common/buildcraft/core/blueprints/BuildingSlotEntity.java index 3efe9e80..bc161f8e 100755 --- a/common/buildcraft/core/blueprints/BuildingSlotEntity.java +++ b/common/buildcraft/core/blueprints/BuildingSlotEntity.java @@ -85,4 +85,9 @@ public class BuildingSlotEntity extends BuildingSlot { public int getEnergyRequirement() { return schematic.getEnergyRequirement(stackConsumed); } + + @Override + public int buildTime() { + return schematic.buildTime(); + } } diff --git a/common/buildcraft/factory/TileQuarry.java b/common/buildcraft/factory/TileQuarry.java index 520a3150..949679f9 100644 --- a/common/buildcraft/factory/TileQuarry.java +++ b/common/buildcraft/factory/TileQuarry.java @@ -167,9 +167,7 @@ public class TileQuarry extends TileAbstractBuilder implements IMachine { if (stage == Stage.BUILDING) { if (builder != null && !builder.isDone(this)) { - if (buildTracker.markTimeIfDelay(worldObj)) { - builder.buildNextSlot(worldObj, this, xCoord, yCoord, zCoord); - } + builder.buildNextSlot(worldObj, this, xCoord, yCoord, zCoord); } else { stage = Stage.IDLE; }