fixed detection of finished build process

This commit is contained in:
SpaceToad 2014-03-30 21:10:26 +02:00
parent f6e0d3a337
commit d00dcf0314
5 changed files with 53 additions and 7 deletions

View file

@ -16,9 +16,10 @@ import buildcraft.BuildCraftBuilders;
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 class BuildingItem {
return stacksToDisplay;
}
@Override
public boolean isDone() {
return isDone;
}
}

View file

@ -325,7 +325,7 @@ public class TileBuilder extends TileBuildCraft implements IBuilderInventory, IM
return;
}
if (bluePrintBuilder == null || bluePrintBuilder.done) {
if (bluePrintBuilder == null || bluePrintBuilder.isDone()) {
if (path != null && path.size() > 1) {
if (currentPathIterator == null) {
Iterator<BlockIndex> it = path.iterator();
@ -357,7 +357,7 @@ public class TileBuilder extends TileBuildCraft implements IBuilderInventory, IM
done = true;
}
} else {
if (bluePrintBuilder != null && bluePrintBuilder.done) {
if (bluePrintBuilder != null && bluePrintBuilder.isDone()) {
if (builderRobot != null) {
//builderRobot.markEndOfBlueprint(bluePrintBuilder);
}
@ -543,7 +543,11 @@ public class TileBuilder extends TileBuildCraft implements IBuilderInventory, IM
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 class TileBuilder extends TileBuildCraft implements IBuilderInventory, IM
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);

View file

@ -124,7 +124,7 @@ public class TileFiller extends TileBuildCraft implements IBuilderInventory, IMa
s.writeToWorld(context);
}
if (!done && s == null || currentTemplate.done) {
if (!done && s == null || currentTemplate.isDone()) {
done = true;
sendNetworkUpdate();
}

View file

@ -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 <IBuilder> buildersInAction = new ArrayList<IBuilder>();
public BptBuilderBase(BlueprintBase bluePrint, World world, int x, int y, int z) {
this.blueprint = bluePrint;
this.x = x;
@ -82,4 +86,20 @@ public abstract class BptBuilderBase implements IAreaProvider {
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;
}
}

View file

@ -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 ();
}