From d00dcf031412c6e9e6173502ca8f6649408e87bc Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Sun, 30 Mar 2014 21:10:26 +0200 Subject: [PATCH] fixed detection of finished build process --- common/buildcraft/builders/BuildingItem.java | 8 ++++++- common/buildcraft/builders/TileBuilder.java | 13 +++++++---- common/buildcraft/builders/TileFiller.java | 2 +- .../core/blueprints/BptBuilderBase.java | 22 ++++++++++++++++++- .../buildcraft/core/blueprints/IBuilder.java | 15 +++++++++++++ 5 files changed, 53 insertions(+), 7 deletions(-) create mode 100755 common/buildcraft/core/blueprints/IBuilder.java diff --git a/common/buildcraft/builders/BuildingItem.java b/common/buildcraft/builders/BuildingItem.java index 25ee07641a..ff6e73f873 100755 --- a/common/buildcraft/builders/BuildingItem.java +++ b/common/buildcraft/builders/BuildingItem.java @@ -16,9 +16,10 @@ import buildcraft.api.blueprints.IBuilderContext; import buildcraft.api.core.Position; import buildcraft.core.blueprints.BuildingSlot; +import buildcraft.core.blueprints.IBuilder; import buildcraft.core.network.NetworkData; -public class BuildingItem { +public class BuildingItem implements IBuilder { @NetworkData public Position origin, destination; @@ -143,4 +144,9 @@ public LinkedList getStacks () { return stacksToDisplay; } + + @Override + public boolean isDone() { + return isDone; + } } diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index 4e9d9650b7..f1bff6969c 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -325,7 +325,7 @@ public void iterateBpt() { return; } - if (bluePrintBuilder == null || bluePrintBuilder.done) { + if (bluePrintBuilder == null || bluePrintBuilder.isDone()) { if (path != null && path.size() > 1) { if (currentPathIterator == null) { Iterator it = path.iterator(); @@ -357,7 +357,7 @@ public void iterateBpt() { done = true; } } else { - if (bluePrintBuilder != null && bluePrintBuilder.done) { + if (bluePrintBuilder != null && bluePrintBuilder.isDone()) { if (builderRobot != null) { //builderRobot.markEndOfBlueprint(bluePrintBuilder); } @@ -543,7 +543,11 @@ public void updateEntity() { return; } - if ((bluePrintBuilder == null || bluePrintBuilder.done) + if (bluePrintBuilder != null) { + bluePrintBuilder.removeDoneBuilders(); + } + + if ((bluePrintBuilder == null || bluePrintBuilder.isDone()) && box.isInitialized() //&& (builderRobot == null || builderRobot.done()) ) { @@ -696,9 +700,10 @@ public void debugForceBlueprintCompletion () { i.stacksToBuild = slot.getRequirements(bluePrintBuilder.getContext()); buildingItems.add(i); RPCHandler.rpcBroadcastPlayers(this, "launchItem", i); + bluePrintBuilder.registerBuilder(i); } - if (slot == null || bluePrintBuilder.done) { + if (bluePrintBuilder.isDone()) { // TODO: find a way to confirm that all agents are done before // calling post processing. bluePrintBuilder.postProcessing(worldObj); diff --git a/common/buildcraft/builders/TileFiller.java b/common/buildcraft/builders/TileFiller.java index dd7d726692..c0cb798c95 100644 --- a/common/buildcraft/builders/TileFiller.java +++ b/common/buildcraft/builders/TileFiller.java @@ -124,7 +124,7 @@ public void updateEntity() { s.writeToWorld(context); } - if (!done && s == null || currentTemplate.done) { + if (!done && s == null || currentTemplate.isDone()) { done = true; sendNetworkUpdate(); } diff --git a/common/buildcraft/core/blueprints/BptBuilderBase.java b/common/buildcraft/core/blueprints/BptBuilderBase.java index ded6ea7eb5..6e474d3721 100644 --- a/common/buildcraft/core/blueprints/BptBuilderBase.java +++ b/common/buildcraft/core/blueprints/BptBuilderBase.java @@ -8,6 +8,8 @@ */ package buildcraft.core.blueprints; +import java.util.ArrayList; + import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import buildcraft.api.core.IAreaProvider; @@ -18,9 +20,11 @@ public abstract class BptBuilderBase implements IAreaProvider { public BlueprintBase blueprint; int x, y, z; - public boolean done; + protected boolean done; public BptContext context; + private ArrayList buildersInAction = new ArrayList(); + public BptBuilderBase(BlueprintBase bluePrint, World world, int x, int y, int z) { this.blueprint = bluePrint; this.x = x; @@ -82,4 +86,20 @@ public void postProcessing(World world) { public BptContext getContext() { return context; } + + public void registerBuilder (IBuilder builder) { + buildersInAction.add(builder); + } + + public void removeDoneBuilders () { + for (int i = buildersInAction.size() - 1; i >= 0; --i) { + if (buildersInAction.get(i).isDone()) { + buildersInAction.remove(i); + } + } + } + + public boolean isDone () { + return done && buildersInAction.size() == 0; + } } diff --git a/common/buildcraft/core/blueprints/IBuilder.java b/common/buildcraft/core/blueprints/IBuilder.java new file mode 100755 index 0000000000..ce5b4a5126 --- /dev/null +++ b/common/buildcraft/core/blueprints/IBuilder.java @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.core.blueprints; + +public interface IBuilder { + + public boolean isDone (); + +}