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;
|
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
|
* Return true if the block should not be placed to the world. Requirements
|
||||||
* requirements are met, they will be removed all at once from the builder,
|
* will not be asked on such a block, and building will not be called. Post
|
||||||
* before calling buildBlock.
|
* 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) {
|
public void writeToNBT(NBTTagCompound nbt, MappingRegistry registry) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
|
|
||||||
public Block block = null;
|
public Block block = null;
|
||||||
public int meta = 0;
|
public int meta = 0;
|
||||||
|
public BuildingPermission defaultPermission = BuildingPermission.ALL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This field contains requirements for a given block when stored in the
|
* 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];
|
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
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
if (block != null) {
|
if (block != null) {
|
||||||
if (storedRequirements.length != 0) {
|
if (storedRequirements.length != 0) {
|
||||||
for (ItemStack s : storedRequirements) {
|
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
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
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);
|
return block == context.world().getBlock(x, y, z) && meta == context.world().getBlockMetadata(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform a 90 degree rotation to the slot.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void rotateLeft(IBuilderContext context) {
|
public void rotateLeft(IBuilderContext context) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Places the block in the world, at the location specified in the slot.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
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
|
// 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);
|
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
|
@Override
|
||||||
public boolean doNotBuild() {
|
public boolean doNotBuild() {
|
||||||
return false;
|
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
|
@Override
|
||||||
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
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) {
|
if (block != null) {
|
||||||
ArrayList<ItemStack> req = block.getDrops(context.world(), x,
|
ArrayList<ItemStack> req = block.getDrops(context.world(), x,
|
||||||
y, z, context.world().getBlockMetadata(x, y, z), 0);
|
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("blockId", registry.getIdForBlock(block));
|
||||||
nbt.setInteger("blockMeta", meta);
|
nbt.setInteger("blockMeta", meta);
|
||||||
|
|
||||||
NBTTagList rq = new NBTTagList();
|
if (storedRequirements.length > 0) {
|
||||||
|
NBTTagList rq = new NBTTagList();
|
||||||
|
|
||||||
for (ItemStack stack : storedRequirements) {
|
for (ItemStack stack : storedRequirements) {
|
||||||
NBTTagCompound sub = new NBTTagCompound();
|
NBTTagCompound sub = new NBTTagCompound();
|
||||||
stack.writeToNBT(stack.writeToNBT(sub));
|
stack.writeToNBT(stack.writeToNBT(sub));
|
||||||
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
|
sub.setInteger("id", registry.getIdForItem(stack.getItem()));
|
||||||
rq.appendTag(sub);
|
rq.appendTag(sub);
|
||||||
|
}
|
||||||
|
|
||||||
|
nbt.setTag("rq", rq);
|
||||||
}
|
}
|
||||||
|
|
||||||
nbt.setTag("rq", rq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -133,33 +114,35 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
block = registry.getBlockForId(nbt.getInteger("blockId"));
|
||||||
meta = nbt.getInteger("blockMeta");
|
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) {
|
for (int i = 0; i < rq.tagCount(); ++i) {
|
||||||
try {
|
try {
|
||||||
NBTTagCompound sub = rq.getCompoundTagAt(i);
|
NBTTagCompound sub = rq.getCompoundTagAt(i);
|
||||||
|
|
||||||
if (sub.getInteger("id") >= 0) {
|
if (sub.getInteger("id") >= 0) {
|
||||||
// Maps the id in the blueprint to the id in the world
|
// Maps the id in the blueprint to the id in the world
|
||||||
sub.setInteger("id", Item.itemRegistry
|
sub.setInteger("id", Item.itemRegistry
|
||||||
.getIDForObject(registry.getItemForId(sub
|
.getIDForObject(registry.getItemForId(sub
|
||||||
.getInteger("id"))));
|
.getInteger("id"))));
|
||||||
|
|
||||||
rqs.add(ItemStack.loadItemStackFromNBT(sub));
|
rqs.add(ItemStack.loadItemStackFromNBT(sub));
|
||||||
} else {
|
} else {
|
||||||
// TODO: requirement can't be retreived, this blueprint is
|
defaultPermission = BuildingPermission.CREATIVE_ONLY;
|
||||||
// only useable in creative
|
}
|
||||||
|
} 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
|
@Override
|
||||||
|
@ -174,4 +157,9 @@ public class SchematicBlock extends SchematicBlockBase {
|
||||||
return BuildingStage.SUPPORTED;
|
return BuildingStage.SUPPORTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BuildingPermission getBuildingPermission() {
|
||||||
|
return defaultPermission;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,13 +34,4 @@ package buildcraft.api.blueprints;
|
||||||
*/
|
*/
|
||||||
public abstract class SchematicBlockBase extends Schematic {
|
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.NBTTagDouble;
|
||||||
import net.minecraft.nbt.NBTTagFloat;
|
import net.minecraft.nbt.NBTTagFloat;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
|
|
||||||
import buildcraft.api.core.Position;
|
import buildcraft.api.core.Position;
|
||||||
|
|
||||||
public class SchematicEntity extends Schematic {
|
public class SchematicEntity extends Schematic {
|
||||||
|
@ -36,7 +38,7 @@ public class SchematicEntity extends Schematic {
|
||||||
public ItemStack[] storedRequirements = new ItemStack[0];
|
public ItemStack[] storedRequirements = new ItemStack[0];
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
for (ItemStack s : storedRequirements) {
|
for (ItemStack s : storedRequirements) {
|
||||||
requirements.add(s);
|
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
|
@Override
|
||||||
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
super.readFromWorld(context, x, y, z);
|
super.readFromWorld(context, x, y, z);
|
||||||
|
@ -77,6 +68,15 @@ public class SchematicTile extends SchematicBlock {
|
||||||
if (tile != null) {
|
if (tile != null) {
|
||||||
tile.writeToNBT(cpt);
|
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) {
|
if (tile instanceof IInventory) {
|
||||||
IInventory inv = (IInventory) tile;
|
IInventory inv = (IInventory) tile;
|
||||||
|
|
|
@ -19,12 +19,17 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicBed extends SchematicBlock {
|
public class SchematicBed extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
if ((meta & 8) == 0) {
|
if ((meta & 8) == 0) {
|
||||||
requirements.add(new ItemStack(Items.bed));
|
requirements.add(new ItemStack(Items.bed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rotateLeft(IBuilderContext context) {
|
public void rotateLeft(IBuilderContext context) {
|
||||||
int orientation = meta & 7;
|
int orientation = meta & 7;
|
||||||
|
|
|
@ -19,10 +19,15 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicCactus extends SchematicBlock {
|
public class SchematicCactus extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Blocks.cactus));
|
requirements.add(new ItemStack(Blocks.cactus));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, Blocks.cactus, 0, 3);
|
context.world().setBlock(x, y, z, Blocks.cactus, 0, 3);
|
||||||
|
|
|
@ -24,8 +24,12 @@ public class SchematicCustomStack extends SchematicBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(customStack.copy());
|
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 {
|
public class SchematicDirt extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Blocks.dirt));
|
requirements.add(new ItemStack(Blocks.dirt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, Blocks.dirt, meta, 3);
|
context.world().setBlock(x, y, z, Blocks.dirt, meta, 3);
|
||||||
|
|
|
@ -28,12 +28,17 @@ public class SchematicDoor extends SchematicBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
if ((meta & 8) == 0) {
|
if ((meta & 8) == 0) {
|
||||||
requirements.add(stack.copy());
|
requirements.add(stack.copy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rotateLeft(IBuilderContext context) {
|
public void rotateLeft(IBuilderContext context) {
|
||||||
meta = rotateMeta(meta);
|
meta = rotateMeta(meta);
|
||||||
|
|
|
@ -13,6 +13,7 @@ import java.util.LinkedList;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
|
|
||||||
public class SchematicEnderChest extends SchematicRotateMeta {
|
public class SchematicEnderChest extends SchematicRotateMeta {
|
||||||
|
@ -22,11 +23,16 @@ public class SchematicEnderChest extends SchematicRotateMeta {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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(Blocks.obsidian, 8));
|
||||||
requirements.add(new ItemStack(Items.ender_eye, 1));
|
requirements.add(new ItemStack(Items.ender_eye, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
||||||
return block == context.world().getBlock(x, y, z);
|
return block == context.world().getBlock(x, y, z);
|
||||||
|
|
|
@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicFarmland extends SchematicBlock {
|
public class SchematicFarmland extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Blocks.dirt));
|
requirements.add(new ItemStack(Blocks.dirt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, block, 0, 3);
|
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.init.Items;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
import buildcraft.api.blueprints.SchematicBlock;
|
import buildcraft.api.blueprints.SchematicBlock;
|
||||||
|
|
||||||
public class SchematicFire extends SchematicBlock {
|
public class SchematicFire extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@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));
|
requirements.add(new ItemStack (Items.flint_and_steel));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
// No specific data to read from the world. Cancels the initialization
|
// cancel requirements reading
|
||||||
// of the requirement list.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,17 @@ public class SchematicFluid extends SchematicBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
if (meta == 0) {
|
if (meta == 0) {
|
||||||
requirements.add(bucketStack.copy());
|
requirements.add(bucketStack.copy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
||||||
if (meta == 0) {
|
if (meta == 0) {
|
||||||
|
@ -51,11 +56,6 @@ public class SchematicFluid extends SchematicBlock {
|
||||||
return meta != 0;
|
return meta != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
|
|
||||||
// Cancel storage of requirements
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
if (meta == 0) {
|
if (meta == 0) {
|
||||||
|
|
|
@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicGravel extends SchematicBlock {
|
public class SchematicGravel extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Blocks.gravel));
|
requirements.add(new ItemStack(Blocks.gravel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, Blocks.gravel, 0, 3);
|
context.world().setBlock(x, y, z, Blocks.gravel, 0, 3);
|
||||||
|
|
|
@ -18,7 +18,7 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicIgnore extends SchematicBlock {
|
public class SchematicIgnore extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@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
|
@Override
|
||||||
public boolean doNotBuild() {
|
public boolean doNotBuild() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -11,16 +11,22 @@ package buildcraft.builders.schematics;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
import buildcraft.api.blueprints.SchematicBlock;
|
import buildcraft.api.blueprints.SchematicBlock;
|
||||||
|
|
||||||
public class SchematicIgnoreMeta extends SchematicBlock {
|
public class SchematicIgnoreMeta extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(block, 1, 0));
|
requirements.add(new ItemStack(block, 1, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
||||||
return block == context.world().getBlock(x, y, z);
|
return block == context.world().getBlock(x, y, z);
|
||||||
|
|
|
@ -19,7 +19,12 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicPortal extends SchematicBlock {
|
public class SchematicPortal extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@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 java.util.LinkedList;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
import buildcraft.api.blueprints.SchematicBlock;
|
import buildcraft.api.blueprints.SchematicBlock;
|
||||||
|
|
||||||
public class SchematicPumpkin extends SchematicBlock {
|
public class SchematicPumpkin extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(block, 1, 0));
|
requirements.add(new ItemStack(block, 1, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
||||||
return block == context.world().getBlock(x, y, z);
|
return block == context.world().getBlock(x, y, z);
|
||||||
|
|
|
@ -19,10 +19,15 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicRedstoneDiode extends SchematicBlock {
|
public class SchematicRedstoneDiode extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Items.repeater));
|
requirements.add(new ItemStack(Items.repeater));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rotateLeft(IBuilderContext context) {
|
public void rotateLeft(IBuilderContext context) {
|
||||||
int step = meta - (meta & 3);
|
int step = meta - (meta & 3);
|
||||||
|
|
|
@ -24,10 +24,15 @@ public class SchematicRedstoneWire extends SchematicBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(customStack.copy());
|
requirements.add(customStack.copy());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, block, 0, 3);
|
context.world().setBlock(x, y, z, block, 0, 3);
|
||||||
|
|
|
@ -25,10 +25,15 @@ public class SchematicSeeds extends SchematicBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(seeds));
|
requirements.add(new ItemStack(seeds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, block, 0, 3);
|
context.world().setBlock(x, y, z, block, 0, 3);
|
||||||
|
|
|
@ -27,10 +27,15 @@ public class SchematicSign extends SchematicTile {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Items.sign));
|
requirements.add(new ItemStack(Items.sign));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
// cancel requirements reading
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rotateLeft(IBuilderContext context) {
|
public void rotateLeft(IBuilderContext context) {
|
||||||
if (!isWall) {
|
if (!isWall) {
|
||||||
|
|
|
@ -11,16 +11,22 @@ package buildcraft.builders.schematics;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
import buildcraft.api.blueprints.SchematicBlock;
|
import buildcraft.api.blueprints.SchematicBlock;
|
||||||
|
|
||||||
public class SchematicStairs extends SchematicBlock {
|
public class SchematicStairs extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(block, 1, 0));
|
requirements.add(new ItemStack(block, 1, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
|
||||||
return block == context.world().getBlock(x, y, z);
|
return block == context.world().getBlock(x, y, z);
|
||||||
|
|
|
@ -20,10 +20,15 @@ import buildcraft.api.blueprints.SchematicBlock;
|
||||||
public class SchematicStone extends SchematicBlock {
|
public class SchematicStone extends SchematicBlock {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addRequirements(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
public void writeRequirementsToBuilder(IBuilderContext context, LinkedList<ItemStack> requirements) {
|
||||||
requirements.add(new ItemStack(Blocks.stone));
|
requirements.add(new ItemStack(Blocks.stone));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readRequirementsFromWorld(IBuilderContext context, int x, int y, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList<ItemStack> stacks) {
|
||||||
context.world().setBlock(x, y, z, Blocks.stone, 0, 3);
|
context.world().setBlock(x, y, z, Blocks.stone, 0, 3);
|
||||||
|
|
|
@ -100,6 +100,7 @@ public class Blueprint extends BlueprintBase {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
slot.readFromWorld(context, x, y, z);
|
slot.readFromWorld(context, x, y, z);
|
||||||
|
slot.readRequirementsFromWorld(context, x, y, z);
|
||||||
contents[posX][posY][posZ] = slot;
|
contents[posX][posY][posZ] = slot;
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
// Defensive code against errors in implementers
|
// Defensive code against errors in implementers
|
||||||
|
|
|
@ -370,7 +370,11 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
LinkedList<ItemStack> tmpReq = new LinkedList<ItemStack>();
|
LinkedList<ItemStack> tmpReq = new LinkedList<ItemStack>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (ItemStack stk : slot.getRequirements(context)) {
|
LinkedList<ItemStack> req = new LinkedList<ItemStack>();
|
||||||
|
|
||||||
|
slot.writeRequirementsToBuilder(context, req);
|
||||||
|
|
||||||
|
for (ItemStack stk : req) {
|
||||||
if (stk != null) {
|
if (stk != null) {
|
||||||
tmpReq.add(stk.copy());
|
tmpReq.add(stk.copy());
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,9 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
|
|
||||||
import buildcraft.api.blueprints.IBuilderContext;
|
import buildcraft.api.blueprints.IBuilderContext;
|
||||||
import buildcraft.api.blueprints.MappingRegistry;
|
import buildcraft.api.blueprints.MappingRegistry;
|
||||||
import buildcraft.api.blueprints.SchematicBlockBase;
|
import buildcraft.api.blueprints.SchematicBlockBase;
|
||||||
|
@ -83,7 +85,11 @@ public class BuildingSlotBlock extends BuildingSlot {
|
||||||
if (mode == Mode.ClearIfInvalid) {
|
if (mode == Mode.ClearIfInvalid) {
|
||||||
return new LinkedList<ItemStack>();
|
return new LinkedList<ItemStack>();
|
||||||
} else {
|
} 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);
|
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
|
||||||
|
|
||||||
if (BlockGenericPipe.isValid(pipe)) {
|
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);
|
tile.writeToNBT(cpt);
|
||||||
|
|
||||||
// This overrides the default pipeId
|
// 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
|
@Override
|
||||||
public void postProcessing(IBuilderContext context, int x, int y, int z) {
|
public void postProcessing(IBuilderContext context, int x, int y, int z) {
|
||||||
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
|
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
|
||||||
|
|
Loading…
Reference in a new issue