requirements extraction is now cleaner

This commit is contained in:
SpaceToad 2014-05-04 18:25:28 +02:00
parent decc8ccf10
commit aca1678591
29 changed files with 224 additions and 127 deletions

View file

@ -77,22 +77,13 @@ public abstract class Schematic {
return true;
}
public final LinkedList<ItemStack> getRequirements(IBuilderContext context) {
LinkedList<ItemStack> res = new LinkedList<ItemStack>();
addRequirements(context, res);
return res;
}
/**
* Returns the requirements needed to build this block. When the
* requirements are met, they will be removed all at once from the builder,
* before calling buildBlock.
* Return true if the block should not be placed to the world. Requirements
* will not be asked on such a block, and building will not be called. Post
* processing will still be called on these blocks though.
*/
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public boolean doNotBuild() {
return false;
}
/**
@ -205,6 +196,19 @@ public abstract class Schematic {
}
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
/**
* Returns the requirements needed to build this block. When the
* requirements are met, they will be removed all at once from the builder,
* before calling buildBlock.
*/
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
}
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
}

View file

@ -26,6 +26,7 @@ public class SchematicBlock extends SchematicBlockBase {
public Block block = null;
public int meta = 0;
public BuildingPermission defaultPermission = BuildingPermission.ALL;
/**
* This field contains requirements for a given block when stored in the
@ -34,13 +35,8 @@ public class SchematicBlock extends SchematicBlockBase {
*/
public ItemStack [] storedRequirements = new ItemStack [0];
/**
* Returns the requirements needed to build this block. When the
* requirements are met, they will be removed all at once from the builder,
* before calling buildBlock.
*/
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
if (block != null) {
if (storedRequirements.length != 0) {
for (ItemStack s : storedRequirements) {
@ -52,27 +48,16 @@ public class SchematicBlock extends SchematicBlockBase {
}
}
/**
* Return true if the block on the world correspond to the block stored in
* the blueprint at the location given by the slot. By default, this
* subprogram is permissive and doesn't take into account metadata.
*/
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
return block == context.world().getBlock(x, y, z) && meta == context.world().getBlockMetadata(x, y, z);
}
/**
* Perform a 90 degree rotation to the slot.
*/
@Override
public void rotateLeft(IBuilderContext context) {
}
/**
* Places the block in the world, at the location specified in the slot.
*/
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
// Meta needs to be specified twice, depending on the block behavior
@ -80,26 +65,20 @@ public class SchematicBlock extends SchematicBlockBase {
context.world().setBlockMetadataWithNotify(x, y, z, meta, 3);
}
/**
* Return true if the block should not be placed to the world. Requirements
* will not be asked on such a block, and building will not be called.
*/
@Override
public boolean doNotBuild() {
return false;
}
/**
* Initializes a slot from the blueprint according to an objet placed on {x,
* y, z} on the world. This typically means adding entries in slot.cpt. Note
* that "id" and "meta" will be set automatically, corresponding to the
* block id and meta.
*
* By default, if the block is a BlockContainer, tile information will be to
* save / load the block.
*/
@Override
public void readFromWorld(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);
if (block != null) {
ArrayList<ItemStack> req = block.getDrops(context.world(), x,
y, z, context.world().getBlockMetadata(x, y, z), 0);
@ -116,16 +95,18 @@ public class SchematicBlock extends SchematicBlockBase {
nbt.setInteger("blockId", registry.getIdForBlock(block));
nbt.setInteger("blockMeta", meta);
NBTTagList rq = new NBTTagList();
if (storedRequirements.length > 0) {
NBTTagList rq = new NBTTagList();
for (ItemStack stack : storedRequirements) {
NBTTagCompound sub = new NBTTagCompound();
stack.writeToNBT(stack.writeToNBT(sub));
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
rq.appendTag(sub);
for (ItemStack stack : storedRequirements) {
NBTTagCompound sub = new NBTTagCompound();
stack.writeToNBT(stack.writeToNBT(sub));
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
rq.appendTag(sub);
}
nbt.setTag("rq", rq);
}
nbt.setTag("rq", rq);
}
@Override
@ -133,33 +114,35 @@ public class SchematicBlock extends SchematicBlockBase {
block = registry.getBlockForId(nbt.getInteger("blockId"));
meta = nbt.getInteger("blockMeta");
NBTTagList rq = nbt.getTagList("rq", Constants.NBT.TAG_COMPOUND);
if (nbt.hasKey("rq")) {
NBTTagList rq = nbt.getTagList("rq", Constants.NBT.TAG_COMPOUND);
ArrayList<ItemStack> rqs = new ArrayList<ItemStack>();
ArrayList<ItemStack> rqs = new ArrayList<ItemStack>();
for (int i = 0; i < rq.tagCount(); ++i) {
try {
NBTTagCompound sub = rq.getCompoundTagAt(i);
for (int i = 0; i < rq.tagCount(); ++i) {
try {
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"))));
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"))));
rqs.add(ItemStack.loadItemStackFromNBT(sub));
} else {
// TODO: requirement can't be retreived, this blueprint is
// only useable in creative
rqs.add(ItemStack.loadItemStackFromNBT(sub));
} else {
defaultPermission = BuildingPermission.CREATIVE_ONLY;
}
} catch (Throwable t) {
t.printStackTrace();
defaultPermission = BuildingPermission.CREATIVE_ONLY;
}
} catch (Throwable t) {
t.printStackTrace();
// TODO: requirement can't be retreived, this blueprint is
// only useable in creative
}
}
storedRequirements = rqs.toArray(new ItemStack [rqs.size()]);
storedRequirements = rqs.toArray(new ItemStack[rqs.size()]);
} else {
storedRequirements = new ItemStack[0];
}
}
@Override
@ -174,4 +157,9 @@ public class SchematicBlock extends SchematicBlockBase {
return BuildingStage.SUPPORTED;
}
}
@Override
public BuildingPermission getBuildingPermission() {
return defaultPermission;
}
}

View file

@ -34,13 +34,4 @@ package buildcraft.api.blueprints;
*/
public abstract class SchematicBlockBase extends Schematic {
/**
* Return true if the block should not be placed to the world. Requirements
* will not be asked on such a block, and building will not be called.
* Post processing will still be called on these blocks though.
*/
public boolean doNotBuild() {
return false;
}
}

View file

@ -19,7 +19,9 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagDouble;
import net.minecraft.nbt.NBTTagFloat;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants;
import buildcraft.api.core.Position;
public class SchematicEntity extends Schematic {
@ -36,7 +38,7 @@ public class SchematicEntity extends Schematic {
public ItemStack[] storedRequirements = new ItemStack[0];
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
for (ItemStack s : storedRequirements) {
requirements.add(s);
}

View file

@ -58,15 +58,6 @@ public class SchematicTile extends SchematicBlock {
}
}
/**
* Initializes a slot from the blueprint according to an objet placed on {x,
* y, z} on the world. This typically means adding entries in slot.cpt. Note
* that "id" and "meta" will be set automatically, corresponding to the
* block id and meta.
*
* By default, if the block is a BlockContainer, tile information will be to
* save / load the block.
*/
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
super.readFromWorld(context, x, y, z);
@ -77,6 +68,15 @@ public class SchematicTile extends SchematicBlock {
if (tile != null) {
tile.writeToNBT(cpt);
}
}
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
super.readRequirementsFromWorld(context, x, y, z);
if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z);
if (tile instanceof IInventory) {
IInventory inv = (IInventory) tile;

View file

@ -19,12 +19,17 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicBed extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
if ((meta & 8) == 0) {
requirements.add(new ItemStack(Items.bed));
}
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void rotateLeft(IBuilderContext context) {
int orientation = meta & 7;

View file

@ -19,10 +19,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicCactus extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.cactus));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, Blocks.cactus, 0, 3);

View file

@ -24,8 +24,12 @@ public class SchematicCustomStack extends SchematicBlock {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(customStack.copy());
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
}

View file

@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicDirt extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.dirt));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, Blocks.dirt, meta, 3);

