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); return itemToId.get(item);
} }
public int itemIdWorldToRegistry(int id) { public int itemIdToRegistry(int id) {
Item item = Item.getItemById(id); Item item = Item.getItemById(id);
return getIdForItem(item); return getIdForItem(item);
} }
public int itemIdRegistryToWorld(int id) { public int itemIdToWorld(int id) {
Item item = getItemForId(id); Item item = getItemForId(id);
return Item.getIdFromItem(item); return Item.getIdFromItem(item);
@ -95,13 +95,13 @@ public class MappingRegistry {
return blockToId.get(block); return blockToId.get(block);
} }
public int blockIdWorldToRegistry(int id) { public int blockIdToRegistry(int id) {
Block block = Block.getBlockById(id); Block block = Block.getBlockById(id);
return getIdForBlock(block); return getIdForBlock(block);
} }
public int blockIdRegistryToWorld(int id) { public int blockIdToWorld(int id) {
Block block = getBlockForId(id); Block block = getBlockForId(id);
return Block.getIdFromBlock(block); return Block.getIdFromBlock(block);
@ -123,6 +123,44 @@ public class MappingRegistry {
return entityToId.get(entity); 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) { public void write (NBTTagCompound nbt) {
NBTTagList blocksMapping = new NBTTagList(); NBTTagList blocksMapping = new NBTTagList();

View file

@ -13,7 +13,6 @@ import java.util.LinkedList;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants; 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: * Applies translations to all positions in the schematic to center in the
* - use the registry to map ids from world to blueprints * blueprint referencial
* - apply 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: * Apply translations to all positions in the schematic to center in the
* - use the registry to map ids from blueprints to world * 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 * By default, if the block is a BlockContainer, tile information will be to
* save / load the block. * 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) { public void inventorySlotsToSchematic (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
inventorySlotsToBlueprint(registry, nbt, "Items");
}
public void inventorySlotsToBlueprint (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
if (!nbt.hasKey(nbtName)) { if (!nbt.hasKey(nbtName)) {
return; 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) { public void inventorySlotsToWorld (MappingRegistry registry, NBTTagCompound nbt, String nbtName) {
if (!nbt.hasKey(nbtName)) { if (!nbt.hasKey(nbtName)) {
return; return;
} } else {
registry.inventoryToWorld(nbt.getTagList(nbtName,
NBTTagList list = nbt.getTagList(nbtName, Constants.NBT.TAG_COMPOUND));
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));
} }
} }

View file

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

View file

@ -8,30 +8,6 @@
*/ */
package buildcraft.api.blueprints; 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 { public abstract class SchematicBlockBase extends Schematic {
} }

View file

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

View file

@ -29,13 +29,13 @@ public class SchematicTile extends SchematicBlock {
public NBTTagCompound cpt = new NBTTagCompound(); public NBTTagCompound cpt = new NBTTagCompound();
@Override @Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) { public void idsToSchematic(MappingRegistry registry) {
inventorySlotsToBlueprint(registry, cpt); inventorySlotsToSchematic(registry, cpt, "Items");
} }
@Override @Override
public void transformToWorld(MappingRegistry registry, Translation transform) { public void idsToWorld(MappingRegistry registry) {
inventorySlotsToWorld(registry, cpt); inventorySlotsToWorld(registry, cpt, "Items");
} }
/** /**
@ -59,8 +59,8 @@ public class SchematicTile extends SchematicBlock {
} }
@Override @Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) { public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
super.readFromWorld(context, x, y, z); super.writeToSchematic(context, x, y, z);
if (block.hasTileEntity(meta)) { if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z); TileEntity tile = context.world().getTileEntity(x, y, z);
@ -72,8 +72,8 @@ public class SchematicTile extends SchematicBlock {
} }
@Override @Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) { public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
super.readRequirementsFromWorld(context, x, y, z); super.writeRequirementsToSchematic(context, x, y, z);
if (block.hasTileEntity(meta)) { if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z); 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.TileGenericPipe;
import buildcraft.transport.TransportProxy; import buildcraft.transport.TransportProxy;
import buildcraft.transport.WireIconProvider; 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.GateExpansionPulsar;
import buildcraft.transport.gates.GateExpansionRedstoneFader; import buildcraft.transport.gates.GateExpansionRedstoneFader;
import buildcraft.transport.gates.GateExpansionTimer; import buildcraft.transport.gates.GateExpansionTimer;
@ -107,6 +103,11 @@ import buildcraft.transport.pipes.PipePowerQuartz;
import buildcraft.transport.pipes.PipePowerStone; import buildcraft.transport.pipes.PipePowerStone;
import buildcraft.transport.pipes.PipePowerWood; import buildcraft.transport.pipes.PipePowerWood;
import buildcraft.transport.pipes.PipeStructureCobblestone; 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.ActionEnergyPulsar;
import buildcraft.transport.triggers.ActionExtractionPreset; import buildcraft.transport.triggers.ActionExtractionPreset;
import buildcraft.transport.triggers.ActionPipeColor; import buildcraft.transport.triggers.ActionPipeColor;
@ -387,7 +388,6 @@ public class BuildCraftTransport extends BuildCraftMod {
CoreProxy.proxy.registerItem(robotStationItem); CoreProxy.proxy.registerItem(robotStationItem);
} }
for (PipeContents kind : PipeContents.values()) { for (PipeContents kind : PipeContents.values()) {
triggerPipe[kind.ordinal()] = new TriggerPipeContents(kind); triggerPipe[kind.ordinal()] = new TriggerPipeContents(kind);
} }
@ -437,6 +437,7 @@ public class BuildCraftTransport extends BuildCraftMod {
TransportProxy.proxy.registerTileEntities(); TransportProxy.proxy.registerTileEntities();
SchematicRegistry.registerSchematicBlock(genericPipeBlock, SchematicPipe.class); SchematicRegistry.registerSchematicBlock(genericPipeBlock, SchematicPipe.class);
SchematicRegistry.registerSchematicBlock(filteredBufferBlock, SchematicFilteredBuffer.class);
new BptPipeIron(pipeItemsIron); new BptPipeIron(pipeItemsIron);
new BptPipeIron(pipeFluidsIron); new BptPipeIron(pipeFluidsIron);
@ -445,9 +446,9 @@ public class BuildCraftTransport extends BuildCraftMod {
new BptPipeWooden(pipeItemsWood); new BptPipeWooden(pipeItemsWood);
new BptPipeWooden(pipeFluidsWood); new BptPipeWooden(pipeFluidsWood);
new BptPipeWooden(pipePowerWood); new BptPipeWooden(pipePowerWood);
new BptPipeWooden(pipeItemsEmerald);
new BptItemPipeFilters(pipeItemsDiamond); new BptItemPipeFilters(pipeItemsDiamond);
new BptItemPipeFilters(pipeItemsEmerald);
ActionManager.registerTriggerProvider(new PipeTriggerProvider()); 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) { public void onBlockPlacedBy(World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack stack) {
if (!world.isRemote && entityliving instanceof EntityPlayer) { if (!world.isRemote && entityliving instanceof EntityPlayer) {
TileEntity tile = world.getTileEntity(i, j, k); 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()); 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.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftBuilders; import buildcraft.BuildCraftBuilders;
@ -33,6 +31,7 @@ import buildcraft.core.blueprints.BlueprintBase;
import buildcraft.core.blueprints.BlueprintReadConfiguration; import buildcraft.core.blueprints.BlueprintReadConfiguration;
import buildcraft.core.blueprints.BptContext; import buildcraft.core.blueprints.BptContext;
import buildcraft.core.blueprints.Template; import buildcraft.core.blueprints.Template;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC; import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler; import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide; import buildcraft.core.network.RPCSide;
@ -51,7 +50,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@NetworkData @NetworkData
public BlueprintReadConfiguration readConfiguration = new BlueprintReadConfiguration(); public BlueprintReadConfiguration readConfiguration = new BlueprintReadConfiguration();
private ItemStack[] items = new ItemStack[2]; private SimpleInventory inv = new SimpleInventory(2, "Architect", 1);
private BlueprintBase writingBlueprint; private BlueprintBase writingBlueprint;
private BptContext writingContext; private BptContext writingContext;
private BlockScanner blockScanner; private BlockScanner blockScanner;
@ -83,7 +82,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
transform.y = -writingContext.surroundingBox().pMin().y; transform.y = -writingContext.surroundingBox().pMin().y;
transform.z = -writingContext.surroundingBox().pMin().z; transform.z = -writingContext.surroundingBox().pMin().z;
writingBlueprint.transformToBlueprint(transform); writingBlueprint.translateToBlueprint(transform);
ForgeDirection o = ForgeDirection.values()[worldObj.getBlockMetadata( ForgeDirection o = ForgeDirection.values()[worldObj.getBlockMetadata(
xCoord, yCoord, zCoord)].getOpposite(); xCoord, yCoord, zCoord)].getOpposite();
@ -162,22 +161,12 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override @Override
public ItemStack getStackInSlot(int i) { public ItemStack getStackInSlot(int i) {
return items[i]; return inv.getStackInSlot(i);
} }
@Override @Override
public ItemStack decrStackSize(int i, int j) { public ItemStack decrStackSize(int i, int j) {
ItemStack result; ItemStack result = inv.decrStackSize(i, j);
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;
}
if (i == 0) { if (i == 0) {
initializeComputing(); initializeComputing();
@ -188,7 +177,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override @Override
public void setInventorySlotContents(int i, ItemStack itemstack) { public void setInventorySlotContents(int i, ItemStack itemstack) {
items[i] = itemstack; inv.setInventorySlotContents(i, itemstack);
if (i == 0) { if (i == 0) {
initializeComputing(); initializeComputing();
@ -197,13 +186,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
@Override @Override
public ItemStack getStackInSlotOnClosing(int slot) { public ItemStack getStackInSlotOnClosing(int slot) {
if (items[slot] == null) { return inv.getStackInSlotOnClosing(slot);
return null;
}
ItemStack toReturn = items[slot];
items[slot] = null;
return toReturn;
} }
@Override @Override
@ -236,18 +219,7 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
box.initialize(nbttagcompound.getCompoundTag("box")); box.initialize(nbttagcompound.getCompoundTag("box"));
} }
NBTTagList nbttaglist = nbttagcompound.getTagList("Items", inv.readFromNBT(nbttagcompound);
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);
}
}
name = nbttagcompound.getString("name"); name = nbttagcompound.getString("name");
currentAuthorName = nbttagcompound.getString("lastAuthor"); currentAuthorName = nbttagcompound.getString("lastAuthor");
@ -275,17 +247,8 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
nbttagcompound.setTag("box", boxStore); nbttagcompound.setTag("box", boxStore);
} }
NBTTagList nbttaglist = new NBTTagList(); inv.writeToNBT(nbttagcompound);
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);
}
}
nbttagcompound.setTag("Items", nbttaglist);
nbttagcompound.setString("name", name); nbttagcompound.setString("name", name);
nbttagcompound.setString("lastAuthor", currentAuthorName); nbttagcompound.setString("lastAuthor", currentAuthorName);
@ -308,16 +271,17 @@ public class TileArchitect extends TileBuildCraft implements IInventory, IBoxPro
if (!box.isInitialized()) { if (!box.isInitialized()) {
return; return;
} else if (blockScanner == null) { } else if (blockScanner == null) {
if (items[0] != null && items[0].getItem() instanceof ItemBlueprint && items[1] == null) { if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint
if (!box.isInitialized() || items[1] != null) { && getStackInSlot(1) == null) {
if (!box.isInitialized() || getStackInSlot(1) != null) {
return; return;
} }
blockScanner = new BlockScanner(box, getWorld(), SCANNER_ITERATION); 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()); 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()); 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 net.minecraft.nbt.NBTTagCompound;
import buildcraft.BuildCraftBuilders; import buildcraft.BuildCraftBuilders;
import buildcraft.api.core.NetworkData;
import buildcraft.builders.blueprints.BlueprintId; import buildcraft.builders.blueprints.BlueprintId;
import buildcraft.builders.blueprints.BlueprintId.Kind; import buildcraft.builders.blueprints.BlueprintId.Kind;
import buildcraft.core.TileBuildCraft; import buildcraft.core.TileBuildCraft;
import buildcraft.core.blueprints.BlueprintBase; import buildcraft.core.blueprints.BlueprintBase;
import buildcraft.core.inventory.InvUtils; import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC; import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler; import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide; import buildcraft.core.network.RPCSide;
@ -36,14 +35,11 @@ import buildcraft.core.network.RPCSide;
public class TileBlueprintLibrary extends TileBuildCraft implements IInventory { public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
private static final int PROGRESS_TIME = 100; 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 progressIn = 0;
public int progressOut = 0; public int progressOut = 0;
@NetworkData
public String owner = "";
public ArrayList<BlueprintId> currentPage; public ArrayList<BlueprintId> currentPage;
public int selected = -1; public int selected = -1;
@ -105,18 +101,14 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
public void readFromNBT(NBTTagCompound nbttagcompound) { public void readFromNBT(NBTTagCompound nbttagcompound) {
super.readFromNBT(nbttagcompound); super.readFromNBT(nbttagcompound);
owner = nbttagcompound.getString("owner"); inv.readFromNBT(nbttagcompound);
InvUtils.readStacksFromNBT(nbttagcompound, "stack", stack);
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbttagcompound) { public void writeToNBT(NBTTagCompound nbttagcompound) {
super.writeToNBT(nbttagcompound); super.writeToNBT(nbttagcompound);
nbttagcompound.setString("owner", owner); inv.writeToNBT(nbttagcompound);
InvUtils.writeStacksToNBT(nbttagcompound, "stack", stack);
} }
@Override @Override
@ -126,30 +118,20 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
@Override @Override
public ItemStack getStackInSlot(int i) { public ItemStack getStackInSlot(int i) {
return stack[i]; return inv.getStackInSlot(i);
} }
@Override @Override
public ItemStack decrStackSize(int i, int j) { public ItemStack decrStackSize(int i, int j) {
if (stack[i] == null) { return inv.decrStackSize(i, j);
return null;
}
ItemStack res = stack[i].splitStack(j);
if (stack[i].stackSize == 0) {
stack[i] = null;
}
return res;
} }
@Override @Override
public void setInventorySlotContents(int i, ItemStack itemstack) { public void setInventorySlotContents(int i, ItemStack itemstack) {
stack[i] = itemstack; inv.setInventorySlotContents(i, itemstack);
if (i == 0) { if (i == 0) {
if (stack[0] != null && stack[0].getItem() instanceof ItemBlueprint) { if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint) {
progressIn = 1; progressIn = 1;
} else { } else {
progressIn = 0; progressIn = 0;
@ -157,7 +139,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
} }
if (i == 2) { if (i == 2) {
if (stack[2] != null && stack[2].getItem() instanceof ItemBlueprint) { if (getStackInSlot(2) != null && getStackInSlot(2).getItem() instanceof ItemBlueprint) {
progressOut = 1; progressOut = 1;
} else { } else {
progressOut = 0; progressOut = 0;
@ -167,13 +149,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
@Override @Override
public ItemStack getStackInSlotOnClosing(int slot) { public ItemStack getStackInSlotOnClosing(int slot) {
if (stack[slot] == null) { return inv.getStackInSlotOnClosing(slot);
return null;
}
ItemStack toReturn = stack[slot];
stack[slot] = null;
return toReturn;
} }
@Override @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 // On progress IN, we'll download the blueprint from the server to the
// client, and then store it to the client. // client, and then store it to the client.
if (progressIn == 100 && stack[1] == null) { if (progressIn == 100 && getStackInSlot(1) == null) {
setInventorySlotContents(1, stack[0]); setInventorySlotContents(1, getStackInSlot(0));
setInventorySlotContents(0, null); setInventorySlotContents(0, null);
BlueprintBase bpt = ItemBlueprint.loadBlueprint(stack [1]); BlueprintBase bpt = ItemBlueprint.loadBlueprint(getStackInSlot(1));
if (bpt != null && uploadingPlayer != null) { if (bpt != null && uploadingPlayer != null) {
RPCHandler.rpcPlayer(this, "downloadBlueprintToClient", 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", RPCHandler.rpcPlayer(this, "requestSelectedBlueprint",
downloadingPlayer); downloadingPlayer);
progressOut = 0; progressOut = 0;
@ -274,7 +250,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
BuildCraftBuilders.serverDB.add(bpt); BuildCraftBuilders.serverDB.add(bpt);
setInventorySlotContents(3, bpt.getStack()); setInventorySlotContents(3, bpt.getStack());
} else { } else {
setInventorySlotContents(3, stack[2]); setInventorySlotContents(3, getStackInSlot(2));
} }
setInventorySlotContents(2, null); setInventorySlotContents(2, null);
@ -307,13 +283,13 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
} }
private boolean isOuputConsistent () { private boolean isOuputConsistent () {
if (selected == -1 || stack [2] == null) { if (selected == -1 || getStackInSlot(2) == null) {
return false; return false;
} }
return (stack [2].getItem() instanceof ItemBlueprintStandard return (getStackInSlot(2).getItem() instanceof ItemBlueprintStandard
&& currentPage.get(selected).kind == Kind.Blueprint) || && currentPage.get(selected).kind == Kind.Blueprint) ||
(stack [2].getItem() instanceof ItemBlueprintTemplate (getStackInSlot(2).getItem() instanceof ItemBlueprintTemplate
&& currentPage.get(selected).kind == Kind.Template); && 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.BptBuilderTemplate;
import buildcraft.core.blueprints.BptContext; import buildcraft.core.blueprints.BptContext;
import buildcraft.core.inventory.InvUtils; import buildcraft.core.inventory.InvUtils;
import buildcraft.core.inventory.SimpleInventory;
import buildcraft.core.network.RPC; import buildcraft.core.network.RPC;
import buildcraft.core.network.RPCHandler; import buildcraft.core.network.RPCHandler;
import buildcraft.core.network.RPCSide; import buildcraft.core.network.RPCSide;
import buildcraft.core.utils.Utils;
public class TileBuilder extends TileAbstractBuilder implements IMachine { public class TileBuilder extends TileAbstractBuilder implements IMachine {
@ -54,7 +54,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public Box box = new Box(); public Box box = new Box();
public PathIterator currentPathIterator; public PathIterator currentPathIterator;
private final ItemStack[] items = new ItemStack[28]; private SimpleInventory inv = new SimpleInventory(28, "Builder", 64);
private BptBuilderBase bluePrintBuilder; private BptBuilderBase bluePrintBuilder;
private LinkedList<BlockIndex> path; private LinkedList<BlockIndex> path;
private LinkedList<ItemStack> requiredToBuild; private LinkedList<ItemStack> requiredToBuild;
@ -273,7 +273,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
BlueprintBase bpt = null; BlueprintBase bpt = null;
try { try {
bpt = ItemBlueprint.loadBlueprint(items [0]); bpt = ItemBlueprint.loadBlueprint(getStackInSlot(0));
} catch (Throwable t) { } catch (Throwable t) {
setInventorySlotContents(0, null); setInventorySlotContents(0, null);
t.printStackTrace(); t.printStackTrace();
@ -313,11 +313,11 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
transform.y = y - bpt.anchorY; transform.y = y - bpt.anchorY;
transform.z = z - bpt.anchorZ; 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); 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); return new BptBuilderTemplate(bpt, worldObj, x, y, z);
} else { } else {
return null; return null;
@ -325,7 +325,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
} }
public void iterateBpt(boolean forceIterate) { 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) { if (bluePrintBuilder != null) {
bluePrintBuilder = null; bluePrintBuilder = null;
} }
@ -399,44 +399,35 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
if (done) { if (done) {
boolean dropBlueprint = true; boolean dropBlueprint = true;
for (int i = 1; i < items.length; ++i) { for (int i = 1; i < getSizeInventory(); ++i) {
if (items[i] == null) { if (getStackInSlot(i) == null) {
items[i] = items[0]; setInventorySlotContents(i, getStackInSlot(0));
dropBlueprint = false; dropBlueprint = false;
break; break;
} }
} }
if (dropBlueprint) { 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(); box.reset();
} }
} }
@Override @Override
public int getSizeInventory() { public int getSizeInventory() {
return items.length; return inv.getSizeInventory();
} }
@Override @Override
public ItemStack getStackInSlot(int i) { public ItemStack getStackInSlot(int i) {
return items[i]; return inv.getStackInSlot(i);
} }
@Override @Override
public ItemStack decrStackSize(int i, int j) { public ItemStack decrStackSize(int i, int j) {
ItemStack result; ItemStack result = inv.decrStackSize(i, j);
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;
}
if (!worldObj.isRemote) { if (!worldObj.isRemote) {
if (i == 0) { if (i == 0) {
@ -451,7 +442,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
@Override @Override
public void setInventorySlotContents(int i, ItemStack itemstack) { public void setInventorySlotContents(int i, ItemStack itemstack) {
items[i] = itemstack; inv.setInventorySlotContents(i, itemstack);
if (!worldObj.isRemote) { if (!worldObj.isRemote) {
if (i == 0) { if (i == 0) {
@ -463,12 +454,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
@Override @Override
public ItemStack getStackInSlotOnClosing(int slot) { public ItemStack getStackInSlotOnClosing(int slot) {
if (items[slot] == null) { return inv.getStackInSlotOnClosing(slot);
return null;
}
ItemStack toReturn = items[slot];
items[slot] = null;
return toReturn;
} }
@Override @Override
@ -490,7 +476,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public void readFromNBT(NBTTagCompound nbttagcompound) { public void readFromNBT(NBTTagCompound nbttagcompound) {
super.readFromNBT(nbttagcompound); super.readFromNBT(nbttagcompound);
Utils.readStacksFromNBT(nbttagcompound, "Items", items); inv.readFromNBT(nbttagcompound);
if (nbttagcompound.hasKey("box")) { if (nbttagcompound.hasKey("box")) {
box.initialize(nbttagcompound.getCompoundTag("box")); box.initialize(nbttagcompound.getCompoundTag("box"));
@ -516,7 +502,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
public void writeToNBT(NBTTagCompound nbttagcompound) { public void writeToNBT(NBTTagCompound nbttagcompound) {
super.writeToNBT(nbttagcompound); super.writeToNBT(nbttagcompound);
Utils.writeStacksToNBT(nbttagcompound, "Items", items); inv.writeToNBT(nbttagcompound);
if (box.isInitialized()) { if (box.isInitialized()) {
NBTTagCompound boxStore = new NBTTagCompound(); NBTTagCompound boxStore = new NBTTagCompound();

View file

@ -26,7 +26,7 @@ public class SchematicBed extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

@ -24,7 +24,7 @@ public class SchematicCactus extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

@ -29,7 +29,7 @@ public class SchematicCustomStack extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }
} }

View file

@ -25,7 +25,7 @@ public class SchematicDirt extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

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

View file

@ -29,7 +29,7 @@ public class SchematicEnderChest extends SchematicRotateMeta {
} }
@Override @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 // cancel requirements reading
} }

View file

@ -25,7 +25,7 @@ public class SchematicFarmland extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

@ -24,7 +24,7 @@ public class SchematicFire extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }
} }

View file

@ -33,7 +33,7 @@ public class SchematicFluid extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

@ -25,7 +25,7 @@ public class SchematicGravel extends SchematicBlock {
} }
@Override @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 // cancel requirements reading
} }

View file

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

View file

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

View file

@ -24,7 +24,7 @@ public class SchematicPortal extends SchematicBlock {
} }
@Override @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 @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 // cancel requirements reading
} }

View file

@ -29,7 +29,7 @@ public class SchematicRedstoneDiode extends SchematicBlock {
} }
@Override @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 @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 @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 @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 @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 // cancel requirements reading
} }

View file

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

View file

@ -59,24 +59,24 @@ public abstract class BlueprintBase {
anchorZ = 0; anchorZ = 0;
} }
public void transformToBlueprint(Translation transform) { public void translateToBlueprint(Translation transform) {
for (int x = 0; x < sizeX; ++x) { for (int x = 0; x < sizeX; ++x) {
for (int y = 0; y < sizeY; ++y) { for (int y = 0; y < sizeY; ++y) {
for (int z = 0; z < sizeZ; ++z) { for (int z = 0; z < sizeZ; ++z) {
if (contents [x][y][z] != null) { 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 x = 0; x < sizeX; ++x) {
for (int y = 0; y < sizeY; ++y) { for (int y = 0; y < sizeY; ++y) {
for (int z = 0; z < sizeZ; ++z) { for (int z = 0; z < sizeZ; ++z) {
if (contents [x][y][z] != null) { 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.y = y - bpt.anchorY;
transform.z = z - bpt.anchorZ; transform.z = z - bpt.anchorZ;
bpt.transformToWorld(transform); bpt.translateToWorld(transform);
new BptBuilderBlueprint(bpt, world, x, y, z).deploy(); new BptBuilderBlueprint(bpt, world, x, y, z).deploy();
} }

View file

@ -97,7 +97,13 @@ public class SimpleInventory implements IInventory, INBTTagable {
@Override @Override
public void readFromNBT(NBTTagCompound data) { 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) { public void readFromNBT(NBTTagCompound data, String tag) {
@ -119,7 +125,7 @@ public class SimpleInventory implements IInventory, INBTTagable {
@Override @Override
public void writeToNBT(NBTTagCompound data) { public void writeToNBT(NBTTagCompound data) {
writeToNBT(data, "items"); writeToNBT(data, "Items");
} }
public void writeToNBT(NBTTagCompound data, String tag) { 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.item.ItemStack;
import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
@ -33,7 +32,6 @@ import net.minecraft.world.World;
import cpw.mods.fml.common.network.internal.FMLProxyPacket; import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.BuildCraftCore; import buildcraft.BuildCraftCore;
@ -516,33 +514,4 @@ public final class Utils {
return new FMLProxyPacket(buf, DefaultProps.NET_CHANNEL_NAME + "-CORE"); 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 @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); TileEngine engine = (TileEngine) context.world().getTileEntity(x, y, z);
cpt.setInteger("orientation", engine.orientation.ordinal()); cpt.setInteger("orientation", engine.orientation.ordinal());

View file

@ -25,7 +25,7 @@ public class SchematicRefinery extends SchematicTile {
} }
@Override @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); TileRefinery refinery = (TileRefinery) context.world().getTileEntity(x, y, z);
// slot.cpt.setInteger("filter0", refinery.getFilter(0)); // slot.cpt.setInteger("filter0", refinery.getFilter(0));

View file

@ -18,7 +18,7 @@ import buildcraft.api.blueprints.SchematicTile;
public class SchematicTank extends SchematicTile { public class SchematicTank extends SchematicTile {
@Override @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 @Override
public void readFromNBT(NBTTagCompound nbtTagCompound) { public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(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); inventory.readFromNBT(p);
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbtTagCompound) { public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound); super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryTag = new NBTTagCompound();
inventory.writeToNBT(inventoryTag); inventory.writeToNBT(nbtTagCompound);
nbtTagCompound.setTag("inventory", inventoryTag);
} }
@Override @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) { public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(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); inventoryStorage.readFromNBT(inventoryStorageTag);
NBTTagCompound inventoryFiltersTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryFilters"); NBTTagCompound inventoryFiltersTag = (NBTTagCompound) nbtTagCompound.getTag("inventoryFilters");
inventoryFilters.readFromNBT(inventoryFiltersTag); inventoryFilters.readFromNBT(inventoryFiltersTag);
} }
@ -119,9 +126,7 @@ public class TileFilteredBuffer extends TileBuildCraft implements IInventory, IO
public void writeToNBT(NBTTagCompound nbtTagCompound) { public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound); super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryStorageTag = new NBTTagCompound(); inventoryStorage.writeToNBT(nbtTagCompound);
inventoryStorage.writeToNBT(inventoryStorageTag);
nbtTagCompound.setTag("inventoryStorage", inventoryStorageTag);
NBTTagCompound inventoryFiltersTag = new NBTTagCompound(); NBTTagCompound inventoryFiltersTag = new NBTTagCompound();
inventoryFilters.writeToNBT(inventoryFiltersTag); 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 * License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.transport.blueprints; package buildcraft.transport.schematics;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.IBuilderContext; import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile; import buildcraft.api.blueprints.SchematicTile;
import buildcraft.core.inventory.SimpleInventory; import buildcraft.core.inventory.SimpleInventory;
@ -20,7 +22,6 @@ public class BptItemPipeFilters extends BptPipeExtension {
super (i); super (i);
} }
@Override @Override
public void rotateLeft(SchematicTile slot, IBuilderContext context) { public void rotateLeft(SchematicTile slot, IBuilderContext context) {
SimpleInventory inv = new SimpleInventory(54, "Filters", 1); 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 * License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.transport.blueprints; package buildcraft.transport.schematics;
import java.util.HashMap; import java.util.HashMap;
@ -38,4 +38,5 @@ public class BptPipeExtension {
public static BptPipeExtension get (Item i) { public static BptPipeExtension get (Item i) {
return bptPipeExtensionRegistry.get(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 * License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.transport.blueprints; package buildcraft.transport.schematics;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection; 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 * License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.transport.blueprints; package buildcraft.transport.schematics;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraftforge.common.util.ForgeDirection; 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 * License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt * http://www.mod-buildcraft.com/MMPL-1.0.txt
*/ */
package buildcraft.transport.blueprints; package buildcraft.transport.schematics;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
@ -18,10 +18,10 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.BuildingPermission;
import buildcraft.api.blueprints.IBuilderContext; import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry; import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicTile; import buildcraft.api.blueprints.SchematicTile;
import buildcraft.api.blueprints.Translation;
import buildcraft.api.gates.ActionManager; import buildcraft.api.gates.ActionManager;
import buildcraft.api.gates.IAction; import buildcraft.api.gates.IAction;
import buildcraft.api.gates.ITrigger; import buildcraft.api.gates.ITrigger;
@ -31,6 +31,8 @@ import buildcraft.transport.TileGenericPipe.SideProperties;
public class SchematicPipe extends SchematicTile { public class SchematicPipe extends SchematicTile {
private BuildingPermission permission = BuildingPermission.ALL;
@Override @Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) { public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z); Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -50,7 +52,7 @@ public class SchematicPipe extends SchematicTile {
props.rotateLeft(); props.rotateLeft();
props.writeToNBT(cpt); props.writeToNBT(cpt);
Item pipeItem = (Item) Item.itemRegistry.getObject(cpt.getString("pipeName")); Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
if (BptPipeExtension.contains(pipeItem)) { if (BptPipeExtension.contains(pipeItem)) {
BptPipeExtension.get(pipeItem).rotateLeft(this, context); BptPipeExtension.get(pipeItem).rotateLeft(this, context);
@ -86,7 +88,7 @@ public class SchematicPipe extends SchematicTile {
} }
@Override @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); TileEntity tile = context.world().getTileEntity(x, y, z);
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z); Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -112,7 +114,7 @@ public class SchematicPipe extends SchematicTile {
} }
@Override @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); TileEntity tile = context.world().getTileEntity(x, y, z);
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z); Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
@ -140,20 +142,77 @@ public class SchematicPipe extends SchematicTile {
} }
@Override @Override
public void transformToBlueprint(MappingRegistry registry, Translation transform) { public void idsToSchematic(MappingRegistry registry) {
super.transformToBlueprint(registry, transform); super.idsToSchematic(registry);
if (cpt.hasKey("pipeId")) { 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 @Override
public void transformToWorld(MappingRegistry registry, Translation transform) { public void idsToWorld(MappingRegistry registry) {
super.transformToBlueprint(registry, transform); super.idsToWorld(registry);
if (cpt.hasKey("pipeId")) { 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;
}
} }