Fixed issues with various schematics and their handling of item id translations.

The Schematic API has been updated to follow a pattern more explicit.
Part of #1745
This commit is contained in:
SpaceToad 2014-05-10 13:37:50 +02:00
parent 2738fbaef0
commit 98d2e2e2e6
53 changed files with 410 additions and 340 deletions

View file

@ -67,13 +67,13 @@ public class MappingRegistry {
return itemToId.get(item);
}
public int itemIdWorldToRegistry(int id) {
public int itemIdToRegistry(int id) {
Item item = Item.getItemById(id);
return getIdForItem(item);
}
public int itemIdRegistryToWorld(int id) {
public int itemIdToWorld(int id) {
Item item = getItemForId(id);
return Item.getIdFromItem(item);
@ -95,13 +95,13 @@ public class MappingRegistry {
return blockToId.get(block);
}
public int blockIdWorldToRegistry(int id) {
public int blockIdToRegistry(int id) {
Block block = Block.getBlockById(id);
return getIdForBlock(block);
}
public int blockIdRegistryToWorld(int id) {
public int blockIdToWorld(int id) {
Block block = getBlockForId(id);
return Block.getIdFromBlock(block);
@ -123,6 +123,44 @@ public class MappingRegistry {
return entityToId.get(entity);
}
/**
* Relocates a stack nbt from the world referential to the registry
* referential.
*/
public void stackToRegistry(NBTTagCompound nbt) {
Item item = Item.getItemById(nbt.getInteger("id"));
nbt.setInteger("id", getIdForItem(item));
}
/**
* Relocates a stack nbt from the registry referential to the world
* referential.
*/
public void stackToWorld(NBTTagCompound nbt) {
Item item = getItemForId(nbt.getInteger("id"));
nbt.setInteger("id", Item.getIdFromItem(item));
}
/**
* Relocates an inventory nbt from the world referential to the registry
* referential.
*/
public void inventoryToRegistry(NBTTagList nbt) {
for (int i = 0; i < nbt.tagCount(); ++i) {
stackToRegistry(nbt.getCompoundTagAt(i));
}
}
/**
* Relocates an inventory nbt from the registry referential to the world
* referential.
*/
public void inventoryToWorld(NBTTagList nbt) {
for (int i = 0; i < nbt.tagCount(); ++i) {
stackToWorld(nbt.getCompoundTagAt(i));
}
}
public void write (NBTTagCompound nbt) {
NBTTagList blocksMapping = new NBTTagList();

View file

@ -13,7 +13,6 @@ import java.util.LinkedList;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants;
@ -147,22 +146,26 @@ public abstract class Schematic {
}
/**
* Performs a transformations from world to blueprints. In particular, it should:
* - use the registry to map ids from world to blueprints
* - apply translations to all positions in the schematic to center in the
* blueprint referencial
* Applies translations to all positions in the schematic to center in the
* blueprint referencial
*/
public void transformToBlueprint(MappingRegistry registry, Translation transform) {
public void translateToSchematic(Translation transform) {
}
/**
* Performs a transformations from blueprints to worlds. In particular, it should:
* - use the registry to map ids from blueprints to world
* - apply translations to all positions in the schematic to center in the
* builder referencial
* Apply translations to all positions in the schematic to center in the
* builder referencial
*/
public void transformToWorld(MappingRegistry registry, Translation transform) {
public void translateToWorld(Translation transform) {
}
public void idsToSchematic(MappingRegistry registry) {
}
public void idsToWorld(MappingRegistry registry) {
}
@ -183,7 +186,7 @@ public abstract class Schematic {
* By default, if the block is a BlockContainer, tile information will be to
* save / load the block.
*/
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
}
@ -196,7 +199,7 @@ public abstract class Schematic {
}
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}
@ -217,41 +220,21 @@ public abstract class Schematic {
}
public void inventorySlotsToBlueprint (MappingRegistry registry, NBTTagCompound nbt) {
inventorySlotsToBlueprint(registry, nbt, "Items");
}
public void inventorySlotsToBlueprint (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
public void inventorySlotsToSchematic (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
if (!nbt.hasKey(nbtName)) {
return;
} else {
registry.inventoryToRegistry(nbt.getTagList(nbtName,
Constants.NBT.TAG_COMPOUND));
}
NBTTagList list = nbt.getTagList(nbtName,
Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound invSlot = list.getCompoundTagAt(i);
Item item = Item.getItemById(invSlot.getInteger ("id"));
invSlot.setInteger("id", registry.getIdForItem(item));
}
}
public void inventorySlotsToWorld (MappingRegistry registry, NBTTagCompound nbt) {
inventorySlotsToWorld (registry, nbt, "Items");
}
public void inventorySlotsToWorld (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
if (!nbt.hasKey(nbtName)) {
return;
}
NBTTagList list = nbt.getTagList(nbtName,
Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound invSlot = list.getCompoundTagAt(i);
Item item = registry.getItemForId(invSlot.getInteger ("id"));
invSlot.setInteger("id", Item.getIdFromItem(item));
} else {
registry.inventoryToWorld(nbt.getTagList(nbtName,
Constants.NBT.TAG_COMPOUND));
}
}

View file

@ -14,7 +14,6 @@ import java.util.LinkedList;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.BlockLiquid;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@ -71,13 +70,13 @@ public class SchematicBlock extends SchematicBlockBase {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
super.readRequirementsFromWorld(context, x, y, z);
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
super.writeRequirementsToSchematic(context, x, y, z);
if (block != null) {
ArrayList<ItemStack> req = block.getDrops(context.world(), x,
@ -92,6 +91,8 @@ public class SchematicBlock extends SchematicBlockBase {
@Override
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.writeToNBT(nbt, registry);
nbt.setInteger("blockId", registry.getIdForBlock(block));
nbt.setInteger("blockMeta", meta);
@ -100,8 +101,8 @@ public class SchematicBlock extends SchematicBlockBase {
for (ItemStack stack : storedRequirements) {
NBTTagCompound sub = new NBTTagCompound();
stack.writeToNBT(stack.writeToNBT(sub));
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
stack.writeToNBT(sub);
registry.stackToRegistry(sub);
rq.appendTag(sub);
}
@ -111,6 +112,8 @@ public class SchematicBlock extends SchematicBlockBase {
@Override
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.readFromNBT(nbt, registry);
block = registry.getBlockForId(nbt.getInteger("blockId"));
meta = nbt.getInteger("blockMeta");
@ -124,11 +127,7 @@ public class SchematicBlock extends SchematicBlockBase {
NBTTagCompound sub = rq.getCompoundTagAt(i);
if (sub.getInteger("id") >= 0) {
// Maps the id in the blueprint to the id in the world
sub.setInteger("id", Item.itemRegistry
.getIDForObject(registry.getItemForId(sub
.getInteger("id"))));
registry.stackToWorld(sub);
rqs.add(ItemStack.loadItemStackFromNBT(sub));
} else {
defaultPermission = BuildingPermission.CREATIVE_ONLY;

View file

@ -8,30 +8,6 @@
*/
package buildcraft.api.blueprints;
/**
* This class allow to specify specific behavior for blocks stored in
* blueprints:
*
* - what items needs to be used to create that block - how the block has to be
* built on the world - how to rotate the block - what extra data to store /
* load in the blueprint
*
* Default implementations of this can be seen in the package
* buildcraft.api.schematics. The class SchematicUtils provide some additional
* utilities.
*
* Blueprints perform "id translation" in case the block ids between a blueprint
* and the world installation are different. Mapping is done through the
* builder context.
*
* At blueprint load time, BuildCraft will check that each block id of the
* blueprint corresponds to the block id in the installation. If not, it will
* perform a search through the block list, and upon matching signature, it will
* translate all blocks ids of the blueprint to the installation ones. If no
* such block id is found, BuildCraft will assume that the block is not
* installed and will not load the blueprint.
*/
public abstract class SchematicBlockBase extends Schematic {
}

View file

@ -54,8 +54,7 @@ public class SchematicEntity extends Schematic {
}
@Override
public void transformToBlueprint(MappingRegistry registry,
Translation transform) {
public void translateToSchematic(Translation transform) {
NBTTagList nbttaglist = cpt.getTagList("Pos", 6);
Position pos = new Position(nbttaglist.func_150309_d(0),
nbttaglist.func_150309_d(1), nbttaglist.func_150309_d(2));
@ -63,12 +62,10 @@ public class SchematicEntity extends Schematic {
cpt.setTag("Pos",
this.newDoubleNBTList(pos.x, pos.y, pos.z));
inventorySlotsToBlueprint(registry, cpt);
}
@Override
public void transformToWorld(MappingRegistry registry, Translation transform) {
public void translateToWorld(Translation transform) {
NBTTagList nbttaglist = cpt.getTagList("Pos", 6);
Position pos = new Position(nbttaglist.func_150309_d(0),
nbttaglist.func_150309_d(1), nbttaglist.func_150309_d(2));
@ -76,8 +73,16 @@ public class SchematicEntity extends Schematic {
cpt.setTag("Pos",
this.newDoubleNBTList(pos.x, pos.y, pos.z));
}
inventorySlotsToWorld(registry, cpt);
@Override
public void idsToSchematic(MappingRegistry registry) {
inventorySlotsToSchematic(registry, cpt, "Items");
}
@Override
public void idsToWorld(MappingRegistry registry) {
inventorySlotsToWorld(registry, cpt, "Items");
}
@Override
@ -100,6 +105,8 @@ public class SchematicEntity extends Schematic {
@Override
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.writeToNBT(nbt, registry);
NBTTagList nbttaglist = cpt.getTagList("Pos", 6);
nbt.setInteger("entityId", registry.getIdForEntity(entity));
@ -119,6 +126,8 @@ public class SchematicEntity extends Schematic {
@Override
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.readFromNBT(nbt, registry);
cpt = nbt.getCompoundTag("entity");
NBTTagList rq = nbt.getTagList("rq",

View file

@ -29,13 +29,13 @@ public class SchematicTile extends SchematicBlock {
public NBTTagCompound cpt = new NBTTagCompound();
@Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) {
inventorySlotsToBlueprint(registry, cpt);
public void idsToSchematic(MappingRegistry registry) {
inventorySlotsToSchematic(registry, cpt, "Items");
}
@Override
public void transformToWorld(MappingRegistry registry, Translation transform) {
inventorySlotsToWorld(registry, cpt);
public void idsToWorld(MappingRegistry registry) {
inventorySlotsToWorld(registry, cpt, "Items");
}
/**
@ -59,8 +59,8 @@ public class SchematicTile extends SchematicBlock {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
super.readFromWorld(context, x, y, z);
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
super.writeToSchematic(context, x, y, z);
if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z);
@ -72,8 +72,8 @@ public class SchematicTile extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
super.readRequirementsFromWorld(context, x, y, z);
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
super.writeRequirementsToSchematic(context, x, y, z);
if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z);

View file

@ -65,10 +65,6 @@ import buildcraft.transport.TileFilteredBuffer;
import buildcraft.transport.TileGenericPipe;
import buildcraft.transport.TransportProxy;
import buildcraft.transport.WireIconProvider;
import buildcraft.transport.blueprints.BptItemPipeFilters;
import buildcraft.transport.blueprints.BptPipeIron;
import buildcraft.transport.blueprints.BptPipeWooden;
import buildcraft.transport.blueprints.SchematicPipe;
import buildcraft.transport.gates.GateExpansionPulsar;
import buildcraft.transport.gates.GateExpansionRedstoneFader;
import buildcraft.transport.gates.GateExpansionTimer;
@ -107,6 +103,11 @@ import buildcraft.transport.pipes.PipePowerQuartz;
import buildcraft.transport.pipes.PipePowerStone;
import buildcraft.transport.pipes.PipePowerWood;
import buildcraft.transport.pipes.PipeStructureCobblestone;
import buildcraft.transport.schematics.BptItemPipeFilters;
import buildcraft.transport.schematics.BptPipeIron;
import buildcraft.transport.schematics.BptPipeWooden;
import buildcraft.transport.schematics.SchematicFilteredBuffer;
import buildcraft.transport.schematics.SchematicPipe;
import buildcraft.transport.triggers.ActionEnergyPulsar;
import buildcraft.transport.triggers.ActionExtractionPreset;
import buildcraft.transport.triggers.ActionPipeColor;
@ -387,7 +388,6 @@ public class BuildCraftTransport extends BuildCraftMod {
CoreProxy.proxy.registerItem(robotStationItem);
}
for (PipeContents kind : PipeContents.values()) {
triggerPipe[kind.ordinal()] = new TriggerPipeContents(kind);
}
@ -437,6 +437,7 @@ public class BuildCraftTransport extends BuildCraftMod {
TransportProxy.proxy.registerTileEntities();
SchematicRegistry.registerSchematicBlock(genericPipeBlock, SchematicPipe.class);
SchematicRegistry.registerSchematicBlock(filteredBufferBlock, SchematicFilteredBuffer.class);
new BptPipeIron(pipeItemsIron);
new BptPipeIron(pipeFluidsIron);
@ -445,9 +446,9 @@ public class BuildCraftTransport extends BuildCraftMod {
new BptPipeWooden(pipeItemsWood);
new BptPipeWooden(pipeFluidsWood);
new BptPipeWooden(pipePowerWood);
new BptPipeWooden(pipeItemsEmerald);
new BptItemPipeFilters(pipeItemsDiamond);
new BptItemPipeFilters(pipeItemsEmerald);
ActionManager.registerTriggerProvider(new PipeTriggerProvider());

View file

@ -77,10 +77,6 @@ public class BlockBlueprintLibrary extends BlockContainer {
public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack stack) {
if (!world.isRemote && entityliving instanceof EntityPlayer) {
TileEntity tile = world.getTileEntity(i, j, k);
if (tile instanceof TileBlueprintLibrary) {
((TileBlueprintLibrary) tile).owner = ((EntityPlayer) entityliving).getDisplayName();
}
}
}

View file

@ -25,9 +25,4 @@ public final class BuildersProxy {
return !(block == null || !block.renderAsNormalBlock());
}
public static String getOwner(TileBlueprintLibrary library) {
return library.owner;
}
}

View file

@ -12,10 +12,8 @@ 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.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftBuilders;
@ -33,6 +31,7 @@ import buildcraft.core.blueprints.BlueprintBase;
import buildcraft.core.blueprints.BlueprintReadConfiguration;
import buildcraft.core.blueprints.BptContext;
import buildcraft.core.blueprints.Template;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide;
@ -51,7 +50,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@NetworkData
public BlueprintReadConfiguration readConfiguration = new BlueprintReadConfiguration();
private ItemStack[] items = new ItemStack[2];
private SimpleInventory inv = new SimpleInventory(2, "Architect", 1);
private BlueprintBase writingBlueprint;
private BptContext writingContext;
private BlockScanner blockScanner;
@ -83,7 +82,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
transform.y = -writingContext.surroundingBox().pMin().y;
transform.z = -writingContext.surroundingBox().pMin().z;
writingBlueprint.transformToBlueprint(transform);
writingBlueprint.translateToBlueprint(transform);
ForgeDirection o = ForgeDirection.values()[worldObj.getBlockMetadata(
xCoord, yCoord, zCoord)].getOpposite();
@ -162,22 +161,12 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override
public ItemStack getStackInSlot(int i) {
return items[i];
return inv.getStackInSlot(i);
}
@Override
public ItemStack decrStackSize(int i, int j) {
ItemStack result;
if (items[i] == null) {
result = null;
} else if (items[i].stackSize > j) {
result = items[i].splitStack(j);
} else {
ItemStack tmp = items[i];
items[i] = null;
result = tmp;
}
ItemStack result = inv.decrStackSize(i, j);
if (i == 0) {
initializeComputing();
@ -188,7 +177,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {
items[i] = itemstack;
inv.setInventorySlotContents(i, itemstack);
if (i == 0) {
initializeComputing();
@ -197,13 +186,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
if (items[slot] == null) {
return null;
}
ItemStack toReturn = items[slot];
items[slot] = null;
return toReturn;
return inv.getStackInSlotOnClosing(slot);
}
@Override
@ -236,18 +219,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
box.initialize(nbttagcompound.getCompoundTag("box"));
}
NBTTagList nbttaglist = nbttagcompound.getTagList("Items",
Constants.NBT.TAG_COMPOUND);
items = new ItemStack[getSizeInventory()];
for (int i = 0; i < nbttaglist.tagCount(); i++) {
NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);
int j = nbttagcompound1.getByte("Slot") & 0xff;
if (j >= 0 && j < items.length) {
items[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
}
}
inv.readFromNBT(nbttagcompound);
name = nbttagcompound.getString("name");
currentAuthorName = nbttagcompound.getString("lastAuthor");
@ -275,17 +247,8 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
nbttagcompound.setTag("box", boxStore);
}
NBTTagList nbttaglist = new NBTTagList();
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setByte("Slot", (byte) i);
items[i].writeToNBT(nbttagcompound1);
nbttaglist.appendTag(nbttagcompound1);
}
}
inv.writeToNBT(nbttagcompound);
nbttagcompound.setTag("Items", nbttaglist);
nbttagcompound.setString("name", name);
nbttagcompound.setString("lastAuthor", currentAuthorName);
@ -308,16 +271,17 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
if (!box.isInitialized()) {
return;
} else if (blockScanner == null) {
if (items[0] != null && items[0].getItem() instanceof ItemBlueprint && items[1] == null) {
if (!box.isInitialized() || items[1] != null) {
if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint
&& getStackInSlot(1) == null) {
if (!box.isInitialized() || getStackInSlot(1) != null) {
return;
}
blockScanner = new BlockScanner(box, getWorld(), SCANNER_ITERATION);
if (items[0].getItem() instanceof ItemBlueprintStandard) {
if (getStackInSlot(0).getItem() instanceof ItemBlueprintStandard) {
writingBlueprint = new Blueprint(box.sizeX(), box.sizeY(), box.sizeZ());
} else if (items[0].getItem() instanceof ItemBlueprintTemplate) {
} else if (getStackInSlot(0).getItem() instanceof ItemBlueprintTemplate) {
writingBlueprint = new Template(box.sizeX(), box.sizeY(), box.sizeZ());
}

View file

@ -18,12 +18,11 @@ import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import buildcraft.BuildCraftBuilders;
import buildcraft.api.core.NetworkData;
import buildcraft.builders.blueprints.BlueprintId;
import buildcraft.builders.blueprints.BlueprintId.Kind;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.blueprints.BlueprintBase;
import buildcraft.core.inventory.InvUtils;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide;
@ -36,14 +35,11 @@ import buildcraft.core.network.RPCSide;
public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
private static final int PROGRESS_TIME = 100;
public ItemStack[] stack = new ItemStack[4];
public SimpleInventory inv = new SimpleInventory(4, "Blueprint Library", 1);
public int progressIn = 0;
public int progressOut = 0;
@NetworkData
public String owner = "";
public ArrayList<BlueprintId> currentPage;
public int selected = -1;
@ -105,18 +101,14 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
public void readFromNBT(NBTTagCompound nbttagcompound) {
super.readFromNBT(nbttagcompound);
owner = nbttagcompound.getString("owner");
InvUtils.readStacksFromNBT(nbttagcompound, "stack", stack);
inv.readFromNBT(nbttagcompound);
}
@Override
public void writeToNBT(NBTTagCompound nbttagcompound) {
super.writeToNBT(nbttagcompound);
nbttagcompound.setString("owner", owner);
InvUtils.writeStacksToNBT(nbttagcompound, "stack", stack);
inv.writeToNBT(nbttagcompound);
}
@Override
@ -126,30 +118,20 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
@Override
public ItemStack getStackInSlot(int i) {
return stack[i];
return inv.getStackInSlot(i);
}
@Override
public ItemStack decrStackSize(int i, int j) {
if (stack[i] == null) {
return null;
}
ItemStack res = stack[i].splitStack(j);
if (stack[i].stackSize == 0) {
stack[i] = null;
}
return res;
return inv.decrStackSize(i, j);
}
@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {
stack[i] = itemstack;
inv.setInventorySlotContents(i, itemstack);
if (i == 0) {
if (stack[0] != null && stack[0].getItem() instanceof ItemBlueprint) {
if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint) {
progressIn = 1;
} else {
progressIn = 0;
@ -157,7 +139,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
}
if (i == 2) {
if (stack[2] != null && stack[2].getItem() instanceof ItemBlueprint) {
if (getStackInSlot(2) != null && getStackInSlot(2).getItem() instanceof ItemBlueprint) {
progressOut = 1;
} else {
progressOut = 0;
@ -167,13 +149,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
if (stack[slot] == null) {
return null;
}
ItemStack toReturn = stack[slot];
stack[slot] = null;
return toReturn;
return inv.getStackInSlotOnClosing(slot);
}
@Override
@ -222,11 +198,11 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
// On progress IN, we'll download the blueprint from the server to the
// client, and then store it to the client.
if (progressIn == 100 && stack[1] == null) {
setInventorySlotContents(1, stack[0]);
if (progressIn == 100 && getStackInSlot(1) == null) {
setInventorySlotContents(1, getStackInSlot(0));
setInventorySlotContents(0, null);
BlueprintBase bpt = ItemBlueprint.loadBlueprint(stack [1]);
BlueprintBase bpt = ItemBlueprint.loadBlueprint(getStackInSlot(1));
if (bpt != null && uploadingPlayer != null) {
RPCHandler.rpcPlayer(this, "downloadBlueprintToClient",
@ -235,7 +211,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
}
}
if (progressOut == 100 && stack[3] == null) {
if (progressOut == 100 && getStackInSlot(3) == null) {
RPCHandler.rpcPlayer(this, "requestSelectedBlueprint",
downloadingPlayer);
progressOut = 0;
@ -274,7 +250,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
BuildCraftBuilders.serverDB.add(bpt);
setInventorySlotContents(3, bpt.getStack());
} else {
setInventorySlotContents(3, stack[2]);
setInventorySlotContents(3, getStackInSlot(2));
}
setInventorySlotContents(2, null);
@ -307,13 +283,13 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
}
private boolean isOuputConsistent () {
if (selected == -1 || stack [2] == null) {
if (selected == -1 || getStackInSlot(2) == null) {
return false;
}
return (stack [2].getItem() instanceof ItemBlueprintStandard
return (getStackInSlot(2).getItem() instanceof ItemBlueprintStandard
&& currentPage.get(selected).kind == Kind.Blueprint) ||
(stack [2].getItem() instanceof ItemBlueprintTemplate
(getStackInSlot(2).getItem() instanceof ItemBlueprintTemplate
&& currentPage.get(selected).kind == Kind.Template);
}
}

View file

@ -41,10 +41,10 @@ import buildcraft.core.blueprints.BptBuilderBlueprint;
import buildcraft.core.blueprints.BptBuilderTemplate;
import buildcraft.core.blueprints.BptContext;
import buildcraft.core.inventory.InvUtils;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide;
import buildcraft.core.utils.Utils;
public class TileBuilder extends TileAbstractBuilder implements IMachine {
@ -54,7 +54,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public Box box = new Box();
public PathIterator currentPathIterator;
private final ItemStack[] items = new ItemStack[28];
private SimpleInventory inv = new SimpleInventory(28, "Builder", 64);
private BptBuilderBase bluePrintBuilder;
private LinkedList<BlockIndex> path;
private LinkedList<ItemStack> requiredToBuild;
@ -273,7 +273,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
BlueprintBase bpt = null;
try {
bpt = ItemBlueprint.loadBlueprint(items [0]);
bpt = ItemBlueprint.loadBlueprint(getStackInSlot(0));
} catch (Throwable t) {
setInventorySlotContents(0, null);
t.printStackTrace();
@ -313,11 +313,11 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
transform.y = y - bpt.anchorY;
transform.z = z - bpt.anchorZ;
bpt.transformToWorld(transform);
bpt.translateToWorld(transform);
if (items[0].getItem() instanceof ItemBlueprintStandard) {
if (getStackInSlot(0).getItem() instanceof ItemBlueprintStandard) {
return new BptBuilderBlueprint((Blueprint) bpt, worldObj, x, y, z);
} else if (items[0].getItem() instanceof ItemBlueprintTemplate) {
} else if (getStackInSlot(0).getItem() instanceof ItemBlueprintTemplate) {
return new BptBuilderTemplate(bpt, worldObj, x, y, z);
} else {
return null;
@ -325,7 +325,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
}
public void iterateBpt(boolean forceIterate) {
if (items[0] == null || !(items[0].getItem() instanceof ItemBlueprint)) {
if (getStackInSlot(0) == null || !(getStackInSlot(0).getItem() instanceof ItemBlueprint)) {
if (bluePrintBuilder != null) {
bluePrintBuilder = null;
}
@ -399,44 +399,35 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
if (done) {
boolean dropBlueprint = true;
for (int i = 1; i < items.length; ++i) {
if (items[i] == null) {
items[i] = items[0];
for (int i = 1; i < getSizeInventory(); ++i) {
if (getStackInSlot(i) == null) {
setInventorySlotContents(i, getStackInSlot(0));
dropBlueprint = false;
break;
}
}
if (dropBlueprint) {
InvUtils.dropItems(getWorld(), items[0], xCoord, yCoord, zCoord);
InvUtils.dropItems(getWorld(), getStackInSlot(0), xCoord, yCoord, zCoord);
}
items[0] = null;
setInventorySlotContents(0, null);
box.reset();
}
}
@Override
public int getSizeInventory() {
return items.length;
return inv.getSizeInventory();
}
@Override
public ItemStack getStackInSlot(int i) {
return items[i];
return inv.getStackInSlot(i);
}
@Override
public ItemStack decrStackSize(int i, int j) {
ItemStack result;
if (items[i] == null) {
result = null;
} else if (items[i].stackSize > j) {
result = items[i].splitStack(j);
} else {
ItemStack tmp = items[i];
items[i] = null;
result = tmp;
}
ItemStack result = inv.decrStackSize(i, j);
if (!worldObj.isRemote) {
if (i == 0) {
@ -451,7 +442,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {
items[i] = itemstack;
inv.setInventorySlotContents(i, itemstack);
if (!worldObj.isRemote) {
if (i == 0) {
@ -463,12 +454,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
if (items[slot] == null) {
return null;
}
ItemStack toReturn = items[slot];
items[slot] = null;
return toReturn;
return inv.getStackInSlotOnClosing(slot);
}
@Override
@ -490,7 +476,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public void readFromNBT(NBTTagCompound nbttagcompound) {
super.readFromNBT(nbttagcompound);
Utils.readStacksFromNBT(nbttagcompound, "Items", items);
inv.readFromNBT(nbttagcompound);
if (nbttagcompound.hasKey("box")) {
box.initialize(nbttagcompound.getCompoundTag("box"));
@ -516,7 +502,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public void writeToNBT(NBTTagCompound nbttagcompound) {
super.writeToNBT(nbttagcompound);
Utils.writeStacksToNBT(nbttagcompound, "Items", items);
inv.writeToNBT(nbttagcompound);
if (box.isInitialized()) {
NBTTagCompound boxStore = new NBTTagCompound();

View file

@ -26,7 +26,7 @@ public class SchematicBed extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -24,7 +24,7 @@ public class SchematicCactus extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -29,7 +29,7 @@ public class SchematicCustomStack extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
}

View file

@ -25,7 +25,7 @@ public class SchematicDirt extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -35,7 +35,7 @@ public class SchematicDoor extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@ -83,8 +83,8 @@ public class SchematicDoor extends SchematicBlock {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
super.readFromWorld(context, x, y, z);
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
super.writeToSchematic(context, x, y, z);
if ((meta & 8) == 0) {
upperMeta = context.world().getBlockMetadata(x, y + 1, z);

View file

@ -29,7 +29,7 @@ public class SchematicEnderChest extends SchematicRotateMeta {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -25,7 +25,7 @@ public class SchematicFarmland extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -24,7 +24,7 @@ public class SchematicFire extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
}

View file

@ -33,7 +33,7 @@ public class SchematicFluid extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -25,7 +25,7 @@ public class SchematicGravel extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -14,8 +14,8 @@ import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicEntity;
import buildcraft.api.blueprints.Translation;
import buildcraft.api.core.Position;
@ -29,8 +29,8 @@ public class SchematicHanging extends SchematicEntity {
}
@Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) {
super.transformToBlueprint(registry, transform);
public void translateToSchematic(Translation transform) {
super.translateToSchematic(transform);
Position pos = new Position (cpt.getInteger("TileX"), cpt.getInteger("TileY"), cpt.getInteger("TileZ"));
pos = transform.translate(pos);
@ -40,8 +40,8 @@ public class SchematicHanging extends SchematicEntity {
}
@Override
public void transformToWorld(MappingRegistry registry, Translation transform) {
super.transformToWorld(registry, transform);
public void translateToWorld(Translation transform) {
super.translateToWorld(transform);
Position pos = new Position (cpt.getInteger("TileX"), cpt.getInteger("TileY"), cpt.getInteger("TileZ"));
pos = transform.translate(pos);

View file

@ -28,7 +28,7 @@ public class SchematicIgnore extends SchematicBlock {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
}
@ -38,7 +38,7 @@ public class SchematicIgnore extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -23,7 +23,7 @@ public class SchematicIgnoreMeta extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -13,8 +13,8 @@ import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicEntity;
import buildcraft.api.blueprints.Translation;
import buildcraft.api.core.Position;
@ -28,8 +28,8 @@ public class SchematicMinecart extends SchematicEntity {
}
@Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) {
super.transformToBlueprint(registry, transform);
public void translateToSchematic(Translation transform) {
super.translateToSchematic(transform);
NBTTagList nbttaglist = cpt.getTagList("Pos", 6);
Position pos = new Position(nbttaglist.func_150309_d(0),
@ -41,8 +41,8 @@ public class SchematicMinecart extends SchematicEntity {
@Override
public void transformToWorld(MappingRegistry registry, Translation transform) {
super.transformToWorld(registry, transform);
public void translateToWorld(Translation transform) {
super.translateToWorld(transform);
NBTTagList nbttaglist = cpt.getTagList("Pos", 6);
Position pos = new Position(nbttaglist.func_150309_d(0),

View file

@ -24,7 +24,7 @@ public class SchematicPortal extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -23,7 +23,7 @@ public class SchematicPumpkin extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -29,7 +29,7 @@ public class SchematicRedstoneDiode extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -25,7 +25,7 @@ public class SchematicRedstoneLamp extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -29,7 +29,7 @@ public class SchematicRedstoneWire extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -30,7 +30,7 @@ public class SchematicSeeds extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -32,7 +32,7 @@ public class SchematicSign extends SchematicTile {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}

View file

@ -23,7 +23,7 @@ public class SchematicStairs extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -25,7 +25,7 @@ public class SchematicStone extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -55,20 +55,20 @@ public class Blueprint extends BlueprintBase {
}
@Override
public void transformToBlueprint(Translation transform) {
super.transformToBlueprint(transform);
public void translateToBlueprint(Translation transform) {
super.translateToBlueprint(transform);
for (SchematicEntity e : entities) {
e.transformToBlueprint(mapping, transform);
e.translateToSchematic(transform);
}
}
@Override
public void transformToWorld(Translation transform) {
super.transformToWorld(transform);
public void translateToWorld(Translation transform) {
super.translateToWorld(transform);
for (SchematicEntity e : entities) {
e.transformToWorld(mapping, transform);
e.translateToWorld(transform);
}
}
@ -106,8 +106,8 @@ public class Blueprint extends BlueprintBase {
}
try {
slot.readFromWorld(context, x, y, z);
slot.readRequirementsFromWorld(context, x, y, z);
slot.writeToSchematic(context, x, y, z);
slot.writeRequirementsToSchematic(context, x, y, z);
contents[posX][posY][posZ] = slot;
} catch (Throwable t) {
// Defensive code against errors in implementers
@ -162,6 +162,7 @@ public class Blueprint extends BlueprintBase {
NBTTagCompound cpt = new NBTTagCompound();
if (contents [x][y][z] != null) {
contents[x][y][z].idsToSchematic(mapping);
contents[x][y][z].writeToNBT(cpt, mapping);
}
@ -176,6 +177,7 @@ public class Blueprint extends BlueprintBase {
for (SchematicEntity s : entities) {
NBTTagCompound subNBT = new NBTTagCompound();
s.idsToSchematic(mapping);
s.writeToNBT(subNBT, mapping);
entitiesNBT.appendTag(subNBT);
}
@ -208,6 +210,7 @@ public class Blueprint extends BlueprintBase {
if (block != null) {
contents[x][y][z] = SchematicRegistry.newSchematicBlock(block);
contents[x][y][z].readFromNBT(cpt, mapping);
contents[x][y][z].idsToWorld(mapping);
switch (contents[x][y][z].getBuildingPermission()) {
case ALL:
@ -244,6 +247,7 @@ public class Blueprint extends BlueprintBase {
if (entity != null) {
SchematicEntity s = SchematicRegistry.newSchematicEntity(entity);
s.readFromNBT(cpt, mapping);
s.idsToWorld(mapping);
entities.add(s);
} else {
isComplete = false;

View file

@ -59,24 +59,24 @@ public abstract class BlueprintBase {
anchorZ = 0;
}
public void transformToBlueprint(Translation transform) {
public void translateToBlueprint(Translation transform) {
for (int x = 0; x < sizeX; ++x) {
for (int y = 0; y < sizeY; ++y) {
for (int z = 0; z < sizeZ; ++z) {
if (contents [x][y][z] != null) {
contents [x][y][z].transformToBlueprint(mapping, transform);
contents[x][y][z].translateToSchematic(transform);
}
}
}
}
}
public void transformToWorld(Translation transform) {
public void translateToWorld(Translation transform) {
for (int x = 0; x < sizeX; ++x) {
for (int y = 0; y < sizeY; ++y) {
for (int z = 0; z < sizeZ; ++z) {
if (contents [x][y][z] != null) {
contents [x][y][z].transformToWorld(mapping, transform);
contents[x][y][z].translateToWorld(transform);
}
}
}

View file

@ -63,7 +63,7 @@ public class RealBlueprintDeployer extends BlueprintDeployer {
transform.y = y - bpt.anchorY;
transform.z = z - bpt.anchorZ;
bpt.transformToWorld(transform);
bpt.translateToWorld(transform);
new BptBuilderBlueprint(bpt, world, x, y, z).deploy();
}

View file

@ -97,7 +97,13 @@ public class SimpleInventory implements IInventory, INBTTagable {
@Override
public void readFromNBT(NBTTagCompound data) {
readFromNBT(data, "items");
if (data.hasKey("items")) {
// this is to support legacy item load, the new format should be
// "Items"
readFromNBT(data, "items");
} else {
readFromNBT(data, "Items");
}
}
public void readFromNBT(NBTTagCompound data, String tag) {
@ -119,7 +125,7 @@ public class SimpleInventory implements IInventory, INBTTagable {
@Override
public void writeToNBT(NBTTagCompound data) {
writeToNBT(data, "items");
writeToNBT(data, "Items");
}
public void writeToNBT(NBTTagCompound data, String tag) {

View file

@ -25,7 +25,6 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
@ -33,7 +32,6 @@ import net.minecraft.world.World;
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftCore;
@ -516,33 +514,4 @@ public final class Utils {
return new FMLProxyPacket(buf, DefaultProps.NET_CHANNEL_NAME + "-CORE");
}
public static void readStacksFromNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
NBTTagList nbttaglist = nbt.getTagList(name, Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < stacks.length; ++i) {
if (i < nbttaglist.tagCount()) {
NBTTagCompound nbttagcompound2 = nbttaglist.getCompoundTagAt(i);
stacks[i] = ItemStack.loadItemStackFromNBT(nbttagcompound2);
} else {
stacks[i] = null;
}
}
}
public static void writeStacksToNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
NBTTagList nbttaglist = new NBTTagList();
for (ItemStack stack : stacks) {
NBTTagCompound cpt = new NBTTagCompound();
nbttaglist.appendTag(cpt);
if (stack != null) {
stack.writeToNBT(cpt);
}
}
nbt.setTag(name, nbttaglist);
}
}

View file

@ -29,7 +29,7 @@ public class SchematicEngine extends SchematicTile {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
TileEngine engine = (TileEngine) context.world().getTileEntity(x, y, z);
cpt.setInteger("orientation", engine.orientation.ordinal());

View file

@ -25,7 +25,7 @@ public class SchematicRefinery extends SchematicTile {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
TileRefinery refinery = (TileRefinery) context.world().getTileEntity(x, y, z);
// slot.cpt.setInteger("filter0", refinery.getFilter(0));

View file

@ -18,7 +18,7 @@ import buildcraft.api.blueprints.SchematicTile;
public class SchematicTank extends SchematicTile {
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
}

View file

@ -28,16 +28,22 @@ public class TileHopper extends TileBuildCraft implements IInventory {
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(nbtTagCompound);
NBTTagCompound p = (NBTTagCompound) nbtTagCompound.getTag("inventory");
NBTTagCompound p = nbtTagCompound;
if (nbtTagCompound.hasKey("inventory")) {
// to support pre 6.0 loading
p = nbtTagCompound.getCompoundTag("inventory");
}
inventory.readFromNBT(p);
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryTag = new NBTTagCompound();
inventory.writeToNBT(inventoryTag);
nbtTagCompound.setTag("inventory", inventoryTag);
inventory.writeToNBT(nbtTagCompound);
}
@Override

View file

@ -0,0 +1,40 @@
/**
* 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.silicon.schematics;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicTile;
public class SchematicLaserTableBase extends SchematicTile {
@Override
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
super.writeToSchematic(context, x, y, z);
cpt.removeTag("energy");
}
@Override
public void idsToSchematic(MappingRegistry registry) {
super.idsToSchematic(registry);
inventorySlotsToSchematic(registry, cpt, "inv");
inventorySlotsToSchematic(registry, cpt, "craftingSlots");
}
@Override
public void idsToWorld(MappingRegistry registry) {
super.idsToWorld(registry);
inventorySlotsToWorld(registry, cpt, "inv");
inventorySlotsToWorld(registry, cpt, "craftingSlots");
}
}

View file

@ -109,8 +109,15 @@ public class TileFilteredBuffer extends TileBuildCraft implements IInventory, IO
public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(nbtTagCompound);
NBTTagCompound inventoryStorageTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryStorage");
NBTTagCompound inventoryStorageTag = nbtTagCompound;
if (nbtTagCompound.hasKey("inventoryStorage")) {
// To support pre 6.0 load
inventoryStorageTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryStorage");
}
inventoryStorage.readFromNBT(inventoryStorageTag);
NBTTagCompound inventoryFiltersTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryFilters");
inventoryFilters.readFromNBT(inventoryFiltersTag);
}
@ -119,9 +126,7 @@ public class TileFilteredBuffer extends TileBuildCraft implements IInventory, IO
public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryStorageTag = new NBTTagCompound();
inventoryStorage.writeToNBT(inventoryStorageTag);
nbtTagCompound.setTag("inventoryStorage", inventoryStorageTag);
inventoryStorage.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryFiltersTag = new NBTTagCompound();
inventoryFilters.writeToNBT(inventoryFiltersTag);

View file

@ -0,0 +1,26 @@
/**
* 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.transport.schematics;
import net.minecraft.item.Item;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
public class BptItemPipeEmerald extends BptItemPipeFilters {
public BptItemPipeEmerald(Item i) {
super (i);
}
@Override
public void rotateLeft(SchematicTile slot, IBuilderContext context) {
}
}

View file

@ -6,10 +6,12 @@
* 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.transport.blueprints;
package buildcraft.transport.schematics;
import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
import buildcraft.core.inventory.SimpleInventory;
@ -20,7 +22,6 @@ public class BptItemPipeFilters extends BptPipeExtension {
super (i);
}
@Override
public void rotateLeft(SchematicTile slot, IBuilderContext context) {
SimpleInventory inv = new SimpleInventory(54, "Filters", 1);

View file

@ -6,7 +6,7 @@
* 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.transport.blueprints;
package buildcraft.transport.schematics;
import java.util.HashMap;
@ -38,4 +38,5 @@ public class BptPipeExtension {
public static BptPipeExtension get (Item i) {
return bptPipeExtensionRegistry.get(i);
}
}

View file

@ -6,7 +6,7 @@
* 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.transport.blueprints;
package buildcraft.transport.schematics;
import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection;

View file

@ -6,7 +6,7 @@
* 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.transport.blueprints;
package buildcraft.transport.schematics;
import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection;

View file

@ -0,0 +1,30 @@
/**
* 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.transport.schematics;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicTile;
public class SchematicFilteredBuffer extends SchematicTile {
@Override
public void idsToSchematic(MappingRegistry registry) {
super.idsToSchematic(registry);
inventorySlotsToSchematic(registry, cpt, "inventoryFilters");
}
@Override
public void idsToWorld(MappingRegistry registry) {
super.idsToWorld(registry);
inventorySlotsToWorld(registry, cpt, "inventoryFilters");
}
}

View file

@ -6,7 +6,7 @@
* 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.transport.blueprints;
package buildcraft.transport.schematics;
import java.util.ArrayList;
import java.util.LinkedList;
@ -18,10 +18,10 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.BuildingPermission;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicTile;
import buildcraft.api.blueprints.Translation;
import buildcraft.api.gates.ActionManager;
import buildcraft.api.gates.IAction;
import buildcraft.api.gates.ITrigger;
@ -31,6 +31,8 @@ import buildcraft.transport.TileGenericPipe.SideProperties;
public class SchematicPipe extends SchematicTile {
private BuildingPermission permission = BuildingPermission.ALL;
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -50,7 +52,7 @@ public class SchematicPipe extends SchematicTile {
props.rotateLeft();
props.writeToNBT(cpt);
Item pipeItem = (Item) Item.itemRegistry.getObject(cpt.getString("pipeName"));
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
if (BptPipeExtension.contains(pipeItem)) {
BptPipeExtension.get(pipeItem).rotateLeft(this, context);
@ -86,7 +88,7 @@ public class SchematicPipe extends SchematicTile {
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
TileEntity tile = context.world().getTileEntity(x, y, z);
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -112,7 +114,7 @@ public class SchematicPipe extends SchematicTile {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
TileEntity tile = context.world().getTileEntity(x, y, z);
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -140,20 +142,77 @@ public class SchematicPipe extends SchematicTile {
}
@Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) {
super.transformToBlueprint(registry, transform);
public void idsToSchematic(MappingRegistry registry) {
super.idsToSchematic(registry);
if (cpt.hasKey("pipeId")) {
cpt.setString("pipeName", Item.itemRegistry.getNameForObject(Item.getItemById(cpt.getInteger("pipeId"))));
Item item = Item.getItemById(cpt.getInteger("pipeId"));
cpt.setInteger("pipeId", registry.getIdForItem(item));
if (cpt.hasKey("Gate")) {
NBTTagCompound gateNBT = cpt.getCompoundTag("Gate");
for (int i = 0; i < 8; ++i) {
if (gateNBT.hasKey("triggerParameters[" + i + "]")) {
NBTTagCompound parameterNBT = gateNBT.getCompoundTag("triggerParameters[" + i + "]");
if (parameterNBT.hasKey("stack")) {
registry.stackToRegistry(parameterNBT.getCompoundTag("stack"));
}
}
}
}
}
}
@Override
public void transformToWorld(MappingRegistry registry, Translation transform) {
super.transformToBlueprint(registry, transform);
public void idsToWorld(MappingRegistry registry) {
super.idsToWorld(registry);
if (cpt.hasKey("pipeId")) {
cpt.setInteger("pipeId", Item.getIdFromItem((Item) Item.itemRegistry.getObject(cpt.getString("pipeName"))));
Item item = registry.getItemForId(cpt.getInteger("pipeId"));
cpt.setInteger("pipeId", Item.getIdFromItem(item));
if (cpt.hasKey("Gate")) {
NBTTagCompound gateNBT = cpt.getCompoundTag("Gate");
for (int i = 0; i < 8; ++i) {
if (gateNBT.hasKey("triggerParameters[" + i + "]")) {
NBTTagCompound parameterNBT = gateNBT.getCompoundTag("triggerParameters[" + i + "]");
if (parameterNBT.hasKey("stack")) {
registry.stackToWorld(parameterNBT.getCompoundTag("stack"));
}
}
}
}
}
}
@Override
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.writeToNBT(nbt, registry);
nbt.setInteger("version", 2);
}
@Override
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
super.readFromNBT(nbt, registry);
if (!nbt.hasKey("version") || nbt.getInteger("version") < 2) {
// Schematics previous to the fixes in version 2 had item id
// translation badly broken. Building a blueprint that contains
// these doesn't make any sense, better to prevent the blueprint to
// be built altogether.
permission = BuildingPermission.NONE;
}
}
@Override
public BuildingPermission getBuildingPermission() {
return permission;
}
}