View file

@ -28,12 +28,17 @@ public class SchematicDoor extends SchematicBlock {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
if ((meta & 8) == 0) {
requirements.add(stack.copy());
}
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void rotateLeft(IBuilderContext context) {
meta = rotateMeta(meta);

View file

@ -13,6 +13,7 @@ import java.util.LinkedList;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
public class SchematicEnderChest extends SchematicRotateMeta {
@ -22,11 +23,16 @@ public class SchematicEnderChest extends SchematicRotateMeta {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.obsidian, 8));
requirements.add(new ItemStack(Items.ender_eye, 1));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
return block == context.world().getBlock(x, y, z);

View file

@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicFarmland extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.dirt));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, block, 0, 3);

View file

@ -12,19 +12,19 @@ import java.util.LinkedList;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
public class SchematicFire extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack (Items.flint_and_steel));
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
// No specific data to read from the world. Cancels the initialization
// of the requirement list.
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
}

View file

@ -26,12 +26,17 @@ public class SchematicFluid extends SchematicBlock {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
if (meta == 0) {
requirements.add(bucketStack.copy());
}
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
if (meta == 0) {
@ -51,11 +56,6 @@ public class SchematicFluid extends SchematicBlock {
return meta != 0;
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
// Cancel storage of requirements
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
if (meta == 0) {

View file

@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicGravel extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.gravel));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, Blocks.gravel, 0, 3);

View file

@ -18,7 +18,7 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicIgnore extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
}
@ -37,6 +37,11 @@ public class SchematicIgnore extends SchematicBlock {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public boolean doNotBuild() {
return true;

View file

@ -11,16 +11,22 @@ package buildcraft.builders.schematics;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
public class SchematicIgnoreMeta extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(block, 1, 0));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
return block == context.world().getBlock(x, y, z);

View file

@ -19,7 +19,12 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicPortal extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}

