diff --git a/common/buildcraft/BuildCraftCore.java b/common/buildcraft/BuildCraftCore.java
index 3ae25d47..27701c3f 100644
--- a/common/buildcraft/BuildCraftCore.java
+++ b/common/buildcraft/BuildCraftCore.java
@@ -12,7 +12,6 @@ package buildcraft;
import buildcraft.api.core.BuildCraftAPI;
import buildcraft.api.core.IIconProvider;
import buildcraft.api.gates.ActionManager;
-import buildcraft.builders.blueprints.BlueprintDatabase;
import buildcraft.core.BlockIndex;
import buildcraft.core.BlockSpring;
import buildcraft.core.BuildCraftConfiguration;
@@ -173,7 +172,6 @@ public class BuildCraftCore {
bcLog.info("Copyright (c) SpaceToad, 2011");
bcLog.info("http://www.mod-buildcraft.com");
- BlueprintDatabase.configFolder = evt.getModConfigurationDirectory();
mainConfiguration = new BuildCraftConfiguration(new File(evt.getModConfigurationDirectory(), "buildcraft/main.conf"));
try {
mainConfiguration.load();
diff --git a/common/buildcraft/api/builder/BlockHandler.java b/common/buildcraft/api/builder/BlockHandler.java
deleted file mode 100644
index db91ce58..00000000
--- a/common/buildcraft/api/builder/BlockHandler.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package buildcraft.api.builder;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
-import net.minecraftforge.common.ForgeDirection;
-
-/**
- * BlockHandlers are used to serialize blocks for saving/loading from
- * Blueprints.
- *
- * @author CovertJaguar
- */
-public class BlockHandler {
-
- private static final Map handlers = new HashMap();
- private final int id;
-
- public static BlockHandler get(Item item) {
- if (item == null)
- return null;
- return get(item.itemID);
- }
-
- public static BlockHandler get(Block block) {
- if (block == null)
- return null;
- return get(block.blockID);
- }
-
- public static BlockHandler get(int id) {
- BlockHandler handler = handlers.get(id);
- if (handler == null) {
- handler = new BlockHandler(id);
- registerHandler(id, handler);
- }
- return handler;
- }
-
- public static void registerHandler(Block block, BlockHandler handler) {
- handlers.put(block.blockID, handler);
- }
-
- public static void registerHandler(Item item, BlockHandler handler) {
- handlers.put(item.itemID, handler);
- }
-
- public static void registerHandler(int id, BlockHandler handler) {
- handlers.put(id, handler);
- }
-
- public BlockHandler(int id) {
- this.id = id;
- }
-
- /**
- * By default we will ignore all blocks with Tile Entities.
- *
- * We will also skip any blocks that drop actual items like Ore blocks.
- */
- public boolean canSaveToSchematic(World world, int x, int y, int z) {
- if (!(Item.itemsList[id] instanceof ItemBlock))
- return false;
-
- Block block = Block.blocksList[id];
- if (block == null)
- return false;
-
- int meta = world.getBlockMetadata(x, y, z);
- try {
- if (block.idDropped(meta, null, 0) != id)
- return false;
-
- } catch (NullPointerException ex) {
- return false;
- }
- return !block.hasTileEntity(meta);
- }
-
- /**
- * By default we will ignore all blocks with Tile Entities.
- *
- * We will also ignore anything that's not a ItemBlock.
- *
- * We will also skip any blocks that drop actual items like Ore blocks.
- */
- public boolean canSaveToSchematic(ItemStack stack) {
- if (stack == null)
- return false;
- if (!(stack.getItem() instanceof ItemBlock))
- return false;
-
- if (id > Block.blocksList.length)
- return false;
-
- Block block = Block.blocksList[id];
- if (block == null)
- return false;
-
- try {
- if (block.idDropped(stack.getItemDamage(), null, 0) != id)
- return false;
- } catch (NullPointerException ex) {
- return false;
- }
- return !block.hasTileEntity(stack.getItemDamage());
- }
-
- /**
- * It is assumed that Blueprints always face North on save.
- *
- * Store any info you need to reproduce the block in the data tag.
- */
- public void saveToSchematic(World world, int x, int y, int z, NBTTagCompound data) {
- data.setByte("blockMeta", (byte) world.getBlockMetadata(x, y, z));
- }
-
- /**
- * It is assumed that Blueprints always face North on save.
- *
- * Store any info you need to reproduce the block from this ItemStack in the
- * data tag.
- */
- public void saveToSchematic(ItemStack stack, NBTTagCompound data) {
- if (stack.getHasSubtypes())
- data.setByte("blockMeta", (byte) stack.getItemDamage());
- }
-
- /**
- * Provide a list of all the items that must be present to build this
- * schematic.
- *
- * If you need axillary items like a painter or gate, list them as well.
- * Items will be consumed in the readBlockFromSchematic() function below.
- *
- * This default implementation will only work for simple blocks without tile
- * entities and will in fact break on Ore blocks as well. Which is why those
- * blocks can't be saved by default.
- */
- public List getCostForSchematic(NBTTagCompound data) {
- List cost = new ArrayList();
- Block block = Block.blocksList[id];
- cost.add(new ItemStack(block.idDropped(data.getByte("blockMeta"), BlueprintHelpers.RANDOM, 0), 1, block.damageDropped(data.getByte("blockMeta"))));
- return cost;
- }
-
- private boolean areItemsEqual(ItemStack stack1, ItemStack stack2) {
- if (stack1 == null || stack2 == null)
- return false;
- if (!stack1.isItemEqual(stack2))
- return false;
- if (!ItemStack.areItemStackTagsEqual(stack1, stack2))
- return false;
- return true;
-
- }
-
- /**
- * Can the block be placed currently or is it waiting on some other block to
- * be placed first?
- */
- public boolean canPlaceNow(World world, int x, int y, int z, ForgeDirection blueprintOrientation, NBTTagCompound data) {
- return true;
- }
-
- /**
- * This function handles the placement of the block in the world.
- *
- * The ForgeDirection parameter can be use to determine the orientation of
- * the blueprint. Blueprints are always saved facing North. This function
- * will have to rotate the block accordingly.
- *
- * The builder's inventory is passed in so you can consume the items you
- * need. Use them as you see fit.
- *
- * If the function returns false, the block was not placed. You should not
- * modify any ItemStack in the inventory until you have determined that
- * everything you require is present.
- */
- public boolean readBlockFromSchematic(World world, int x, int y, int z, ForgeDirection blueprintOrientation, NBTTagCompound data, IInventory builderInventory, EntityPlayer bcPlayer) {
- if (builderInventory != null) {
- List requiredItems = getCostForSchematic(data);
- List slotsToConsume = new ArrayList();
- for (ItemStack cost : requiredItems) {
- boolean found = false;
- for (int slot = 0; slot < builderInventory.getSizeInventory(); slot++) {
- if (areItemsEqual(builderInventory.getStackInSlot(slot), cost)) {
- slotsToConsume.add(slot);
- found = true;
- break;
- }
- }
- if (!found)
- return false;
- }
- for (Integer slot : slotsToConsume) {
- builderInventory.setInventorySlotContents(slot, BlueprintHelpers.consumeItem(builderInventory.getStackInSlot(slot)));
- }
- }
- return world.setBlock(x, y, z, Block.blocksList[id].blockID, data.getByte("blockMeta"), 3);
- }
-
- /**
- * Checks if the block matches the schematic.
- */
- public boolean doesBlockMatchSchematic(World world, int x, int y, int z, ForgeDirection blueprintOrientation, NBTTagCompound data) {
- if (id != world.getBlockId(x, y, z))
- return false;
-
- return !data.hasKey("blockMeta") || data.getByte("blockMeta") == world.getBlockMetadata(x, y, z);
- }
-}
diff --git a/common/buildcraft/api/builder/BlueprintHelpers.java b/common/buildcraft/api/builder/BlueprintHelpers.java
deleted file mode 100644
index 400e5a35..00000000
--- a/common/buildcraft/api/builder/BlueprintHelpers.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package buildcraft.api.builder;
-
-import java.util.Random;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.ForgeDirection;
-
-/**
- *
- * @author CovertJaguar
- */
-public class BlueprintHelpers {
-
- public static final Random RANDOM = new Random();
-
- /**
- * Takes a schematic orientation and blueprint orientation and returns the
- * orientation that should be used in the world. Admittedly this is not
- * sufficient for 24-point rotation. If you need something more complex, you
- * will have to handle it yourself.
- */
- public static ForgeDirection rotateOrientation(ForgeDirection schematicOrientation, ForgeDirection blueprintOrientation) {
- if (schematicOrientation == ForgeDirection.UP || schematicOrientation == ForgeDirection.DOWN) {
- return schematicOrientation;
- }
- if (blueprintOrientation == ForgeDirection.SOUTH) {
- return schematicOrientation.getOpposite();
- }
- if (blueprintOrientation == ForgeDirection.WEST) {
- return schematicOrientation.getRotation(ForgeDirection.DOWN);
- }
- if (blueprintOrientation == ForgeDirection.EAST) {
- return schematicOrientation.getRotation(ForgeDirection.UP);
- }
- return schematicOrientation;
- }
-
- /**
- * Takes an ItemStack and uses one. Replaces containers as needed.
- *
- * @return the new ItemStack
- */
- public static ItemStack consumeItem(ItemStack stack) {
- if (stack.stackSize == 1) {
- if (stack.getItem().hasContainerItem()) {
- return stack.getItem().getContainerItemStack(stack);
- } else {
- return null;
- }
- } else {
- stack.splitStack(1);
-
- return stack;
- }
- }
-}
diff --git a/common/buildcraft/builders/TileArchitect.java b/common/buildcraft/builders/TileArchitect.java
index d6133fb4..fa2a92e4 100644
--- a/common/buildcraft/builders/TileArchitect.java
+++ b/common/buildcraft/builders/TileArchitect.java
@@ -1,52 +1,47 @@
/**
-<<<<<<< HEAD
- * Copyright (c) SpaceToad, 2011 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
-=======
* Copyright (c) SpaceToad, 2011
* 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
->>>>>>> mc16
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
+
package buildcraft.builders;
-
-import buildcraft.BuildCraftBuilders;
-import buildcraft.api.core.IAreaProvider;
-import buildcraft.api.core.LaserKind;
-import buildcraft.builders.blueprints.Blueprint;
-import buildcraft.core.Box;
-import buildcraft.core.TileBuildCraft;
-import buildcraft.core.blueprints.BptBase;
-import buildcraft.core.blueprints.BptBlueprint;
-import buildcraft.core.blueprints.BptContext;
-import buildcraft.core.network.PacketUpdate;
-import buildcraft.core.network.TileNetworkData;
-import buildcraft.core.proxy.CoreProxy;
-import buildcraft.core.utils.Utils;
-import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.ForgeDirection;
-
+import buildcraft.BuildCraftBuilders;
+import buildcraft.api.core.IAreaProvider;
+import buildcraft.api.core.LaserKind;
+import buildcraft.core.Box;
+import buildcraft.core.TileBuildCraft;
+import buildcraft.core.blueprints.BptBase;
+import buildcraft.core.blueprints.BptBlueprint;
+import buildcraft.core.blueprints.BptContext;
+import buildcraft.core.blueprints.BptTemplate;
+import buildcraft.core.network.PacketUpdate;
+import buildcraft.core.network.TileNetworkData;
+import buildcraft.core.proxy.CoreProxy;
+import buildcraft.core.utils.Utils;
public class TileArchitect extends TileBuildCraft implements IInventory {
public @TileNetworkData
Box box = new Box();
+
private ItemStack items[] = new ItemStack[2];
+
private boolean isComputing = false;
public int computingTime = 0;
+
public @TileNetworkData
String name = "";
+
// Use that field to avoid creating several times the same template if
// they're the same!
private int lastBptId = 0;
@@ -146,23 +141,21 @@ public class TileArchitect extends TileBuildCraft implements IInventory {
mask0 = 1;
}
- Blueprint blueprint = new Blueprint(box.sizeX(), box.sizeY(), box.sizeZ());
+ BptBase result = new BptTemplate(box.sizeX(), box.sizeY(), box.sizeZ());
for (int x = box.xMin; x <= box.xMax; ++x) {
for (int y = box.yMin; y <= box.yMax; ++y) {
for (int z = box.zMin; z <= box.zMax; ++z) {
- if (!worldObj.isAirBlock(x, y, z)) {
- Block block = Block.blocksList[worldObj.getBlockId(x, y, z)];
- if (block != null) {
- blueprint.setSchematic(x - box.xMin, y - box.yMin, z - box.zMin, worldObj, block);
- }
+ if (worldObj.getBlockId(x, y, z) != 0) {
+ result.setBlockId(x - box.xMin, y - box.yMin, z - box.zMin, mask1);
+ } else {
+ result.setBlockId(x - box.xMin, y - box.yMin, z - box.zMin, mask0);
}
}
}
}
-// return blueprint;
- return null;
+ return result;
}
private BptBase createBptBlueprint() {
@@ -373,9 +366,11 @@ public class TileArchitect extends TileBuildCraft implements IInventory {
@Override
public void openChest() {
+
}
@Override
public void closeChest() {
+
}
}
diff --git a/common/buildcraft/builders/blueprints/BlockSchematic.java b/common/buildcraft/builders/blueprints/BlockSchematic.java
deleted file mode 100644
index ffd062ee..00000000
--- a/common/buildcraft/builders/blueprints/BlockSchematic.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package buildcraft.builders.blueprints;
-
-import buildcraft.api.builder.BlockHandler;
-import net.minecraft.block.Block;
-import net.minecraft.nbt.NBTTagCompound;
-
-/**
- *
- * @author CovertJaguar
- */
-public final class BlockSchematic extends Schematic {
-
- public static BlockSchematic create(NBTTagCompound nbt) {
- return null;
- }
-
- public static BlockSchematic create(Block block) {
- return new BlockSchematic(block);
- }
- public final Block block;
-
- private BlockSchematic(Block block) {
- super(block.blockID);
- this.block = block;
- }
-
- private BlockSchematic(String nbt) {
-// String blockName = nbt.getString("blockName");
- this((Block) null); // TODO: Add block from name code
- }
-
- @Override
- public BlockHandler getHandler() {
- return BlockHandler.get(block);
- }
-
- @Override
- public void writeToNBT(NBTTagCompound nbt) {
- super.writeToNBT(nbt);
- nbt.setString("schematicType", "block");
- nbt.setString("blockName", block.getUnlocalizedName());
- }
-}
diff --git a/common/buildcraft/builders/blueprints/Blueprint.java b/common/buildcraft/builders/blueprints/Blueprint.java
deleted file mode 100644
index 49e8622a..00000000
--- a/common/buildcraft/builders/blueprints/Blueprint.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/**
- * Copyright (c) SpaceToad, 2011-2012 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.builders.blueprints;
-
-import buildcraft.BuildCraftCore;
-import buildcraft.api.builder.BlockHandler;
-import buildcraft.core.inventory.StackHelper;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
-import net.minecraft.block.Block;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
-import net.minecraft.world.World;
-import net.minecraftforge.common.ForgeDirection;
-
-/**
- * This class is used to represent the data of the blueprint as it exists in the
- * world.
- *
- * @author CovertJaguar
- */
-public class Blueprint {
-
- private final String version = "Blueprint-2.0";
- private final UUID uuid;
- private String name;
- private String creator;
- private final Schematic[][][] schematics;
- public final int sizeX, sizeY, sizeZ;
- public int anchorX, anchorY, anchorZ;
- public ForgeDirection anchorOrientation = ForgeDirection.NORTH;
- private List costs;
-
- public Blueprint(int sizeX, int sizeY, int sizeZ) {
- this(sizeX, sizeY, sizeZ, UUID.randomUUID());
- }
-
- private Blueprint(int sizeX, int sizeY, int sizeZ, UUID uuid) {
- this.uuid = uuid;
- this.sizeX = sizeX;
- this.sizeY = sizeY;
- this.sizeZ = sizeZ;
- schematics = new Schematic[sizeX][sizeY][sizeZ];
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- private void setSchematic(int x, int y, int z, Schematic schematic) {
- if (schematic == null)
- return;
- schematic.x = x;
- schematic.y = y;
- schematic.z = z;
- schematics[x][y][z] = schematic;
- }
-
- public void setSchematic(int x, int y, int z, World world, Block block) {
- BlockHandler handler = BlockHandler.get(block);
- try {
- if (handler.canSaveToSchematic(world, x, y, z)) {
- Schematic schematic = BlockSchematic.create(block);
- handler.saveToSchematic(world, x, y, z, schematic.data);
- setSchematic(x, y, z, schematic);
- }
- } catch (Throwable error) {
- BuildCraftCore.bcLog.severe(String.format("Error while trying to save block [%s:%d] to blueprint, skipping.", block.getUnlocalizedName(), block.blockID));
- BuildCraftCore.bcLog.throwing(getClass().getCanonicalName(), "setBlock", error);
- }
- }
-
- public void setSchematic(int x, int y, int z, ItemStack item) {
- if (item == null)
- return;
- BlockHandler handler = BlockHandler.get(item.getItem());
- try {
- if (handler.canSaveToSchematic(item)) {
- Schematic schematic = ItemSchematic.create(item.getItem());
- handler.saveToSchematic(item, schematic.data);
- setSchematic(x, y, z, schematic);
- }
- } catch (Throwable error) {
- BuildCraftCore.bcLog.severe(String.format("Error while trying to save item [%s:%d] to blueprint, skipping.", item.getItem().getUnlocalizedName(), item.itemID));
- BuildCraftCore.bcLog.throwing(getClass().getCanonicalName(), "setBlock", error);
- }
- }
-
- /**
- * Helper function for creating Blueprints in code.
- *
- * Not recommended for use with complex blocks because it doesn't go through
- * a hander to get a BlockSchematic.
- *
- * @see TileQuarry
- */
- public void setSchematic(World world, int x, int y, int z, int id, int meta) {
- Block block = Block.blocksList[id];
- if (block == null) {
- return;
- }
- BlockSchematic schematic = BlockSchematic.create(block);
- schematic.data.setByte("blockMeta", (byte) meta);
- setSchematic(x, y, z, schematic);
- }
-
- public Schematic getBlock(int x, int y, int z) {
- return schematics[x][y][z];
- }
-
- public UUID getUUID() {
- return uuid;
- }
-
- /**
- * Returns a list of all blocks in the Blueprint in the order they should be
- * built.
- *
- * Be aware that changes to the Blueprint will not propagate to the list nor
- * will changes to the list propagate to the Blueprint.
- *
- * @return List
- */
- public LinkedList getBuildList() {
- LinkedList list = new LinkedList();
- for (int y = 0; y < sizeY; y++) {
- for (int x = 0; x < sizeX; x++) {
- for (int z = 0; z < sizeZ; z++) {
- if (schematics[x][y][z] != null)
- list.add(schematics[x][y][z]);
- }
- }
- }
- return list;
- }
-
- public List getCost() {
- if (costs != null)
- return costs;
- List stacks = new ArrayList();
- for (Schematic schematic : getBuildList()) {
- BlockHandler handler = BlockHandler.get(schematic.id);
- List requirements = handler.getCostForSchematic(schematic.data);
- for (ItemStack newStack : requirements) {
- if (newStack.stackSize <= 0)
- continue;
- for (ItemStack oldStack : stacks) {
- if (StackHelper.instance().canStacksMerge(oldStack, newStack)) {
- newStack.stackSize -= StackHelper.instance().mergeStacks(oldStack, newStack, true);
- }
- }
- if (newStack.stackSize > 0)
- stacks.add(newStack);
- }
- }
- costs = Collections.unmodifiableList(stacks);
- return costs;
- }
-
- public void writeToNBT(NBTTagCompound nbt) {
- NBTTagList blockList = new NBTTagList();
- for (int y = 0; y < sizeY; y++) {
- for (int x = 0; x < sizeX; x++) {
- for (int z = 0; z < sizeZ; z++) {
- if (schematics[x][y][z] == null)
- continue;
- NBTTagCompound blockNBT = new NBTTagCompound();
- schematics[x][y][z].writeToNBT(nbt);
- blockList.appendTag(blockNBT);
- }
- }
- }
- nbt.setTag("blocks", blockList);
- nbt.setLong("uuidMost", uuid.getMostSignificantBits());
- nbt.setLong("uuidLeast", uuid.getLeastSignificantBits());
- nbt.setString("name", name);
- nbt.setString("version", version);
- nbt.setString("creator", creator);
- nbt.setInteger("sizeX", sizeX);
- nbt.setInteger("sizeY", sizeY);
- nbt.setInteger("sizeZ", sizeZ);
- nbt.setInteger("anchorX", sizeX);
- nbt.setInteger("anchorY", sizeY);
- nbt.setInteger("anchorZ", sizeZ);
- nbt.setByte("anchorOrientation", (byte) anchorOrientation.ordinal());
- }
-
- public static Blueprint readFromNBT(NBTTagCompound nbt) {
- long most = nbt.getLong("uuidMost");
- long least = nbt.getLong("uuidLeast");
- int sizeX = nbt.getInteger("sizeX");
- int sizeY = nbt.getInteger("sizeY");
- int sizeZ = nbt.getInteger("sizeZ");
-
- Blueprint blueprint = new Blueprint(sizeX, sizeY, sizeZ, new UUID(most, least));
-
- blueprint.name = nbt.getString("name");
- blueprint.creator = nbt.getString("creator");
-
- blueprint.anchorX = nbt.getInteger("anchorX");
- blueprint.anchorY = nbt.getInteger("anchorY");
- blueprint.anchorZ = nbt.getInteger("anchorZ");
-
- blueprint.anchorOrientation = ForgeDirection.getOrientation(nbt.getByte("anchorOrientation"));
-
- NBTTagList blockList = nbt.getTagList("blocks");
- for (int i = 0; i < blockList.tagCount(); i++) {
- NBTTagCompound blockNBT = (NBTTagCompound) blockList.tagAt(i);
- Schematic schematic = Schematic.createSchematicFromNBT(blockNBT);
- blueprint.schematics[schematic.x][schematic.y][schematic.z] = schematic;
- }
- return blueprint;
- }
-
- /**
- * @return the creator
- */
- public String getCreator() {
- return creator;
- }
-
- /**
- * @param creator the creator to set
- */
- public void setCreator(String creator) {
- this.creator = creator;
- }
-}
diff --git a/common/buildcraft/builders/blueprints/BlueprintBuilder.java b/common/buildcraft/builders/blueprints/BlueprintBuilder.java
deleted file mode 100644
index 08f02d78..00000000
--- a/common/buildcraft/builders/blueprints/BlueprintBuilder.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) SpaceToad, 2011-2012
- * 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.builders.blueprints;
-
-import buildcraft.api.builder.BlockHandler;
-import buildcraft.builders.blueprints.BlueprintBuilder.SchematicBuilder;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.world.World;
-import net.minecraftforge.common.ForgeDirection;
-import static net.minecraftforge.common.ForgeDirection.EAST;
-
-/**
- *
- * @author CovertJaguar
- */
-public class BlueprintBuilder {
-
- public final Blueprint blueprint;
- public final ForgeDirection orientation;
- public final World worldObj;
- public final int x, y, z;
- private final IInventory inv;
- private final LinkedList buildList;
- private final List builders;
-
- public BlueprintBuilder(Blueprint blueprint, World world, int x, int y, int z, ForgeDirection orientation, IInventory inv) {
- this.blueprint = blueprint;
- this.orientation = orientation;
- this.worldObj = world;
- this.x = x;
- this.y = y;
- this.z = z;
- this.inv = inv;
- this.buildList = blueprint.getBuildList();
- builders = new ArrayList(buildList.size());
- for (Schematic schematic : buildList) {
- BlockHandler handler = schematic.getHandler();
- if (handler != null)
- builders.add(new SchematicBuilder(schematic, handler));
- }
- }
-
- public List getBuilders() {
- return Collections.unmodifiableList(builders);
- }
-
- public class SchematicBuilder {
-
- public final Schematic schematic;
- public final BlockHandler handler;
- private boolean complete;
-
- private SchematicBuilder(Schematic schematic, BlockHandler handler) {
- this.schematic = schematic;
- this.handler = handler;
- }
-
- public int getX() {
- switch (orientation) {
- case SOUTH:
- return x - schematic.x;
- case EAST:
- return x - schematic.z;
- case WEST:
- return x + schematic.z;
- default:
- return x + schematic.x;
- }
- }
-
- public int getY() {
- return y + schematic.y;
- }
-
- public int getZ() {
- switch (orientation) {
- case SOUTH:
- return z - schematic.z;
- case EAST:
- return z + schematic.x;
- case WEST:
- return z - schematic.x;
- default:
- return z + schematic.z;
- }
- }
-
- public boolean blockExists() {
- return handler.doesBlockMatchSchematic(worldObj, getX(), getY(), getZ(), orientation, schematic.data);
- }
-
- public boolean canBuild() {
- return handler.canPlaceNow(worldObj, getX(), getY(), getZ(), orientation, schematic.data);
- }
-
- public boolean build(EntityPlayer bcPlayer) {
-// if (blockExists()) {
-// markComplete();
-// return false;
-// }
-
-// if (!BlockUtil.canChangeBlock(worldObj, getX(), getY(), getZ()))
-// return false;
-
- if (!canBuild())
- return false;
-
- boolean built = handler.readBlockFromSchematic(worldObj, getX(), getY(), getZ(), orientation, schematic.data, inv, bcPlayer);
-
- if (built) {
- markComplete();
- }
-
- return built;
- }
-
- public boolean isComplete() {
- return complete;
- }
-
- public void markComplete() {
- complete = true;
- }
- }
-}
diff --git a/common/buildcraft/builders/blueprints/BlueprintDatabase.java b/common/buildcraft/builders/blueprints/BlueprintDatabase.java
deleted file mode 100644
index 6cf10cf2..00000000
--- a/common/buildcraft/builders/blueprints/BlueprintDatabase.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (c) SpaceToad, 2011-2012
- * 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.builders.blueprints;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.UUID;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import net.minecraft.nbt.CompressedStreamTools;
-import net.minecraft.nbt.NBTTagCompound;
-
-/**
- *
- * @author CovertJaguar
- */
-public class BlueprintDatabase {
-
- public static File configFolder;
- private static Map blueprints = new HashMap();
-
- public static Blueprint getBlueprint(UUID uuid) {
- Blueprint blueprint = blueprints.get(uuid);
- if (blueprint == null) {
- blueprint = loadBlueprint(uuid);
- addBlueprint(blueprint);
- }
- return blueprint;
- }
-
- public static void addBlueprint(Blueprint blueprint) {
- if (blueprint == null)
- return;
- blueprints.put(blueprint.getUUID(), blueprint);
- }
-
- private static File getBlueprintFolder() {
- File blueprintFolder = new File(configFolder, "buildcraft/blueprints/");
- if (!blueprintFolder.exists()) {
- blueprintFolder.mkdirs();
- }
- return blueprintFolder;
- }
-
- private static String uuidToString(UUID uuid) {
- return String.format(Locale.ENGLISH, "%x%x", uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
- }
-
- public static void saveBlueprint(Blueprint blueprint) {
- NBTTagCompound nbt = new NBTTagCompound();
- blueprint.writeToNBT(nbt);
-
- File blueprintFile = new File(getBlueprintFolder(), String.format(Locale.ENGLISH, "%x%x-%s.nbt", uuidToString(blueprint.getUUID()), blueprint.getName()));
-
- if (blueprintFile.exists())
- return;
-
- try {
- CompressedStreamTools.write(nbt, blueprintFile);
- } catch (IOException ex) {
- Logger.getLogger("Buildcraft").log(Level.SEVERE, String.format("Failed to save Blueprint file: %s %s", blueprintFile.getName(), ex.getMessage()));
- }
- }
-
- public static void saveBlueprints() {
- for (Blueprint blueprint : blueprints.values()) {
- saveBlueprint(blueprint);
- }
- }
-
- private static Blueprint loadBlueprint(final UUID uuid) {
- FilenameFilter filter = new FilenameFilter() {
- private String uuidString = uuidToString(uuid);
-
- @Override
- public boolean accept(File dir, String name) {
- return name.startsWith(uuidString);
- }
- };
-
- NBTTagCompound nbt = null;
- File blueprintFolder = getBlueprintFolder();
- for (File blueprintFile : blueprintFolder.listFiles(filter)) {
- try {
- nbt = CompressedStreamTools.read(blueprintFile);
- break;
- } catch (IOException ex) {
- Logger.getLogger("Buildcraft").log(Level.SEVERE, String.format("Failed to load Blueprint file: %s %s", blueprintFile.getName(), ex.getMessage()));
- }
- }
-
- if (nbt == null) {
- return null;
- }
- return Blueprint.readFromNBT(nbt);
- }
-
- public static void loadBlueprints() {
- FilenameFilter filter = new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return name.endsWith(".nbt");
- }
- };
- File blueprintFolder = getBlueprintFolder();
- for (File blueprintFile : blueprintFolder.listFiles(filter)) {
- try {
- NBTTagCompound nbt = CompressedStreamTools.read(blueprintFile);
- addBlueprint(Blueprint.readFromNBT(nbt));
- } catch (IOException ex) {
- Logger.getLogger("Buildcraft").log(Level.SEVERE, String.format("Failed to load Blueprint file: %s %s", blueprintFile.getName(), ex.getMessage()));
- }
- }
- }
-
- @SideOnly(Side.CLIENT)
- public static void sendBlueprintsToServer() {
- // TODO
- }
-}
diff --git a/common/buildcraft/builders/blueprints/ItemSchematic.java b/common/buildcraft/builders/blueprints/ItemSchematic.java
deleted file mode 100644
index 7567a325..00000000
--- a/common/buildcraft/builders/blueprints/ItemSchematic.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package buildcraft.builders.blueprints;
-
-import buildcraft.api.builder.BlockHandler;
-import net.minecraft.item.Item;
-import net.minecraft.nbt.NBTTagCompound;
-
-/**
- *
- * @author CovertJaguar
- */
-public final class ItemSchematic extends Schematic {
-
- public static ItemSchematic create(NBTTagCompound nbt) {
- return null;
- }
-
- public static ItemSchematic create(Item item) {
- return new ItemSchematic(item);
- }
- public final Item item;
-
- private ItemSchematic(Item item) {
- super(item.itemID);
- this.item = item;
- }
-
- private ItemSchematic(String itemName) {
-// String blockName = nbt.getString("blockName");
- this((Item) null); // TODO: Add item from name code
- }
-
- @Override
- public BlockHandler getHandler() {
- return BlockHandler.get(item);
- }
-
- @Override
- public void writeToNBT(NBTTagCompound nbt) {
- super.writeToNBT(nbt);
- nbt.setString("schematicType", "item");
- nbt.setString("itemName", item.getUnlocalizedName());
- }
-}
diff --git a/common/buildcraft/builders/blueprints/MaskSchematic.java b/common/buildcraft/builders/blueprints/MaskSchematic.java
deleted file mode 100644
index 45a05d40..00000000
--- a/common/buildcraft/builders/blueprints/MaskSchematic.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package buildcraft.builders.blueprints;
-
-import buildcraft.api.builder.BlockHandler;
-import net.minecraft.nbt.NBTTagCompound;
-
-/**
- *
- * @author CovertJaguar
- */
-public final class MaskSchematic extends Schematic {
-
- public static MaskSchematic create(NBTTagCompound nbt) {
- return new MaskSchematic();
- }
-
- public static MaskSchematic create() {
- return new MaskSchematic();
- }
-
- private MaskSchematic() {
- super(0);
- }
-
- @Override
- public BlockHandler getHandler() {
- return null;
- }
-
- @Override
- public void writeToNBT(NBTTagCompound nbt) {
- super.writeToNBT(nbt);
- nbt.setString("schematicType", "mask");
- }
-}
diff --git a/common/buildcraft/builders/blueprints/Schematic.java b/common/buildcraft/builders/blueprints/Schematic.java
deleted file mode 100644
index 042453b8..00000000
--- a/common/buildcraft/builders/blueprints/Schematic.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) SpaceToad, 2011-2012
- * 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.builders.blueprints;
-
-import buildcraft.api.builder.BlockHandler;
-import net.minecraft.nbt.NBTTagCompound;
-
-/**
- *
- * @author CovertJaguar
- */
-public abstract class Schematic {
-
- public final int id;
- public int x;
- public int y;
- public int z;
- public NBTTagCompound data = new NBTTagCompound();
-
- protected Schematic(int id) {
- this.id = id;
- }
-
- public abstract BlockHandler getHandler();
-
- public void writeToNBT(NBTTagCompound nbt) {
- nbt.setInteger("x", x);
- nbt.setInteger("y", y);
- nbt.setInteger("z", z);
- nbt.setCompoundTag("data", data);
- }
-
- public void readFromNBT(NBTTagCompound nbt) {
- x = nbt.getInteger("x");
- y = nbt.getInteger("y");
- z = nbt.getInteger("z");
- data = nbt.getCompoundTag("data");
- }
-
- public static Schematic createSchematicFromNBT(NBTTagCompound nbt) {
- String schematicType = nbt.getString("schematicType");
- Schematic schematic;
- if (schematicType.equals("block")) {
- schematic = BlockSchematic.create(nbt);
- } else if (schematicType.equals("item")) {
- schematic = ItemSchematic.create(nbt);
- } else {
- return null;
- }
- schematic.x = nbt.getInteger("x");
- schematic.y = nbt.getInteger("y");
- schematic.z = nbt.getInteger("z");
- schematic.data = nbt.getCompoundTag("userData");
- return schematic;
- }
-}
diff --git a/common/buildcraft/core/EntityRobot.java b/common/buildcraft/core/EntityRobot.java
index 2c01b917..0d291710 100644
--- a/common/buildcraft/core/EntityRobot.java
+++ b/common/buildcraft/core/EntityRobot.java
@@ -1,36 +1,63 @@
/**
- * Copyright (c) SpaceToad, 2011-2012 http://www.mod-buildcraft.com
+ * Copyright (c) SpaceToad, 2011-2012
+ * 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
+ * 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;
-import buildcraft.BuildCraftCore;
-import buildcraft.builders.blueprints.BlueprintBuilder.SchematicBuilder;
-import buildcraft.api.core.Position;
-import buildcraft.core.proxy.CoreProxy;
-import buildcraft.core.utils.BlockUtil;
-import com.google.common.io.ByteArrayDataInput;
-import com.google.common.io.ByteArrayDataOutput;
-import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
+
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
+import buildcraft.BuildCraftCore;
+import buildcraft.api.blueprints.BptSlotInfo;
+import buildcraft.api.core.Position;
+import buildcraft.core.blueprints.BptBuilderBase;
+import buildcraft.core.blueprints.BptContext;
+import buildcraft.core.blueprints.BptSlot;
+import buildcraft.core.blueprints.BptSlot.Mode;
+import buildcraft.core.proxy.CoreProxy;
+import buildcraft.core.utils.BlockUtil;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+
+import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
private Box box;
private int destX, destY, destZ;
+
EntityEnergyLaser laser;
- public LinkedList targets = new LinkedList();
+
+ public LinkedList targets = new LinkedList();
public static int MAX_TARGETS = 20;
public int wait = 0;
+ private class Action {
+
+ public Action(BptSlot slot, BptContext context) {
+ this.slot = slot;
+ this.context = context;
+ }
+
+ public Action(BptBuilderBase builder) {
+ this.builder = builder;
+ }
+
+ BptSlot slot;
+ BptBuilderBase builder;
+ BptContext context;
+ }
+
public EntityRobot(World world) {
super(world);
}
@@ -102,8 +129,6 @@ public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
@Override
public void onUpdate() {
- if (CoreProxy.proxy.isRenderWorld(worldObj))
- return;
move();
build();
@@ -174,31 +199,48 @@ public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
updateWait();
- if (wait <= 0 && !targets.isEmpty()) {
+ if (targets.size() > 0) {
- SchematicBuilder target = targets.peek();
- if (target.blockExists()) {
- target.markComplete();
- targets.pop();
- } else if (BlockUtil.canChangeBlock(worldObj, target.getX(), target.getY(), target.getZ())) {
+ Action a = targets.getFirst();
+ if (a.slot != null) {
+
+ BptSlot target = a.slot;
//System.out.printf("RobotChanging %d %d %d %s\n",target.x, target.y, target.z, target.mode);
- if (!worldObj.isAirBlock(target.getX(), target.getY(), target.getZ())) {
- BlockUtil.breakBlock(worldObj, target.getX(), target.getY(), target.getZ());
- } else {
+ if (wait <= 0 && BlockUtil.canChangeBlock(worldObj, target.x, target.y, target.z)) {
+
+ if (!CoreProxy.proxy.isRenderWorld(worldObj)) {
+
+ if (target.mode == Mode.ClearIfInvalid) {
+
+ if (!target.isValid(a.context)) {
+ worldObj.setBlock(target.x, target.y, target.z, 0, 0,3);
+ }
+
+ } else if (target.stackToUse != null) {
+
+ worldObj.setBlock(target.x, target.y, target.z, 0);
+ throw new RuntimeException("NOT IMPLEMENTED");
+ // target.stackToUse.getItem().onItemUse(target.stackToUse,
+ // CoreProxy.getBuildCraftPlayer(worldObj), worldObj, target.x, target.y - 1,
+ // target.z, 1);
+ } else {
+
+ try {
+ target.buildBlock(a.context);
+ } catch (Throwable t) {
+ // Defensive code against errors in implementers
+ t.printStackTrace();
+ BuildCraftCore.bcLog.throwing("EntityRobot", "update", t);
+ }
+ }
+ }
+
targets.pop();
- try {
- target.build(CoreProxy.proxy.getBuildCraftPlayer(worldObj, target.getX(), target.getY() + 2, target.getZ()));
- } catch (Throwable t) {
- target.markComplete();
- targets.pop();
- // Defensive code against errors in implementers
- t.printStackTrace();
- BuildCraftCore.bcLog.throwing("EntityRobot", "update", t);
- }
- if (!target.isComplete()) {
- targets.addLast(target);
- }
}
+
+ } else if (a.builder != null) {
+ a.builder.postProcessing(worldObj);
+ targets.pop();
}
}
}
@@ -220,10 +262,12 @@ public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
if (targets.size() > 0) {
- SchematicBuilder target = targets.getFirst();
+ Action a = targets.getFirst();
+ BptSlotInfo target = a.slot;
if (target != null) {
- laser.setPositions(new Position(posX, posY, posZ), new Position(target.getX() + 0.5, target.getY() + 0.5, target.getZ() + 0.5));
+
+ laser.setPositions(new Position(posX, posY, posZ), new Position(target.x + 0.5, target.y + 0.5, target.z + 0.5));
laser.show();
}
} else {
@@ -233,14 +277,16 @@ public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
laser.pushPower(((float) targets.size()) / ((float) MAX_TARGETS) * 4F);
}
- public boolean scheduleContruction(SchematicBuilder schematic) {
- if (!readyToBuild()) {
- return false;
+ public void scheduleContruction(BptSlot slot, BptContext context) {
+
+ if (slot != null) {
+ targets.add(new Action(slot, context));
+
}
- if (schematic != null && !schematic.blockExists()) {
- return targets.add(schematic);
- }
- return false;
+ }
+
+ public void markEndOfBlueprint(BptBuilderBase builder) {
+ targets.add(new Action(builder));
}
public boolean readyToBuild() {
@@ -252,15 +298,19 @@ public class EntityRobot extends Entity implements IEntityAdditionalSpawnData {
}
public void setBox(Box box) {
+
this.box = box;
setDestination((int) box.centerX(), (int) box.centerY(), (int) box.centerZ());
}
@Override
public void setDead() {
+
if (laser != null) {
laser.setDead();
}
+
super.setDead();
}
+
}
diff --git a/common/buildcraft/factory/TileQuarry.java b/common/buildcraft/factory/TileQuarry.java
index 0a3d2327..194651ec 100644
--- a/common/buildcraft/factory/TileQuarry.java
+++ b/common/buildcraft/factory/TileQuarry.java
@@ -7,11 +7,23 @@
*/
package buildcraft.factory;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.packet.Packet3Chat;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.ChunkCoordIntPair;
+import net.minecraftforge.common.ForgeChunkManager;
+import net.minecraftforge.common.ForgeChunkManager.Ticket;
+import net.minecraftforge.common.ForgeChunkManager.Type;
+import net.minecraftforge.common.ForgeDirection;
import buildcraft.BuildCraftCore;
import buildcraft.BuildCraftFactory;
-import buildcraft.builders.blueprints.Blueprint;
-import buildcraft.builders.blueprints.BlueprintBuilder;
-import buildcraft.builders.blueprints.BlueprintBuilder.SchematicBuilder;
import buildcraft.api.core.IAreaProvider;
import buildcraft.api.core.LaserKind;
import buildcraft.api.gates.IAction;
@@ -25,31 +37,20 @@ import buildcraft.core.EntityRobot;
import buildcraft.core.IBuilderInventory;
import buildcraft.core.IMachine;
import buildcraft.core.TileBuildCraft;
+import buildcraft.core.blueprints.BptBlueprint;
+import buildcraft.core.blueprints.BptBuilderBase;
+import buildcraft.core.blueprints.BptBuilderBlueprint;
import buildcraft.core.network.PacketUpdate;
import buildcraft.core.network.TileNetworkData;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BlockUtil;
import buildcraft.core.utils.Utils;
+
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+
import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.common.network.Player;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Set;
-import net.minecraft.entity.item.EntityItem;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.network.packet.Packet3Chat;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.world.ChunkCoordIntPair;
-import net.minecraftforge.common.ForgeChunkManager;
-import net.minecraftforge.common.ForgeChunkManager.Ticket;
-import net.minecraftforge.common.ForgeChunkManager.Type;
-import net.minecraftforge.common.ForgeDirection;
-import static net.minecraftforge.common.ForgeDirection.*;
public class TileQuarry extends TileBuildCraft implements IMachine, IPowerReceptor, IPipeConnection, IBuilderInventory {
@@ -66,8 +67,7 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
public @TileNetworkData
boolean builderDone = false;
public EntityRobot builder;
- private BlueprintBuilder blueprintBuilder;
- private ListIterator blueprintIterator;
+ BptBuilderBase bluePrintBuilder;
public EntityMechanicalArm arm;
public PowerHandler powerHandler;
boolean isDigging = false;
@@ -84,13 +84,13 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
}
public void createUtilsIfNeeded() {
- if (blueprintBuilder == null) {
+ if (bluePrintBuilder == null) {
if (!box.isInitialized()) {
setBoundaries(loadDefaultBoundaries);
}
- initializeBlueprintBuilder();
+ initializeBluePrintBuilder();
}
if (builderDone) {
@@ -125,8 +125,8 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
private void createArm() {
- worldObj.spawnEntityInWorld(new EntityMechanicalArm(worldObj, box.xMin + Utils.pipeMaxPos, yCoord + blueprintBuilder.blueprint.sizeY - 1
- + Utils.pipeMinPos, box.zMin + Utils.pipeMaxPos, blueprintBuilder.blueprint.sizeX - 2 + Utils.pipeMinPos * 2, blueprintBuilder.blueprint.sizeZ
+ worldObj.spawnEntityInWorld(new EntityMechanicalArm(worldObj, box.xMin + Utils.pipeMaxPos, yCoord + bluePrintBuilder.bluePrint.sizeY - 1
+ + Utils.pipeMinPos, box.zMin + Utils.pipeMaxPos, bluePrintBuilder.bluePrint.sizeX - 2 + Utils.pipeMinPos * 2, bluePrintBuilder.bluePrint.sizeZ
- 2 + Utils.pipeMinPos * 2, this));
}
@@ -137,13 +137,15 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
@Override
public void updateEntity() {
- super.updateEntity();
if (!isAlive && CoreProxy.proxy.isSimulating(worldObj)) {
+ super.updateEntity();
return;
}
if (!CoreProxy.proxy.isSimulating(worldObj) && isAlive) {
+ super.updateEntity();
return;
}
+ super.updateEntity();
if (inProcess) {
float energyToUse = 2 + powerHandler.getEnergyStored() / 500;
@@ -162,16 +164,23 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
createUtilsIfNeeded();
- if (blueprintBuilder != null) {
+ if (bluePrintBuilder != null) {
- builderDone = !blueprintIterator.hasNext();
+ builderDone = bluePrintBuilder.done;
if (!builderDone) {
+
buildFrame();
return;
- } else if (builder != null && builder.done()) {
- killBuilder();
- }
+ } else {
+
+ if (builder != null && builder.done()) {
+
+ box.deleteLasers();
+ builder.setDead();
+ builder = null;
+ }
+ }
}
if (builder == null) {
@@ -180,22 +189,14 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
}
- private void killBuilder() {
- box.deleteLasers();
- builder.setDead();
- builder = null;
- }
-
@Override
public void doWork(PowerHandler workProvider) {
}
protected void buildFrame() {
- if (!blueprintIterator.hasNext())
- return;
-
- if (powerHandler.useEnergy(25, 25, false) != 25)
+ powerHandler.configure(50, 100, 25, MAX_ENERGY);
+ if (powerHandler.useEnergy(25, 25, true) != 25)
return;
if (builder == null) {
@@ -204,12 +205,7 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
}
if (builder.readyToBuild()) {
- while (blueprintIterator.hasNext()) {
- if (builder.scheduleContruction(blueprintIterator.next())) {
- powerHandler.useEnergy(0, 25, true);
- break;
- }
- }
+ builder.scheduleContruction(bluePrintBuilder.getNextBlock(worldObj, this), bluePrintBuilder.getContext());
}
}
@@ -280,17 +276,17 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
private void createColumnVisitList() {
visitList.clear();
- Integer[][] columnHeights = new Integer[blueprintBuilder.blueprint.sizeX - 2][blueprintBuilder.blueprint.sizeZ - 2];
- boolean[][] blockedColumns = new boolean[blueprintBuilder.blueprint.sizeX - 2][blueprintBuilder.blueprint.sizeZ - 2];
+ Integer[][] columnHeights = new Integer[bluePrintBuilder.bluePrint.sizeX - 2][bluePrintBuilder.bluePrint.sizeZ - 2];
+ boolean[][] blockedColumns = new boolean[bluePrintBuilder.bluePrint.sizeX - 2][bluePrintBuilder.bluePrint.sizeZ - 2];
for (int searchY = yCoord + 3; searchY >= 0; --searchY) {
int startX, endX, incX;
if (searchY % 2 == 0) {
startX = 0;
- endX = blueprintBuilder.blueprint.sizeX - 2;
+ endX = bluePrintBuilder.bluePrint.sizeX - 2;
incX = 1;
} else {
- startX = blueprintBuilder.blueprint.sizeX - 3;
+ startX = bluePrintBuilder.bluePrint.sizeX - 3;
endX = -1;
incX = -1;
}
@@ -300,10 +296,10 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
if (searchX % 2 == searchY % 2) {
startZ = 0;
- endZ = blueprintBuilder.blueprint.sizeZ - 2;
+ endZ = bluePrintBuilder.bluePrint.sizeZ - 2;
incZ = 1;
} else {
- startZ = blueprintBuilder.blueprint.sizeZ - 3;
+ startZ = bluePrintBuilder.bluePrint.sizeZ - 3;
endZ = -1;
incZ = -1;
}
@@ -327,7 +323,7 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
visitList.add(new int[]{bx, by, bz});
}
// Stop at two planes - generally any obstructions will have been found and will force a recompute prior to this
- if (visitList.size() > blueprintBuilder.blueprint.sizeZ * blueprintBuilder.blueprint.sizeX * 2)
+ if (visitList.size() > bluePrintBuilder.bluePrint.sizeZ * bluePrintBuilder.bluePrint.sizeX * 2)
return;
}
}
@@ -598,31 +594,38 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
forceChunkLoading(chunkTicket);
}
- private void initializeBlueprintBuilder() {
- Blueprint blueprint = new Blueprint(box.sizeX(), box.sizeY(), box.sizeZ());
+ private void initializeBluePrintBuilder() {
+ BptBlueprint bluePrint = new BptBlueprint(box.sizeX(), box.sizeY(), box.sizeZ());
+
+ for (int i = 0; i < bluePrint.sizeX; ++i) {
+ for (int j = 0; j < bluePrint.sizeY; ++j) {
+ for (int k = 0; k < bluePrint.sizeZ; ++k) {
+ bluePrint.setBlockId(i, j, k, 0);
+ }
+ }
+ }
for (int it = 0; it < 2; it++) {
- for (int i = 0; i < blueprint.sizeX; ++i) {
- blueprint.setSchematic(worldObj, i, it * (box.sizeY() - 1), 0, BuildCraftFactory.frameBlock.blockID, 0);
- blueprint.setSchematic(worldObj, i, it * (box.sizeY() - 1), blueprint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID, 0);
+ for (int i = 0; i < bluePrint.sizeX; ++i) {
+ bluePrint.setBlockId(i, it * (box.sizeY() - 1), 0, BuildCraftFactory.frameBlock.blockID);
+ bluePrint.setBlockId(i, it * (box.sizeY() - 1), bluePrint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID);
}
- for (int k = 0; k < blueprint.sizeZ; ++k) {
- blueprint.setSchematic(worldObj, 0, it * (box.sizeY() - 1), k, BuildCraftFactory.frameBlock.blockID, 0);
- blueprint.setSchematic(worldObj, blueprint.sizeX - 1, it * (box.sizeY() - 1), k, BuildCraftFactory.frameBlock.blockID, 0);
+ for (int k = 0; k < bluePrint.sizeZ; ++k) {
+ bluePrint.setBlockId(0, it * (box.sizeY() - 1), k, BuildCraftFactory.frameBlock.blockID);
+ bluePrint.setBlockId(bluePrint.sizeX - 1, it * (box.sizeY() - 1), k, BuildCraftFactory.frameBlock.blockID);
}
}
for (int h = 1; h < box.sizeY(); ++h) {
- blueprint.setSchematic(worldObj, 0, h, 0, BuildCraftFactory.frameBlock.blockID, 0);
- blueprint.setSchematic(worldObj, 0, h, blueprint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID, 0);
- blueprint.setSchematic(worldObj, blueprint.sizeX - 1, h, 0, BuildCraftFactory.frameBlock.blockID, 0);
- blueprint.setSchematic(worldObj, blueprint.sizeX - 1, h, blueprint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID, 0);
+ bluePrint.setBlockId(0, h, 0, BuildCraftFactory.frameBlock.blockID);
+ bluePrint.setBlockId(0, h, bluePrint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID);
+ bluePrint.setBlockId(bluePrint.sizeX - 1, h, 0, BuildCraftFactory.frameBlock.blockID);
+ bluePrint.setBlockId(bluePrint.sizeX - 1, h, bluePrint.sizeZ - 1, BuildCraftFactory.frameBlock.blockID);
}
- blueprintBuilder = new BlueprintBuilder(blueprint, worldObj, box.xMin, yCoord, box.zMin, ForgeDirection.NORTH, null);
- blueprintIterator = blueprintBuilder.getBuilders().listIterator();
+ bluePrintBuilder = new BptBuilderBlueprint(bluePrint, worldObj, box.xMin, yCoord, box.zMin);
}
@Override
@@ -657,10 +660,11 @@ public class TileQuarry extends TileBuildCraft implements IMachine, IPowerRecept
public void reinitalize() {
builderDone = false;
- initializeBlueprintBuilder();
+ initializeBluePrintBuilder();
isDigging = true;
}
+
@Override
public PowerReceiver getPowerReceiver(ForgeDirection side) {
return powerHandler.getPowerReceiver();