diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index b85258b6..b818d0b6 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -196,7 +196,22 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { if (initNBT != null) { - iterateBpt(); + iterateBpt(true); + + if (initNBT.hasKey("iterator")) { + BlockIndex expectedTo = new BlockIndex(initNBT.getCompoundTag("iterator")); + + while (!done && bluePrintBuilder != null && currentPathIterator != null) { + BlockIndex bi = new BlockIndex((int) currentPathIterator.ix, + (int) currentPathIterator.iy, (int) currentPathIterator.iz); + + if (bi.equals(expectedTo)) { + break; + } + + iterateBpt(true); + } + } if (bluePrintBuilder != null) { NBTTagCompound builderCpt = new NBTTagCompound(); @@ -204,13 +219,6 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { initNBT.getCompoundTag("builderState"), this); } - /* - * if (currentPathIterator != null) { NBTTagCompound iteratorNBT = - * new NBTTagCompound(); - * currentPathIterator.to.writeTo(iteratorNBT); - * nbttagcompound.setTag ("iterator", iteratorNBT); } - */ - initNBT = null; } @@ -244,7 +252,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { sendNetworkUpdate(); } - iterateBpt(); + iterateBpt(false); } public void createLasersForPath() { @@ -313,7 +321,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { } } - public void iterateBpt() { + public void iterateBpt(boolean forceIterate) { if (items[0] == null || !(items[0].getItem() instanceof ItemBlueprint)) { if (bluePrintBuilder != null) { bluePrintBuilder = null; @@ -332,7 +340,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { return; } - if (bluePrintBuilder == null || bluePrintBuilder.isDone(this)) { + if (bluePrintBuilder == null || (bluePrintBuilder.isDone(this) || forceIterate)) { if (path != null && path.size() > 1) { if (currentPathIterator == null) { Iterator it = path.iterator(); @@ -403,7 +411,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { if (i == 0) { RPCHandler.rpcBroadcastPlayers(this, "setItemRequirements", null, null); - iterateBpt(); + iterateBpt(false); } } @@ -416,7 +424,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { if (!worldObj.isRemote) { if (i == 0) { - iterateBpt(); + iterateBpt(false); done = false; } } @@ -509,7 +517,9 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { if (currentPathIterator != null) { NBTTagCompound iteratorNBT = new NBTTagCompound(); - currentPathIterator.to.writeTo(iteratorNBT); + new BlockIndex((int) currentPathIterator.ix, + (int) currentPathIterator.iy, (int) currentPathIterator.iz) + .writeTo(iteratorNBT); bptNBT.setTag ("iterator", iteratorNBT); } @@ -551,7 +561,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine { return; } - iterateBpt(); + iterateBpt(false); if (getWorld().getWorldInfo().getGameType() == GameType.CREATIVE) { build(); diff --git a/common/buildcraft/core/BlockIndex.java b/common/buildcraft/core/BlockIndex.java index 508f9543..2923eb49 100644 --- a/common/buildcraft/core/BlockIndex.java +++ b/common/buildcraft/core/BlockIndex.java @@ -32,7 +32,6 @@ public class BlockIndex implements Comparable { } public BlockIndex(NBTTagCompound c) { - this.x = c.getInteger("i"); this.y = c.getInteger("j"); this.z = c.getInteger("k"); @@ -44,24 +43,24 @@ public class BlockIndex implements Comparable { @Override public int compareTo(BlockIndex o) { - if (o.x < x) + if (o.x < x) { return 1; - else if (o.x > x) + } else if (o.x > x) { return -1; - else if (o.z < z) + } else if (o.z < z) { return 1; - else if (o.z > z) + } else if (o.z > z) { return -1; - else if (o.y < y) + } else if (o.y < y) { return 1; - else if (o.y > y) + } else if (o.y > y) { return -1; - else + } else { return 0; + } } public void writeTo(NBTTagCompound c) { - c.setInteger("i", x); c.setInteger("j", y); c.setInteger("k", z);