View file

@ -11,16 +11,22 @@ package buildcraft.builders.schematics;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
public class SchematicPumpkin extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(block, 1, 0));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
return block == context.world().getBlock(x, y, z);

View file

@ -19,10 +19,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicRedstoneDiode extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Items.repeater));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public void rotateLeft(IBuilderContext context) {
int step = meta - (meta & 3);

View file

@ -24,10 +24,15 @@ public class SchematicRedstoneWire extends SchematicBlock {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(customStack.copy());
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, block, 0, 3);

View file

@ -25,10 +25,15 @@ public class SchematicSeeds extends SchematicBlock {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(seeds));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, block, 0, 3);

View file

@ -27,10 +27,15 @@ public class SchematicSign extends SchematicTile {
}
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Items.sign));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
// cancel requirements reading
}
@Override
public void rotateLeft(IBuilderContext context) {
if (!isWall) {

View file

@ -11,16 +11,22 @@ package buildcraft.builders.schematics;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
public class SchematicStairs extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(block, 1, 0));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
return block == context.world().getBlock(x, y, z);

View file

@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
public class SchematicStone extends SchematicBlock {
@Override
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
requirements.add(new ItemStack(Blocks.stone));
}
@Override
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
context.world().setBlock(x, y, z, Blocks.stone, 0, 3);

View file

@ -100,6 +100,7 @@ public class Blueprint extends BlueprintBase {
try {
slot.readFromWorld(context, x, y, z);
slot.readRequirementsFromWorld(context, x, y, z);
contents[posX][posY][posZ] = slot;
} catch (Throwable t) {
// Defensive code against errors in implementers

View file

@ -370,7 +370,11 @@ public class BptBuilderBlueprint extends BptBuilderBase {
LinkedList<ItemStack> tmpReq = new LinkedList<ItemStack>();
try {
for (ItemStack stk : slot.getRequirements(context)) {
LinkedList<ItemStack> req = new LinkedList<ItemStack>();
slot.writeRequirementsToBuilder(context, req);
for (ItemStack stk : req) {
if (stk != null) {
tmpReq.add(stk.copy());
}

View file

@ -14,7 +14,9 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.Constants;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.MappingRegistry;
import buildcraft.api.blueprints.SchematicBlockBase;
@ -83,7 +85,11 @@ public class BuildingSlotBlock extends BuildingSlot {
if (mode == Mode.ClearIfInvalid) {
return new LinkedList<ItemStack>();
} else {
return getSchematic().getRequirements(context);
LinkedList<ItemStack> req = new LinkedList<ItemStack>();
getSchematic().writeRequirementsToBuilder(context, req);
return req;
}
}

View file

@ -94,12 +94,6 @@ public class SchematicPipe extends SchematicTile {
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
if (BlockGenericPipe.isValid(pipe)) {
ArrayList<ItemStack> items = pipe.computeItemDrop();
storedRequirements = new ItemStack [items.size() + 1];
items.toArray(storedRequirements);
storedRequirements[storedRequirements.length - 1] = new ItemStack(
pipe.item);
tile.writeToNBT(cpt);
// This overrides the default pipeId
@ -125,6 +119,20 @@ public class SchematicPipe extends SchematicTile {
}
}
@Override
public void readRequirementsFromWorld(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);
if (BlockGenericPipe.isValid(pipe)) {
ArrayList<ItemStack> items = pipe.computeItemDrop();
storedRequirements = new ItemStack[items.size() + 1];
items.toArray(storedRequirements);
storedRequirements[storedRequirements.length - 1] = new ItemStack(
pipe.item);
}
}
@Override
public void postProcessing(IBuilderContext context, int x, int y, int z) {
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));