re-implemented item consumption in filler and templates, for #1503

This commit is contained in:
SpaceToad 2014-04-04 08:56:17 +02:00
parent e8eda47ec8
commit 1d97913609
24 changed files with 64 additions and 37 deletions

View file

@ -124,9 +124,10 @@ public class Schematic {
}
/**
* Places the block in the world, at the location specified in the slot.
* Places the block in the world, at the location specified in the slot,
* using the stack in parameters
*/
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
}

View file

@ -121,7 +121,7 @@ public class SchematicBlock extends Schematic implements Comparable<SchematicBl
* 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) {
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
context.world().setBlock(x, y, z, block, meta, 3);
context.world().setBlockMetadataWithNotify(x, y, z, meta, 3);

View file

@ -12,6 +12,7 @@ import java.util.LinkedList;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.BlockUtil;
public class SchematicMask extends Schematic {
@ -23,9 +24,17 @@ public class SchematicMask extends Schematic {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
if (isConcrete) {
context.world().setBlock(x, y, z, Blocks.brick_block, 0, 3);
if (stacks.size() == 0 || !BlockUtil.isSoftBlock(context.world(), x, y, z)) {
return;
} else {
ItemStack stack = stacks.getFirst();
stack.tryPlaceItemIntoWorld(
CoreProxy.proxy.getBuildCraftPlayer(context.world()),
context.world(), x, y, z, 1, 0.0f, 0.0f, 0.0f);
}
} else {
context.world().setBlock(x, y, z, Blocks.air, 0, 3);
}

View file

@ -9,6 +9,7 @@
package buildcraft.api.blueprints;
import java.util.ArrayList;
import java.util.LinkedList;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
@ -30,8 +31,8 @@ public class SchematicTile extends SchematicBlock {
* 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) {
super.writeToWorld(context, x, y, z);
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
super.writeToWorld(context, x, y, z, stacks);
if (block.hasTileEntity(meta)) {
TileEntity tile = context.world().getTileEntity(x, y, z);

View file

@ -10,9 +10,9 @@ package buildcraft.api.core;
public interface IBox {
public void expand(int amount);
public IBox expand(int amount);
public void contract(int amount);
public IBox contract(int amount);
public boolean contains(double x, double y, double z);

View file

@ -658,7 +658,7 @@ public class TileBuilder extends TileAbstractBuilder implements IMachine, IBoxPr
renderBox = renderBox.extendToEncompass(l.tail);
}
return renderBox.getBoundingBox();
return renderBox.expand(50).getBoundingBox();
}
public void debugForceBlueprintCompletion () {

View file

@ -328,7 +328,7 @@ public class TileFiller extends TileAbstractBuilder implements IMachine, IAction
@Override
public AxisAlignedBB getRenderBoundingBox() {
return new Box (this).extendToEncompass(box).getBoundingBox();
return new Box (this).extendToEncompass(box).expand(50).getBoundingBox();
}
@Override

View file

@ -8,8 +8,7 @@
*/
package buildcraft.builders.filler.pattern;
import net.minecraft.init.Blocks;
import buildcraft.api.blueprints.SchematicRegistry;
import buildcraft.api.blueprints.SchematicMask;
import buildcraft.core.Box;
import buildcraft.core.blueprints.Template;
@ -57,7 +56,7 @@ public class PatternPyramid extends FillerPattern {
while (step <= xSize / 2 && step <= zSize / 2 && height >= yMin && height <= yMax) {
for (int x = xMin + step; x <= xMax - step; ++x) {
for (int z = zMin + step; z <= zMax - step; ++z) {
bpt.contents [x - xMin][height - yMin][z - zMin] = SchematicRegistry.newSchematicBlock(Blocks.stone);
bpt.contents [x - xMin][height - yMin][z - zMin] = new SchematicMask(true);
}
}

View file

@ -46,7 +46,7 @@ public class SchematicBed extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
if ((meta & 8) != 0) {
return;
}

View file

@ -24,7 +24,7 @@ public class SchematicDirt extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
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

@ -63,7 +63,7 @@ public class SchematicDoor extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
context.world().setBlock(x, y, z, block, meta, 3);
context.world().setBlock(x, y + 1, z, block, upperMeta, 3);

View file

@ -24,7 +24,7 @@ public class SchematicFarmland extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
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

@ -54,7 +54,7 @@ public class SchematicFluid extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
if (meta == 0) {
context.world().setBlock(x, y, z, block, 0, 3);
}

View file

@ -8,6 +8,9 @@
*/
package buildcraft.builders.schematics;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
public class SchematicPiston extends SchematicRotateMeta {
@ -17,7 +20,7 @@ public class SchematicPiston extends SchematicRotateMeta {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
int localMeta = meta & 7;
context.world().setBlock(x, y, z, block, localMeta, 3);

View file

@ -23,7 +23,7 @@ public class SchematicPortal extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
}
@Override

View file

@ -8,6 +8,9 @@
*/
package buildcraft.builders.schematics;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicBlock;
@ -52,7 +55,7 @@ public class SchematicRail extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
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

@ -29,7 +29,7 @@ public class SchematicSeeds extends SchematicBlock {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
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

@ -141,18 +141,20 @@ public class Box implements IBox {
}
@Override
public void expand(int amount) {
xMin += amount;
yMin += amount;
zMin += amount;
public Box expand(int amount) {
xMin -= amount;
yMin -= amount;
zMin -= amount;
xMax += amount;
yMax += amount;
zMax += amount;
return this;
}
@Override
public void contract(int amount) {
expand(-amount);
public IBox contract(int amount) {
return expand(-amount);
}
@Override

View file

@ -26,7 +26,6 @@ public class BptBuilderTemplate extends BptBuilderBase {
private LinkedList<BuildingSlotBlock> buildList = new LinkedList<BuildingSlotBlock>();
private BuildingSlotIterator iterator;
public BptBuilderTemplate(BlueprintBase bluePrint, World world, int x, int y, int z) {
super(bluePrint, world, x, y, z);

View file

@ -44,7 +44,7 @@ public class BuildingSlotBlock extends BuildingSlot implements Comparable<Buildi
}
} else {
try {
getSchematic().writeToWorld(context, x, y, z);
getSchematic().writeToWorld(context, x, y, z, stackConsumed);
// Once the schematic has been written, we're going to issue
// calls

View file

@ -8,6 +8,9 @@
*/
package buildcraft.energy;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
@ -31,8 +34,8 @@ public class SchematicEngine extends SchematicTile {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
super.writeToWorld(context, x, y, z);
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
super.writeToWorld(context, x, y, z, stacks);
TileEngine engine = (TileEngine) context.world().getTileEntity(x, y, z);

View file

@ -8,6 +8,9 @@
*/
package buildcraft.factory;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
@ -28,8 +31,8 @@ public class SchematicRefinery extends SchematicTile {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
super.writeToWorld(context, x, y, z);
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
super.writeToWorld(context, x, y, z, stacks);
TileRefinery refinery = (TileRefinery) context.world().getTileEntity(x, y, z);

View file

@ -8,6 +8,9 @@
*/
package buildcraft.factory;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
@ -19,7 +22,7 @@ public class SchematicTank extends SchematicTile {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
context.world().setBlock(x, y, z, block, meta, 3);
}

View file

@ -9,6 +9,7 @@
package buildcraft.transport.blueprints;
import java.util.ArrayList;
import java.util.LinkedList;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -70,7 +71,7 @@ public class SchematicPipe extends SchematicTile {
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z) {
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
cpt.setInteger("x", x);
cpt.setInteger("y", y);
cpt.setInteger("z", z);