diff --git a/api/buildcraft/api/blueprints/MappingRegistry.java b/api/buildcraft/api/blueprints/MappingRegistry.java index 5a1ec5c4..cd340c50 100755 --- a/api/buildcraft/api/blueprints/MappingRegistry.java +++ b/api/buildcraft/api/blueprints/MappingRegistry.java @@ -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(); diff --git a/api/buildcraft/api/blueprints/Schematic.java b/api/buildcraft/api/blueprints/Schematic.java index 8708f562..bd770716 100755 --- a/api/buildcraft/api/blueprints/Schematic.java +++ b/api/buildcraft/api/blueprints/Schematic.java @@ -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)); } } diff --git a/api/buildcraft/api/blueprints/SchematicBlock.java b/api/buildcraft/api/blueprints/SchematicBlock.java index 053da34c..693fb857 100755 --- a/api/buildcraft/api/blueprints/SchematicBlock.java +++ b/api/buildcraft/api/blueprints/SchematicBlock.java @@ -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 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; diff --git a/api/buildcraft/api/blueprints/SchematicBlockBase.java b/api/buildcraft/api/blueprints/SchematicBlockBase.java index 6ded2185..a8964978 100755 --- a/api/buildcraft/api/blueprints/SchematicBlockBase.java +++ b/api/buildcraft/api/blueprints/SchematicBlockBase.java @@ -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 { } diff --git a/api/buildcraft/api/blueprints/SchematicEntity.java b/api/buildcraft/api/blueprints/SchematicEntity.java index 51a0de18..4f4a3da6 100755 --- a/api/buildcraft/api/blueprints/SchematicEntity.java +++ b/api/buildcraft/api/blueprints/SchematicEntity.java @@ -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", diff --git a/api/buildcraft/api/blueprints/SchematicTile.java b/api/buildcraft/api/blueprints/SchematicTile.java index 81af354b..93aab883 100755 --- a/api/buildcraft/api/blueprints/SchematicTile.java +++ b/api/buildcraft/api/blueprints/SchematicTile.java @@ -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); diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index cda2bd58..24679a62 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -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()); diff --git a/common/buildcraft/builders/BlockBlueprintLibrary.java b/common/buildcraft/builders/BlockBlueprintLibrary.java index fd01b954..eb38a179 100644 --- a/common/buildcraft/builders/BlockBlueprintLibrary.java +++ b/common/buildcraft/builders/BlockBlueprintLibrary.java @@ -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(); - } } } diff --git a/common/buildcraft/builders/BuildersProxy.java b/common/buildcraft/builders/BuildersProxy.java index 96a0e48e..ef01e883 100644 --- a/common/buildcraft/builders/BuildersProxy.java +++ b/common/buildcraft/builders/BuildersProxy.java @@ -25,9 +25,4 @@ public final class BuildersProxy { return !(block == null || !block.renderAsNormalBlock()); } - - public static String getOwner(TileBlueprintLibrary library) { - return library.owner; - } - } diff --git a/common/buildcraft/builders/TileArchitect.java b/common/buildcraft/builders/TileArchitect.java index 592c7dea..11a9a4f0 100644 --- a/common/buildcraft/builders/TileArchitect.java +++ b/common/buildcraft/builders/TileArchitect.java @@ -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()); } diff --git a/common/buildcraft/builders/TileBlueprintLibrary.java b/common/buildcraft/builders/TileBlueprintLibrary.java index 1279cf48..e139fb6e 100644 --- a/common/buildcraft/builders/TileBlueprintLibrary.java +++ b/common/buildcraft/builders/TileBlueprintLibrary.java @@ -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 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); } } diff --git a/common/buildcraft/builders/TileBuilder.java b/common/buildcraft/builders/TileBuilder.java index ad7c492b..881048e9 100644 --- a/common/buildcraft/builders/TileBuilder.java +++ b/common/buildcraft/builders/TileBuilder.java @@ -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 path; private LinkedList 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(); diff --git a/common/buildcraft/builders/schematics/SchematicBed.java b/common/buildcraft/builders/schematics/SchematicBed.java index 1a8bad21..bfe1fcd1 100644 --- a/common/buildcraft/builders/schematics/SchematicBed.java +++ b/common/buildcraft/builders/schematics/SchematicBed.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicCactus.java b/common/buildcraft/builders/schematics/SchematicCactus.java index 39a9325d..3523118f 100755 --- a/common/buildcraft/builders/schematics/SchematicCactus.java +++ b/common/buildcraft/builders/schematics/SchematicCactus.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicCustomStack.java b/common/buildcraft/builders/schematics/SchematicCustomStack.java index 4ec82ab4..c72c85e3 100644 --- a/common/buildcraft/builders/schematics/SchematicCustomStack.java +++ b/common/buildcraft/builders/schematics/SchematicCustomStack.java @@ -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 } } diff --git a/common/buildcraft/builders/schematics/SchematicDirt.java b/common/buildcraft/builders/schematics/SchematicDirt.java index 86ac0033..7851fb25 100644 --- a/common/buildcraft/builders/schematics/SchematicDirt.java +++ b/common/buildcraft/builders/schematics/SchematicDirt.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicDoor.java b/common/buildcraft/builders/schematics/SchematicDoor.java index 8a7b53c8..4616289f 100644 --- a/common/buildcraft/builders/schematics/SchematicDoor.java +++ b/common/buildcraft/builders/schematics/SchematicDoor.java @@ -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); diff --git a/common/buildcraft/builders/schematics/SchematicEnderChest.java b/common/buildcraft/builders/schematics/SchematicEnderChest.java index 82b5cdfd..95d8b5b7 100755 --- a/common/buildcraft/builders/schematics/SchematicEnderChest.java +++ b/common/buildcraft/builders/schematics/SchematicEnderChest.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicFarmland.java b/common/buildcraft/builders/schematics/SchematicFarmland.java index 5e8a61fb..a16fdf48 100755 --- a/common/buildcraft/builders/schematics/SchematicFarmland.java +++ b/common/buildcraft/builders/schematics/SchematicFarmland.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicFire.java b/common/buildcraft/builders/schematics/SchematicFire.java index 023bb9e7..7fb9c08f 100755 --- a/common/buildcraft/builders/schematics/SchematicFire.java +++ b/common/buildcraft/builders/schematics/SchematicFire.java @@ -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 } } diff --git a/common/buildcraft/builders/schematics/SchematicFluid.java b/common/buildcraft/builders/schematics/SchematicFluid.java index f569c279..19bcb641 100644 --- a/common/buildcraft/builders/schematics/SchematicFluid.java +++ b/common/buildcraft/builders/schematics/SchematicFluid.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicGravel.java b/common/buildcraft/builders/schematics/SchematicGravel.java index 5c2f2617..acdd4af3 100755 --- a/common/buildcraft/builders/schematics/SchematicGravel.java +++ b/common/buildcraft/builders/schematics/SchematicGravel.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicHanging.java b/common/buildcraft/builders/schematics/SchematicHanging.java index a2033c45..a2052787 100755 --- a/common/buildcraft/builders/schematics/SchematicHanging.java +++ b/common/buildcraft/builders/schematics/SchematicHanging.java @@ -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); diff --git a/common/buildcraft/builders/schematics/SchematicIgnore.java b/common/buildcraft/builders/schematics/SchematicIgnore.java index 1109c2b7..4f96ba43 100644 --- a/common/buildcraft/builders/schematics/SchematicIgnore.java +++ b/common/buildcraft/builders/schematics/SchematicIgnore.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicIgnoreMeta.java b/common/buildcraft/builders/schematics/SchematicIgnoreMeta.java index e7eb74ee..ac5d87b9 100644 --- a/common/buildcraft/builders/schematics/SchematicIgnoreMeta.java +++ b/common/buildcraft/builders/schematics/SchematicIgnoreMeta.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicMinecart.java b/common/buildcraft/builders/schematics/SchematicMinecart.java index fdb30c9c..08c70d79 100755 --- a/common/buildcraft/builders/schematics/SchematicMinecart.java +++ b/common/buildcraft/builders/schematics/SchematicMinecart.java @@ -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), diff --git a/common/buildcraft/builders/schematics/SchematicPortal.java b/common/buildcraft/builders/schematics/SchematicPortal.java index c19068b5..777ada98 100755 --- a/common/buildcraft/builders/schematics/SchematicPortal.java +++ b/common/buildcraft/builders/schematics/SchematicPortal.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicPumpkin.java b/common/buildcraft/builders/schematics/SchematicPumpkin.java index 8536a1a7..0b72373b 100644 --- a/common/buildcraft/builders/schematics/SchematicPumpkin.java +++ b/common/buildcraft/builders/schematics/SchematicPumpkin.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicRedstoneDiode.java b/common/buildcraft/builders/schematics/SchematicRedstoneDiode.java index cf989f89..4b587455 100644 --- a/common/buildcraft/builders/schematics/SchematicRedstoneDiode.java +++ b/common/buildcraft/builders/schematics/SchematicRedstoneDiode.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicRedstoneLamp.java b/common/buildcraft/builders/schematics/SchematicRedstoneLamp.java index 2a766346..9463b5f7 100755 --- a/common/buildcraft/builders/schematics/SchematicRedstoneLamp.java +++ b/common/buildcraft/builders/schematics/SchematicRedstoneLamp.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicRedstoneWire.java b/common/buildcraft/builders/schematics/SchematicRedstoneWire.java index 6634e767..860f186a 100755 --- a/common/buildcraft/builders/schematics/SchematicRedstoneWire.java +++ b/common/buildcraft/builders/schematics/SchematicRedstoneWire.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicSeeds.java b/common/buildcraft/builders/schematics/SchematicSeeds.java index 936bc4c1..6224e5cd 100755 --- a/common/buildcraft/builders/schematics/SchematicSeeds.java +++ b/common/buildcraft/builders/schematics/SchematicSeeds.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicSign.java b/common/buildcraft/builders/schematics/SchematicSign.java index ef08744e..a0f4fd4e 100644 --- a/common/buildcraft/builders/schematics/SchematicSign.java +++ b/common/buildcraft/builders/schematics/SchematicSign.java @@ -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 } diff --git a/common/buildcraft/builders/schematics/SchematicStairs.java b/common/buildcraft/builders/schematics/SchematicStairs.java index 371a39d3..9b9aa132 100644 --- a/common/buildcraft/builders/schematics/SchematicStairs.java +++ b/common/buildcraft/builders/schematics/SchematicStairs.java @@ -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) { } diff --git a/common/buildcraft/builders/schematics/SchematicStone.java b/common/buildcraft/builders/schematics/SchematicStone.java index e4fb98c1..d09d8fc9 100755 --- a/common/buildcraft/builders/schematics/SchematicStone.java +++ b/common/buildcraft/builders/schematics/SchematicStone.java @@ -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) { } diff --git a/common/buildcraft/core/blueprints/Blueprint.java b/common/buildcraft/core/blueprints/Blueprint.java index 52162bf5..84bf795c 100644 --- a/common/buildcraft/core/blueprints/Blueprint.java +++ b/common/buildcraft/core/blueprints/Blueprint.java @@ -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; diff --git a/common/buildcraft/core/blueprints/BlueprintBase.java b/common/buildcraft/core/blueprints/BlueprintBase.java index bff744d8..dabf7a15 100644 --- a/common/buildcraft/core/blueprints/BlueprintBase.java +++ b/common/buildcraft/core/blueprints/BlueprintBase.java @@ -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); } } } diff --git a/common/buildcraft/core/blueprints/RealBlueprintDeployer.java b/common/buildcraft/core/blueprints/RealBlueprintDeployer.java index 744e7a7b..33063334 100755 --- a/common/buildcraft/core/blueprints/RealBlueprintDeployer.java +++ b/common/buildcraft/core/blueprints/RealBlueprintDeployer.java @@ -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(); } diff --git a/common/buildcraft/core/inventory/SimpleInventory.java b/common/buildcraft/core/inventory/SimpleInventory.java index d53972e5..4f475c81 100644 --- a/common/buildcraft/core/inventory/SimpleInventory.java +++ b/common/buildcraft/core/inventory/SimpleInventory.java @@ -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) { diff --git a/common/buildcraft/core/utils/Utils.java b/common/buildcraft/core/utils/Utils.java index 18568ecb..4fd65c4a 100644 --- a/common/buildcraft/core/utils/Utils.java +++ b/common/buildcraft/core/utils/Utils.java @@ -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); - } } diff --git a/common/buildcraft/energy/SchematicEngine.java b/common/buildcraft/energy/SchematicEngine.java index ec423963..97883719 100644 --- a/common/buildcraft/energy/SchematicEngine.java +++ b/common/buildcraft/energy/SchematicEngine.java @@ -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()); diff --git a/common/buildcraft/factory/SchematicRefinery.java b/common/buildcraft/factory/SchematicRefinery.java index 1a0e3b34..a945ef22 100644 --- a/common/buildcraft/factory/SchematicRefinery.java +++ b/common/buildcraft/factory/SchematicRefinery.java @@ -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)); diff --git a/common/buildcraft/factory/SchematicTank.java b/common/buildcraft/factory/SchematicTank.java index 96f0cde1..a11096dc 100644 --- a/common/buildcraft/factory/SchematicTank.java +++ b/common/buildcraft/factory/SchematicTank.java @@ -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) { } diff --git a/common/buildcraft/factory/TileHopper.java b/common/buildcraft/factory/TileHopper.java index c202e100..31f5abf2 100644 --- a/common/buildcraft/factory/TileHopper.java +++ b/common/buildcraft/factory/TileHopper.java @@ -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 diff --git a/common/buildcraft/silicon/schematics/SchematicLaserTableBase.java b/common/buildcraft/silicon/schematics/SchematicLaserTableBase.java new file mode 100755 index 00000000..6ad7f2bb --- /dev/null +++ b/common/buildcraft/silicon/schematics/SchematicLaserTableBase.java @@ -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"); + } + +} diff --git a/common/buildcraft/transport/TileFilteredBuffer.java b/common/buildcraft/transport/TileFilteredBuffer.java index fa2618e8..fd655f3f 100644 --- a/common/buildcraft/transport/TileFilteredBuffer.java +++ b/common/buildcraft/transport/TileFilteredBuffer.java @@ -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); diff --git a/common/buildcraft/transport/schematics/BptItemPipeEmerald.java b/common/buildcraft/transport/schematics/BptItemPipeEmerald.java new file mode 100755 index 00000000..9e0f9a23 --- /dev/null +++ b/common/buildcraft/transport/schematics/BptItemPipeEmerald.java @@ -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) { + + } +} diff --git a/common/buildcraft/transport/blueprints/BptItemPipeFilters.java b/common/buildcraft/transport/schematics/BptItemPipeFilters.java similarity index 96% rename from common/buildcraft/transport/blueprints/BptItemPipeFilters.java rename to common/buildcraft/transport/schematics/BptItemPipeFilters.java index 5e1b0d32..2a6dee24 100644 --- a/common/buildcraft/transport/blueprints/BptItemPipeFilters.java +++ b/common/buildcraft/transport/schematics/BptItemPipeFilters.java @@ -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); diff --git a/common/buildcraft/transport/blueprints/BptPipeExtension.java b/common/buildcraft/transport/schematics/BptPipeExtension.java similarity index 96% rename from common/buildcraft/transport/blueprints/BptPipeExtension.java rename to common/buildcraft/transport/schematics/BptPipeExtension.java index e50de2a1..bc095fd2 100755 --- a/common/buildcraft/transport/blueprints/BptPipeExtension.java +++ b/common/buildcraft/transport/schematics/BptPipeExtension.java @@ -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); } + } diff --git a/common/buildcraft/transport/blueprints/BptPipeIron.java b/common/buildcraft/transport/schematics/BptPipeIron.java similarity index 95% rename from common/buildcraft/transport/blueprints/BptPipeIron.java rename to common/buildcraft/transport/schematics/BptPipeIron.java index 58c9681a..9f70c92d 100644 --- a/common/buildcraft/transport/blueprints/BptPipeIron.java +++ b/common/buildcraft/transport/schematics/BptPipeIron.java @@ -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; diff --git a/common/buildcraft/transport/blueprints/BptPipeWooden.java b/common/buildcraft/transport/schematics/BptPipeWooden.java similarity index 95% rename from common/buildcraft/transport/blueprints/BptPipeWooden.java rename to common/buildcraft/transport/schematics/BptPipeWooden.java index 1e4fa0f6..dfaf7cff 100644 --- a/common/buildcraft/transport/blueprints/BptPipeWooden.java +++ b/common/buildcraft/transport/schematics/BptPipeWooden.java @@ -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; diff --git a/common/buildcraft/transport/schematics/SchematicFilteredBuffer.java b/common/buildcraft/transport/schematics/SchematicFilteredBuffer.java new file mode 100755 index 00000000..f9521d3d --- /dev/null +++ b/common/buildcraft/transport/schematics/SchematicFilteredBuffer.java @@ -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"); + } + +} diff --git a/common/buildcraft/transport/blueprints/SchematicPipe.java b/common/buildcraft/transport/schematics/SchematicPipe.java similarity index 63% rename from common/buildcraft/transport/blueprints/SchematicPipe.java rename to common/buildcraft/transport/schematics/SchematicPipe.java index 7841529d..0bd4e1f7 100644 --- a/common/buildcraft/transport/blueprints/SchematicPipe.java +++ b/common/buildcraft/transport/schematics/SchematicPipe.java @@ -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; + } }