requirements extraction is now cleaner
This commit is contained in:
parent
decc8ccf10
commit
aca1678591
29 changed files with 224 additions and 127 deletions
|
@ -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) {
|
||||
|
||||
}
|
||||
|
|
|
@ -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,6 +95,7 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
nbt.setInteger("blockId", registry.getIdForBlock(block));
|
||||
nbt.setInteger("blockMeta", meta);
|
||||
|
||||
if (storedRequirements.length > 0) {
|
||||
NBTTagList rq = new NBTTagList();
|
||||
|
||||
for (ItemStack stack : storedRequirements) {
|
||||
|
@ -127,12 +107,14 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
|
||||
nbt.setTag("rq", rq);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
||||
meta = nbt.getInteger("blockMeta");
|
||||
|
||||
if (nbt.hasKey("rq")) {
|
||||
NBTTagList rq = nbt.getTagList("rq", Constants.NBT.TAG_COMPOUND);
|
||||
|
||||
ArrayList<ItemStack> rqs = new ArrayList<ItemStack>();
|
||||
|
@ -149,17 +131,18 @@ public class SchematicBlock extends SchematicBlockBase {
|
|||
|
||||
rqs.add(ItemStack.loadItemStackFromNBT(sub));
|
||||
} else {
|
||||
// TODO: requirement can't be retreived, this blueprint is
|
||||
// only useable in creative
|
||||
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
// TODO: requirement can't be retreived, this blueprint is
|
||||
// only useable in creative
|
||||
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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"));
|
||||
|
|
Loading…
Reference in a new issue