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:
parent
2738fbaef0
commit
98d2e2e2e6
53 changed files with 410 additions and 340 deletions
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
* 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
|
||||
* 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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ import java.util.LinkedList;
|
|||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockFalling;
|
||||
import net.minecraft.block.BlockLiquid;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
|
@ -71,13 +70,13 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||
public void writeToSchematic(IBuilderContext context, int x, int y, int z) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||
super.readRequirementsFromWorld(context, x, y, z);
|
||||
public void writeRequirementsToSchematic(IBuilderContext context, int x, int y, int z) {
|
||||
super.writeRequirementsToSchematic(context, x, y, z);
|
||||
|
||||
if (block != null) {
|
||||
ArrayList<ItemStack> req = block.getDrops(context.world(), x,
|
||||
|
@ -92,6 +91,8 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||
super.writeToNBT(nbt, registry);
|
||||
|
||||
nbt.setInteger("blockId", registry.getIdForBlock(block));
|
||||
nbt.setInteger("blockMeta", meta);
|
||||
|
||||
|
@ -100,8 +101,8 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
|
||||
for (ItemStack stack : storedRequirements) {
|
||||
NBTTagCompound sub = new NBTTagCompound();
|
||||
stack.writeToNBT(stack.writeToNBT(sub));
|
||||
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
|
||||
stack.writeToNBT(sub);
|
||||
registry.stackToRegistry(sub);
|
||||
rq.appendTag(sub);
|
||||
}
|
||||
|
||||
|
@ -111,6 +112,8 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||
super.readFromNBT(nbt, registry);
|
||||
|
||||
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
||||
meta = nbt.getInteger("blockMeta");
|
||||
|
||||
|
@ -124,11 +127,7 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
NBTTagCompound sub = rq.getCompoundTagAt(i);
|
||||
|
||||
if (sub.getInteger("id") >= 0) {
|
||||
// Maps the id in the blueprint to the id in the world
|
||||
sub.setInteger("id", Item.itemRegistry
|
||||
.getIDForObject(registry.getItemForId(sub
|
||||
.getInteger("id"))));
|
||||
|
||||
registry.stackToWorld(sub);
|
||||
rqs.add(ItemStack.loadItemStackFromNBT(sub));
|
||||
} else {
|
||||
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
||||
|
|
|
@ -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 {
|
||||
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,9 +25,4 @@ public final class BuildersProxy {
|
|||
|
||||
return !(block == null || !block.renderAsNormalBlock());
|
||||
}
|
||||
|
||||
public static String getOwner(TileBlueprintLibrary library) {
|
||||
return library.owner;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -18,12 +18,11 @@ import net.minecraft.nbt.CompressedStreamTools;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import buildcraft.BuildCraftBuilders;
|
||||
import buildcraft.api.core.NetworkData;
|
||||
import buildcraft.builders.blueprints.BlueprintId;
|
||||
import buildcraft.builders.blueprints.BlueprintId.Kind;
|
||||
import buildcraft.core.TileBuildCraft;
|
||||
import buildcraft.core.blueprints.BlueprintBase;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.inventory.SimpleInventory;
|
||||
import buildcraft.core.network.RPC;
|
||||
import buildcraft.core.network.RPCHandler;
|
||||
import buildcraft.core.network.RPCSide;
|
||||
|
@ -36,14 +35,11 @@ import buildcraft.core.network.RPCSide;
|
|||
public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
||||
private static final int PROGRESS_TIME = 100;
|
||||
|
||||
public ItemStack[] stack = new ItemStack[4];
|
||||
public SimpleInventory inv = new SimpleInventory(4, "Blueprint Library", 1);
|
||||
|
||||
public int progressIn = 0;
|
||||
public int progressOut = 0;
|
||||
|
||||
@NetworkData
|
||||
public String owner = "";
|
||||
|
||||
public ArrayList<BlueprintId> currentPage;
|
||||
|
||||
public int selected = -1;
|
||||
|
@ -105,18 +101,14 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
public void readFromNBT(NBTTagCompound nbttagcompound) {
|
||||
super.readFromNBT(nbttagcompound);
|
||||
|
||||
owner = nbttagcompound.getString("owner");
|
||||
|
||||
InvUtils.readStacksFromNBT(nbttagcompound, "stack", stack);
|
||||
inv.readFromNBT(nbttagcompound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||||
super.writeToNBT(nbttagcompound);
|
||||
|
||||
nbttagcompound.setString("owner", owner);
|
||||
|
||||
InvUtils.writeStacksToNBT(nbttagcompound, "stack", stack);
|
||||
inv.writeToNBT(nbttagcompound);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -126,30 +118,20 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int i) {
|
||||
return stack[i];
|
||||
return inv.getStackInSlot(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j) {
|
||||
if (stack[i] == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ItemStack res = stack[i].splitStack(j);
|
||||
|
||||
if (stack[i].stackSize == 0) {
|
||||
stack[i] = null;
|
||||
}
|
||||
|
||||
return res;
|
||||
return inv.decrStackSize(i, j);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int i, ItemStack itemstack) {
|
||||
stack[i] = itemstack;
|
||||
inv.setInventorySlotContents(i, itemstack);
|
||||
|
||||
if (i == 0) {
|
||||
if (stack[0] != null && stack[0].getItem() instanceof ItemBlueprint) {
|
||||
if (getStackInSlot(0) != null && getStackInSlot(0).getItem() instanceof ItemBlueprint) {
|
||||
progressIn = 1;
|
||||
} else {
|
||||
progressIn = 0;
|
||||
|
@ -157,7 +139,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
}
|
||||
|
||||
if (i == 2) {
|
||||
if (stack[2] != null && stack[2].getItem() instanceof ItemBlueprint) {
|
||||
if (getStackInSlot(2) != null && getStackInSlot(2).getItem() instanceof ItemBlueprint) {
|
||||
progressOut = 1;
|
||||
} else {
|
||||
progressOut = 0;
|
||||
|
@ -167,13 +149,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
if (stack[slot] == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ItemStack toReturn = stack[slot];
|
||||
stack[slot] = null;
|
||||
return toReturn;
|
||||
return inv.getStackInSlotOnClosing(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -222,11 +198,11 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
|
||||
// On progress IN, we'll download the blueprint from the server to the
|
||||
// client, and then store it to the client.
|
||||
if (progressIn == 100 && stack[1] == null) {
|
||||
setInventorySlotContents(1, stack[0]);
|
||||
if (progressIn == 100 && getStackInSlot(1) == null) {
|
||||
setInventorySlotContents(1, getStackInSlot(0));
|
||||
setInventorySlotContents(0, null);
|
||||
|
||||
BlueprintBase bpt = ItemBlueprint.loadBlueprint(stack [1]);
|
||||
BlueprintBase bpt = ItemBlueprint.loadBlueprint(getStackInSlot(1));
|
||||
|
||||
if (bpt != null && uploadingPlayer != null) {
|
||||
RPCHandler.rpcPlayer(this, "downloadBlueprintToClient",
|
||||
|
@ -235,7 +211,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
}
|
||||
}
|
||||
|
||||
if (progressOut == 100 && stack[3] == null) {
|
||||
if (progressOut == 100 && getStackInSlot(3) == null) {
|
||||
RPCHandler.rpcPlayer(this, "requestSelectedBlueprint",
|
||||
downloadingPlayer);
|
||||
progressOut = 0;
|
||||
|
@ -274,7 +250,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
BuildCraftBuilders.serverDB.add(bpt);
|
||||
setInventorySlotContents(3, bpt.getStack());
|
||||
} else {
|
||||
setInventorySlotContents(3, stack[2]);
|
||||
setInventorySlotContents(3, getStackInSlot(2));
|
||||
}
|
||||
|
||||
setInventorySlotContents(2, null);
|
||||
|
@ -307,13 +283,13 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
}
|
||||
|
||||
private boolean isOuputConsistent () {
|
||||
if (selected == -1 || stack [2] == null) {
|
||||
if (selected == -1 || getStackInSlot(2) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (stack [2].getItem() instanceof ItemBlueprintStandard
|
||||
return (getStackInSlot(2).getItem() instanceof ItemBlueprintStandard
|
||||
&& currentPage.get(selected).kind == Kind.Blueprint) ||
|
||||
(stack [2].getItem() instanceof ItemBlueprintTemplate
|
||||
(getStackInSlot(2).getItem() instanceof ItemBlueprintTemplate
|
||||
&& currentPage.get(selected).kind == Kind.Template);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,10 +41,10 @@ import buildcraft.core.blueprints.BptBuilderBlueprint;
|
|||
import buildcraft.core.blueprints.BptBuilderTemplate;
|
||||
import buildcraft.core.blueprints.BptContext;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.inventory.SimpleInventory;
|
||||
import buildcraft.core.network.RPC;
|
||||
import buildcraft.core.network.RPCHandler;
|
||||
import buildcraft.core.network.RPCSide;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
||||
public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
||||
|
||||
|
@ -54,7 +54,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
public Box box = new Box();
|
||||
public PathIterator currentPathIterator;
|
||||
|
||||
private final ItemStack[] items = new ItemStack[28];
|
||||
private SimpleInventory inv = new SimpleInventory(28, "Builder", 64);
|
||||
private BptBuilderBase bluePrintBuilder;
|
||||
private LinkedList<BlockIndex> path;
|
||||
private LinkedList<ItemStack> requiredToBuild;
|
||||
|
@ -273,7 +273,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
BlueprintBase bpt = null;
|
||||
|
||||
try {
|
||||
bpt = ItemBlueprint.loadBlueprint(items [0]);
|
||||
bpt = ItemBlueprint.loadBlueprint(getStackInSlot(0));
|
||||
} catch (Throwable t) {
|
||||
setInventorySlotContents(0, null);
|
||||
t.printStackTrace();
|
||||
|
@ -313,11 +313,11 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
transform.y = y - bpt.anchorY;
|
||||
transform.z = z - bpt.anchorZ;
|
||||
|
||||
bpt.transformToWorld(transform);
|
||||
bpt.translateToWorld(transform);
|
||||
|
||||
if (items[0].getItem() instanceof ItemBlueprintStandard) {
|
||||
if (getStackInSlot(0).getItem() instanceof ItemBlueprintStandard) {
|
||||
return new BptBuilderBlueprint((Blueprint) bpt, worldObj, x, y, z);
|
||||
} else if (items[0].getItem() instanceof ItemBlueprintTemplate) {
|
||||
} else if (getStackInSlot(0).getItem() instanceof ItemBlueprintTemplate) {
|
||||
return new BptBuilderTemplate(bpt, worldObj, x, y, z);
|
||||
} else {
|
||||
return null;
|
||||
|
@ -325,7 +325,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
}
|
||||
|
||||
public void iterateBpt(boolean forceIterate) {
|
||||
if (items[0] == null || !(items[0].getItem() instanceof ItemBlueprint)) {
|
||||
if (getStackInSlot(0) == null || !(getStackInSlot(0).getItem() instanceof ItemBlueprint)) {
|
||||
if (bluePrintBuilder != null) {
|
||||
bluePrintBuilder = null;
|
||||
}
|
||||
|
@ -399,44 +399,35 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
|
||||
if (done) {
|
||||
boolean dropBlueprint = true;
|
||||
for (int i = 1; i < items.length; ++i) {
|
||||
if (items[i] == null) {
|
||||
items[i] = items[0];
|
||||
for (int i = 1; i < getSizeInventory(); ++i) {
|
||||
if (getStackInSlot(i) == null) {
|
||||
setInventorySlotContents(i, getStackInSlot(0));
|
||||
dropBlueprint = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (dropBlueprint) {
|
||||
InvUtils.dropItems(getWorld(), items[0], xCoord, yCoord, zCoord);
|
||||
InvUtils.dropItems(getWorld(), getStackInSlot(0), xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
||||
items[0] = null;
|
||||
setInventorySlotContents(0, null);
|
||||
box.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSizeInventory() {
|
||||
return items.length;
|
||||
return inv.getSizeInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int i) {
|
||||
return items[i];
|
||||
return inv.getStackInSlot(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j) {
|
||||
ItemStack result;
|
||||
if (items[i] == null) {
|
||||
result = null;
|
||||
} else if (items[i].stackSize > j) {
|
||||
result = items[i].splitStack(j);
|
||||
} else {
|
||||
ItemStack tmp = items[i];
|
||||
items[i] = null;
|
||||
result = tmp;
|
||||
}
|
||||
ItemStack result = inv.decrStackSize(i, j);
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
if (i == 0) {
|
||||
|
@ -451,7 +442,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
|
||||
@Override
|
||||
public void setInventorySlotContents(int i, ItemStack itemstack) {
|
||||
items[i] = itemstack;
|
||||
inv.setInventorySlotContents(i, itemstack);
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
if (i == 0) {
|
||||
|
@ -463,12 +454,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
if (items[slot] == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack toReturn = items[slot];
|
||||
items[slot] = null;
|
||||
return toReturn;
|
||||
return inv.getStackInSlotOnClosing(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -490,7 +476,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
public void readFromNBT(NBTTagCompound nbttagcompound) {
|
||||
super.readFromNBT(nbttagcompound);
|
||||
|
||||
Utils.readStacksFromNBT(nbttagcompound, "Items", items);
|
||||
inv.readFromNBT(nbttagcompound);
|
||||
|
||||
if (nbttagcompound.hasKey("box")) {
|
||||
box.initialize(nbttagcompound.getCompoundTag("box"));
|
||||
|
@ -516,7 +502,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine {
|
|||
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||||
super.writeToNBT(nbttagcompound);
|
||||
|
||||
Utils.writeStacksToNBT(nbttagcompound, "Items", items);
|
||||
inv.writeToNBT(nbttagcompound);
|
||||
|
||||
if (box.isInitialized()) {
|
||||
NBTTagCompound boxStore = new NBTTagCompound();
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -97,7 +97,13 @@ public class SimpleInventory implements IInventory, INBTTagable {
|
|||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound data) {
|
||||
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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
40
common/buildcraft/silicon/schematics/SchematicLaserTableBase.java
Executable file
40
common/buildcraft/silicon/schematics/SchematicLaserTableBase.java
Executable 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");
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
26
common/buildcraft/transport/schematics/BptItemPipeEmerald.java
Executable file
26
common/buildcraft/transport/schematics/BptItemPipeEmerald.java
Executable 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) {
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
|
@ -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;
|
30
common/buildcraft/transport/schematics/SchematicFilteredBuffer.java
Executable file
30
common/buildcraft/transport/schematics/SchematicFilteredBuffer.java
Executable 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");
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue