diff --git a/common/buildcraft/api/blueprints/SchematicBlock.java b/common/buildcraft/api/blueprints/SchematicBlock.java index 41cb9c0d..87d5974c 100755 --- a/common/buildcraft/api/blueprints/SchematicBlock.java +++ b/common/buildcraft/api/blueprints/SchematicBlock.java @@ -213,12 +213,6 @@ public class SchematicBlock extends SchematicBlockBase implements Comparable tmpBuildList = new LinkedList(); + LinkedList tmpBuildCubeList = new LinkedList(); + LinkedList tmpBuildComplexList = new LinkedList(); for (int j = 0; j < blueprint.sizeY; ++j) { for (int i = 0; i < blueprint.sizeX; ++i) { @@ -110,7 +112,14 @@ public class BptBuilderBlueprint extends BptBuilderBase { if (!builtLocations.contains(new BlockIndex(xCoord, yCoord, zCoord))) { - tmpBuildList.add(b); + + if (((SchematicBlock) b.schematic).block.isOpaqueCube()) { + tmpBuildCubeList.add(b); + b.buildStage = 1; + } else { + tmpBuildComplexList.add(b); + b.buildStage = 2; + } } else { postProcessing.add(b); } @@ -118,9 +127,11 @@ public class BptBuilderBlueprint extends BptBuilderBase { } } - Collections.sort(tmpBuildList); + Collections.sort(tmpBuildCubeList); + Collections.sort(tmpBuildComplexList); - buildList.addAll(tmpBuildList); + buildList.addAll(tmpBuildCubeList); + buildList.addAll(tmpBuildComplexList); iterator = new BuildingSlotIterator(buildList); @@ -189,6 +200,11 @@ public class BptBuilderBlueprint extends BptBuilderBase { while (iterator.hasNext()) { BuildingSlotBlock slot = iterator.next(); + if (slot.buildStage > buildList.getFirst().buildStage) { + iterator.reset (); + return null; + } + boolean getNext = false; try { diff --git a/common/buildcraft/core/blueprints/BptBuilderTemplate.java b/common/buildcraft/core/blueprints/BptBuilderTemplate.java index 881e40c7..904e25e6 100644 --- a/common/buildcraft/core/blueprints/BptBuilderTemplate.java +++ b/common/buildcraft/core/blueprints/BptBuilderTemplate.java @@ -52,6 +52,7 @@ public class BptBuilderTemplate extends BptBuilderBase { b.y = yCoord; b.z = zCoord; b.mode = Mode.ClearIfInvalid; + b.buildStage = 0; buildList.add(b); } @@ -78,6 +79,7 @@ public class BptBuilderTemplate extends BptBuilderBase { b.z = zCoord; b.mode = Mode.Build; + b.buildStage = 1; buildList.add(b); } @@ -135,9 +137,12 @@ public class BptBuilderTemplate extends BptBuilderBase { while (iterator.hasNext()) { BuildingSlotBlock slot = iterator.next(); - if (slot == null) { - break; - } else if (slot.mode == Mode.ClearIfInvalid) { + if (slot.buildStage > buildList.getFirst().buildStage) { + iterator.reset (); + return null; + } + + if (slot.mode == Mode.ClearIfInvalid) { if (BlockUtil.isSoftBlock(world, slot.x, slot.y, slot.z) || BlockUtil.isUnbreakableBlock(world, slot.x, slot.y, slot.z)) { iterator.remove(); diff --git a/common/buildcraft/core/blueprints/BuildingSlotBlock.java b/common/buildcraft/core/blueprints/BuildingSlotBlock.java index cc1dc539..eaeb0114 100755 --- a/common/buildcraft/core/blueprints/BuildingSlotBlock.java +++ b/common/buildcraft/core/blueprints/BuildingSlotBlock.java @@ -31,6 +31,8 @@ public class BuildingSlotBlock extends BuildingSlot implements Comparable