API, etc. improvements

This commit is contained in:
asiekierka 2015-03-22 14:06:05 +01:00
parent 971f3614c9
commit 0b329169ae
38 changed files with 138 additions and 86 deletions

View file

@ -193,4 +193,9 @@ public class Position implements ISerializable {
stream.writeDouble(z);
stream.writeByte(orientation.ordinal());
}
@Override
public int hashCode() {
return (51 * (int) x) + (13 * (int) y) + (int) z;
}
}

View file

@ -8,6 +8,10 @@
*/
package buildcraft.api.gates;
import java.util.List;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementSlot;
import buildcraft.api.statements.containers.ISidedStatementContainer;
import buildcraft.api.transport.IPipe;
@ -16,4 +20,12 @@ public interface IGate extends ISidedStatementContainer {
void setPulsing(boolean pulse);
IPipe getPipe();
List<IStatement> getTriggers();
List<IStatement> getActions();
List<StatementSlot> getActiveActions();
List<IStatementParameter> getTriggerParameters(int index);
List<IStatementParameter> getActionParameters(int index);
}

View file

@ -8,6 +8,7 @@
*/
package buildcraft.api.statements;
import java.util.List;
import net.minecraft.tileentity.TileEntity;
/**

View file

@ -6,10 +6,7 @@
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.transport.gates;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
package buildcraft.api.statements;
public class StatementSlot {
public IStatement statement;

View file

@ -53,6 +53,7 @@ public interface IPipeTile extends IInjectable {
boolean hasBlockingPluggable(ForgeDirection direction);
void scheduleNeighborChange();
void scheduleRenderUpdate();
// For compatibility with BC 6.2.x and below
int injectItem(ItemStack stack, boolean doAdd, ForgeDirection from, EnumColor color);

View file

@ -18,6 +18,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import buildcraft.BuildCraftBuilders;
import buildcraft.BuildCraftCore;
import buildcraft.core.StackAtPosition;
import buildcraft.core.builders.BuildingItem;
import buildcraft.core.builders.IBuildingItemsProvider;
@ -74,7 +75,7 @@ public class RenderBuildingItems {
private void doRenderItem(BuildingItem i, float light) {
if (buildToolItem == null) {
buildToolItem = Item.getItemFromBlock(BuildCraftBuilders.buildToolBlock);
buildToolItem = Item.getItemFromBlock(BuildCraftCore.buildToolBlock);
buildToolGlList = GL11.glGenLists(1);
renderToList(new ItemStack(buildToolItem), buildToolGlList);
}

View file

@ -82,7 +82,7 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
return true;
}
private class LocalInventoryCrafting extends InventoryCrafting {
public class LocalInventoryCrafting extends InventoryCrafting {
public LocalInventoryCrafting() {
super(new Container() {

View file

@ -9,6 +9,7 @@
package buildcraft.robotics;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@ -17,6 +18,7 @@ import buildcraft.api.core.BlockIndex;
import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.robots.IDockingStation;
import buildcraft.api.robots.RobotManager;
import buildcraft.api.transport.IPipeTile;
import buildcraft.transport.TileGenericPipe;
public class DockingStation implements IDockingStation {
@ -29,7 +31,7 @@ public class DockingStation implements IDockingStation {
private boolean linkIsMain = false;
private BlockIndex index;
private TileGenericPipe pipe;
private IPipeTile pipe;
public DockingStation(BlockIndex iIndex, ForgeDirection iSide) {
index = iIndex;
@ -50,12 +52,12 @@ public class DockingStation implements IDockingStation {
return linkIsMain;
}
public TileGenericPipe getPipe() {
public IPipeTile getPipe() {
if (pipe == null) {
pipe = (TileGenericPipe) world.getTileEntity(index.x, index.y, index.z);
pipe = (IPipeTile) world.getTileEntity(index.x, index.y, index.z);
}
if (pipe == null || pipe.isInvalid()) {
if (pipe == null || ((TileEntity) pipe).isInvalid()) {
// Inconsistency - remove this pipe from the registry.
RobotManager.registryProvider.getRegistry(world).removeStation(this);
pipe = null;

View file

@ -51,12 +51,12 @@ import buildcraft.api.boards.RedstoneBoardRobot;
import buildcraft.api.boards.RedstoneBoardRobotNBT;
import buildcraft.api.core.BlockIndex;
import buildcraft.api.core.IZone;
import buildcraft.api.core.SafeTimeTracker;
import buildcraft.api.robots.AIRobot;
import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.robots.IDockingStation;
import buildcraft.api.robots.RobotManager;
import buildcraft.api.tiles.IDebuggable;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.DefaultProps;
import buildcraft.core.LaserData;
import buildcraft.core.lib.RFBattery;
@ -68,9 +68,10 @@ import buildcraft.core.lib.utils.NetworkUtils;
import buildcraft.robotics.ai.AIRobotMain;
import buildcraft.robotics.ai.AIRobotSleep;
import buildcraft.robotics.statements.ActionRobotWorkInArea;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeTransportPower;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class EntityRobot extends EntityRobotBase implements
IEntityAdditionalSpawnData, IInventory, IFluidHandler, ICommandReceiver, IDebuggable {
@ -345,7 +346,7 @@ public class EntityRobot extends EntityRobotBase implements
if (currentDockingStation == null) {
return false;
}
if (!(currentDockingStation.getPipe().pipe.transport instanceof PipeTransportPower)) {
if (currentDockingStation.getPipe().getPipeType() != IPipeTile.PipeType.POWER) {
return false;
}
return true;
@ -913,7 +914,7 @@ public class EntityRobot extends EntityRobotBase implements
@Override
public IZone getZoneToWork() {
if (linkedDockingStation instanceof DockingStation) {
for (StatementSlot s : new ActionIterator(((DockingStation) linkedDockingStation).getPipe().pipe)) {
for (StatementSlot s : new ActionIterator(((DockingStation) linkedDockingStation).getPipe().getPipe())) {
if (s.statement instanceof ActionRobotWorkInArea) {
IZone zone = ActionRobotWorkInArea.getArea(s);

View file

@ -16,14 +16,14 @@ import buildcraft.api.robots.AIRobot;
import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.robots.IRequestProvider;
import buildcraft.api.robots.StackRequest;
import buildcraft.api.transport.IPipe;
import buildcraft.core.lib.inventory.InvUtils;
import buildcraft.core.lib.inventory.filters.ArrayStackOrListFilter;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.IStationFilter;
import buildcraft.robotics.statements.ActionStationRequestItemsMachine;
import buildcraft.transport.Pipe;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class AIRobotDeliverRequested extends AIRobot {
@ -93,7 +93,7 @@ public class AIRobotDeliverRequested extends AIRobot {
public boolean matches(DockingStation station) {
boolean actionFound = false;
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
if (!station.index().nextTo(new BlockIndex(requested.requester))) {
return false;

View file

@ -14,14 +14,14 @@ import buildcraft.api.core.IInvSlot;
import buildcraft.api.core.IZone;
import buildcraft.api.robots.AIRobot;
import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.transport.IPipe;
import buildcraft.core.lib.inventory.InventoryIterator;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.EntityRobot;
import buildcraft.robotics.IStationFilter;
import buildcraft.robotics.statements.ActionStationInputItems;
import buildcraft.transport.Pipe;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class AIRobotGotoStationToUnload extends AIRobot {
@ -61,7 +61,7 @@ public class AIRobotGotoStationToUnload extends AIRobot {
private class StationInventory implements IStationFilter {
@Override
public boolean matches(DockingStation station) {
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
for (IInvSlot robotSlot : InventoryIterator.getIterable(robot, ForgeDirection.UNKNOWN)) {
if (robotSlot.getStackInSlot() == null) {

View file

@ -22,6 +22,7 @@ import buildcraft.robotics.DockingStation;
import buildcraft.robotics.IStationFilter;
import buildcraft.robotics.statements.ActionRobotFilter;
import buildcraft.robotics.statements.ActionStationAcceptFluids;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeTransportFluids;
import buildcraft.transport.PipeTransportItems;
@ -69,8 +70,8 @@ public class AIRobotGotoStationToUnloadFluids extends AIRobot {
return false;
}
if (station.getPipe().pipe.transport instanceof PipeTransportFluids) {
PipeTransportFluids transport = ((PipeTransportFluids) station.getPipe().pipe.transport);
if (((Pipe) station.getPipe().getPipe()).transport instanceof PipeTransportFluids) {
PipeTransportFluids transport = ((PipeTransportFluids) ((Pipe) station.getPipe().getPipe()).transport);
FluidStack drainable = robot.drain(ForgeDirection.UNKNOWN, 1, false);
int filledAmount = transport.fill(station.side, drainable, false);

View file

@ -54,7 +54,7 @@ public class AIRobotRecharge extends AIRobot {
public void delegateAIEnded(AIRobot ai) {
if (ai instanceof AIRobotSearchAndGotoStation) {
if (robot.getDockingStation() == null
|| !(((DockingStation) robot.getDockingStation()).getPipe().pipe.transport instanceof PipeTransportPower)) {
|| ((DockingStation) robot.getDockingStation()).getPipe().getPipeType() != IPipeTile.PipeType.POWER) {
terminate();
}
}

View file

@ -21,6 +21,7 @@ import buildcraft.api.robots.IRequestProvider;
import buildcraft.api.robots.StackRequest;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.api.transport.IPipe;
import buildcraft.core.lib.inventory.StackHelper;
import buildcraft.core.lib.inventory.filters.IStackFilter;
import buildcraft.robotics.DockingStation;
@ -28,9 +29,8 @@ import buildcraft.robotics.IStationFilter;
import buildcraft.robotics.statements.ActionRobotFilter;
import buildcraft.robotics.statements.ActionStationRequestItems;
import buildcraft.robotics.statements.ActionStationRequestItemsMachine;
import buildcraft.transport.Pipe;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class AIRobotSearchStackRequest extends AIRobot {
@ -126,8 +126,7 @@ public class AIRobotSearchStackRequest extends AIRobot {
private StackRequest getOrderFromRequestingAction(DockingStation station) {
boolean actionFound = false;
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
for (StatementSlot s : new ActionIterator(pipe)) {
if (s.statement instanceof ActionStationRequestItems) {

View file

@ -13,7 +13,7 @@ import buildcraft.api.robots.EntityRobotBase;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.statements.ActionRobotWakeUp;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class AIRobotSleep extends AIRobot {
@ -26,7 +26,7 @@ public class AIRobotSleep extends AIRobot {
@Override
public void preempt(AIRobot ai) {
for (StatementSlot s : new ActionIterator(((DockingStation) robot.getLinkedStation()).getPipe().pipe)) {
for (StatementSlot s : new ActionIterator(((DockingStation) robot.getLinkedStation()).getPipe().getPipe())) {
if (s.statement instanceof ActionRobotWakeUp) {
terminate();
}

View file

@ -13,13 +13,13 @@ import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.core.IInvSlot;
import buildcraft.api.robots.AIRobot;
import buildcraft.api.robots.EntityRobotBase;
import buildcraft.api.transport.IPipe;
import buildcraft.core.lib.inventory.InventoryIterator;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.EntityRobot;
import buildcraft.robotics.statements.ActionStationInputItems;
import buildcraft.transport.Pipe;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class AIRobotUnload extends AIRobot {
@ -50,7 +50,7 @@ public class AIRobotUnload extends AIRobot {
return false;
}
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
for (IInvSlot robotSlot : InventoryIterator.getIterable(robot, ForgeDirection.UNKNOWN)) {
if (robotSlot.getStackInSlot() == null) {

View file

@ -18,6 +18,7 @@ import buildcraft.core.lib.inventory.filters.SimpleFluidFilter;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.statements.ActionRobotFilter;
import buildcraft.robotics.statements.ActionStationAcceptFluids;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeTransportFluids;
public class AIRobotUnloadFluids extends AIRobot {
@ -48,8 +49,8 @@ public class AIRobotUnloadFluids extends AIRobot {
return;
}
if (station.getPipe().pipe.transport instanceof PipeTransportFluids) {
PipeTransportFluids transport = ((PipeTransportFluids) station.getPipe().pipe.transport);
if (((Pipe) station.getPipe().getPipe()).transport instanceof PipeTransportFluids) {
PipeTransportFluids transport = ((PipeTransportFluids) ((Pipe) station.getPipe().getPipe()).transport);
FluidStack drainable = robot.drain(ForgeDirection.UNKNOWN, FluidContainerRegistry.BUCKET_VOLUME,
false);

View file

@ -33,7 +33,7 @@ import buildcraft.robotics.ai.AIRobotGotoSleep;
import buildcraft.robotics.ai.AIRobotSearchBlock;
import buildcraft.robotics.statements.ActionRobotFilter;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public abstract class BoardRobotGenericBreakBlock extends RedstoneBoardRobot {
@ -129,7 +129,7 @@ public abstract class BoardRobotGenericBreakBlock extends RedstoneBoardRobot {
DockingStation station = (DockingStation) robot.getLinkedStation();
for (StatementSlot slot : new ActionIterator(station.getPipe().pipe)) {
for (StatementSlot slot : new ActionIterator(station.getPipe().getPipe())) {
if (slot.statement instanceof ActionRobotFilter) {
for (IStatementParameter p : slot.parameters) {
if (p != null && p instanceof StatementParameterItemStack) {

View file

@ -39,7 +39,7 @@ import buildcraft.robotics.ai.AIRobotPumpBlock;
import buildcraft.robotics.ai.AIRobotSearchBlock;
import buildcraft.robotics.statements.ActionRobotFilter;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class BoardRobotPump extends RedstoneBoardRobot {
@ -122,7 +122,7 @@ public class BoardRobotPump extends RedstoneBoardRobot {
DockingStation station = (DockingStation) robot.getLinkedStation();
for (StatementSlot slot : new ActionIterator(station.getPipe().pipe)) {
for (StatementSlot slot : new ActionIterator(station.getPipe().getPipe())) {
if (slot.statement instanceof ActionRobotFilter) {
for (IStatementParameter p : slot.parameters) {
if (p != null && p instanceof StatementParameterItemStack) {

View file

@ -22,6 +22,7 @@ import buildcraft.api.statements.IActionInternal;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.api.transport.IPipe;
import buildcraft.core.lib.inventory.filters.ArrayFluidFilter;
import buildcraft.core.lib.inventory.filters.ArrayStackOrListFilter;
import buildcraft.core.lib.inventory.filters.IFluidFilter;
@ -32,9 +33,8 @@ import buildcraft.core.lib.inventory.filters.StatementParameterStackFilter;
import buildcraft.core.statements.BCStatement;
import buildcraft.core.lib.utils.StringUtils;
import buildcraft.robotics.DockingStation;
import buildcraft.transport.Pipe;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionRobotFilter extends BCStatement implements IActionInternal {
@ -70,7 +70,7 @@ public class ActionRobotFilter extends BCStatement implements IActionInternal {
public static Collection<ItemStack> getGateFilterStacks(IDockingStation station) {
ArrayList<ItemStack> result = new ArrayList<ItemStack>();
for (StatementSlot slot : new ActionIterator(((DockingStation) station).getPipe().pipe)) {
for (StatementSlot slot : new ActionIterator(((DockingStation) station).getPipe().getPipe())) {
if (slot.statement instanceof ActionRobotFilter) {
for (IStatementParameter p : slot.parameters) {
if (p != null && p instanceof StatementParameterItemStack) {
@ -111,7 +111,7 @@ public class ActionRobotFilter extends BCStatement implements IActionInternal {
public static boolean canInteractWithItem(DockingStation station, IStackFilter filter, Class<?> actionClass) {
boolean actionFound = false;
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
for (StatementSlot s : new ActionIterator(pipe)) {
if (actionClass.isAssignableFrom(s.statement.getClass())) {
@ -129,7 +129,7 @@ public class ActionRobotFilter extends BCStatement implements IActionInternal {
public static boolean canInteractWithFluid(DockingStation station, IFluidFilter filter, Class<?> actionClass) {
boolean actionFound = false;
Pipe pipe = station.getPipe().pipe;
IPipe pipe = station.getPipe().getPipe();
for (StatementSlot s : new ActionIterator(pipe)) {
if (actionClass.isAssignableFrom(s.statement.getClass())) {

View file

@ -26,7 +26,7 @@ import buildcraft.core.statements.BCStatement;
import buildcraft.core.lib.utils.StringUtils;
import buildcraft.robotics.DockingStation;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionRobotFilterTool extends BCStatement implements IActionInternal {
@ -62,7 +62,7 @@ public class ActionRobotFilterTool extends BCStatement implements IActionInterna
public static Collection<ItemStack> getGateFilterStacks(IDockingStation station) {
ArrayList<ItemStack> result = new ArrayList<ItemStack>();
for (StatementSlot slot : new ActionIterator(((DockingStation) station).getPipe().pipe)) {
for (StatementSlot slot : new ActionIterator(((DockingStation) station).getPipe().getPipe())) {
if (slot.statement instanceof ActionRobotFilterTool) {
for (IStatementParameter p : slot.parameters) {
if (p != null && p instanceof StatementParameterItemStack) {

View file

@ -19,7 +19,7 @@ import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.core.statements.BCStatement;
import buildcraft.core.lib.utils.StringUtils;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionRobotWorkInArea extends BCStatement implements IActionInternal {

View file

@ -17,9 +17,10 @@ import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.core.lib.utils.StringUtils;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.EntityRobot;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionStationAcceptItems extends ActionStationInputItems {
@ -59,14 +60,14 @@ public class ActionStationAcceptItems extends ActionStationInputItems {
return true;
}
if (station.getPipe().pipe.transport instanceof PipeTransportItems) {
if (((Pipe) station.getPipe().getPipe()).transport instanceof PipeTransportItems) {
float cx = station.x() + 0.5F + 0.2F * station.side().offsetX;
float cy = station.y() + 0.5F + 0.2F * station.side().offsetY;
float cz = station.z() + 0.5F + 0.2F * station.side().offsetZ;
TravelingItem item = TravelingItem.make(cx, cy, cz, invSlot.getStackInSlot());
((PipeTransportItems) station.getPipe().pipe.transport).injectItem(item, station.side().getOpposite());
((PipeTransportItems) ((Pipe) station.getPipe().getPipe()).transport).injectItem(item, station.side().getOpposite());
invSlot.setStackInSlot(null);

View file

@ -21,7 +21,7 @@ import buildcraft.core.lib.utils.StringUtils;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.ItemRobot;
import buildcraft.transport.gates.ActionIterator;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionStationForbidRobot extends BCStatement implements IActionInternal {
private final boolean invert;
@ -57,7 +57,7 @@ public class ActionStationForbidRobot extends BCStatement implements IActionInte
}
public static boolean isForbidden(DockingStation station, EntityRobotBase robot) {
for (StatementSlot s : new ActionIterator(station.getPipe().pipe)) {
for (StatementSlot s : new ActionIterator(station.getPipe().getPipe())) {
if (s.statement instanceof ActionStationForbidRobot) {
if (((ActionStationForbidRobot) s.statement).invert ^ ActionStationForbidRobot.isForbidden(s, robot)) {
return true;

View file

@ -16,7 +16,7 @@ import buildcraft.core.lib.inventory.filters.StatementParameterStackFilter;
import buildcraft.core.statements.BCStatement;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.EntityRobot;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public abstract class ActionStationInputItems extends BCStatement implements IActionInternal {

View file

@ -9,23 +9,17 @@
package buildcraft.robotics.statements;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.core.IInvSlot;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementParameterItemStack;
import buildcraft.core.lib.inventory.ITransactor;
import buildcraft.core.lib.inventory.Transactor;
import buildcraft.core.lib.utils.StringUtils;
import buildcraft.robotics.DockingStation;
import buildcraft.robotics.EntityRobot;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
public class ActionStationRequestItems extends ActionStationInputItems {
@ -65,14 +59,14 @@ public class ActionStationRequestItems extends ActionStationInputItems {
return false;
}
if (station.getPipe().pipe.transport instanceof PipeTransportItems) {
if (((Pipe) station.getPipe().getPipe()).transport instanceof PipeTransportItems) {
float cx = station.x() + 0.5F + 0.2F * station.side().offsetX;
float cy = station.y() + 0.5F + 0.2F * station.side().offsetY;
float cz = station.z() + 0.5F + 0.2F * station.side().offsetZ;
TravelingItem item = TravelingItem.make(cx, cy, cz, invSlot.getStackInSlot());
((PipeTransportItems) station.getPipe().pipe.transport).injectItem(item, station.side().getOpposite());
((PipeTransportItems) ((Pipe) station.getPipe().getPipe()).transport).injectItem(item, station.side().getOpposite());
invSlot.setStackInSlot(null);

View file

@ -8,8 +8,11 @@
*/
package buildcraft.transport;
import scala.actors.threadpool.Arrays;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.BiMap;
@ -46,7 +49,7 @@ import buildcraft.core.GuiIds;
import buildcraft.transport.gates.GateDefinition.GateLogic;
import buildcraft.transport.gates.GateDefinition.GateMaterial;
import buildcraft.transport.gates.ItemGate;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.gui.ContainerGateInterface;
import buildcraft.transport.statements.ActionValve;
@ -663,6 +666,37 @@ public final class Gate implements IGate, ISidedStatementContainer, IRedstoneSta
return pipe.container;
}
@Override
public List<IStatement> getTriggers() {
return Arrays.asList(triggers).subList(0, material.numSlots);
}
@Override
public List<IStatement> getActions() {
return Arrays.asList(actions).subList(0, material.numSlots);
}
@Override
public List<StatementSlot> getActiveActions() {
return activeActions;
}
@Override
public List<IStatementParameter> getTriggerParameters(int index) {
if (index < 0 || index >= material.numSlots) {
return null;
}
return Arrays.asList(triggerParameters[index]).subList(0, material.numTriggerParameters);
}
@Override
public List<IStatementParameter> getActionParameters(int index) {
if (index < 0 || index >= material.numSlots) {
return null;
}
return Arrays.asList(actionParameters[index]).subList(0, material.numActionParameters);
}
@Override
public int getRedstoneInput(ForgeDirection side) {
return side == ForgeDirection.UNKNOWN ? pipe.container.redstoneInput : pipe.container.redstoneInputSide[side.ordinal()];

View file

@ -40,7 +40,7 @@ import buildcraft.core.IDropControlInventory;
import buildcraft.core.lib.inventory.InvUtils;
import buildcraft.core.lib.utils.Utils;
import buildcraft.transport.gates.GateFactory;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.statements.ActionValve.ValveState;
public abstract class Pipe<T extends PipeTransport> implements IDropControlInventory, IPipe {

View file

@ -27,6 +27,7 @@ public class PipeTriggerProvider implements ITriggerProvider {
LinkedList<ITriggerInternal> result = new LinkedList<ITriggerInternal>();
Pipe<?> pipe = null;
TileEntity tile = container.getTile();
if (tile instanceof TileGenericPipe) {
pipe = ((TileGenericPipe) tile).pipe;
}

View file

@ -12,14 +12,15 @@ import java.util.Iterator;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.statements.StatementSlot;
import buildcraft.api.transport.IPipe;
import buildcraft.transport.Gate;
import buildcraft.transport.Pipe;
public class ActionIterator implements Iterable<StatementSlot> {
private IPipe pipe;
private Pipe pipe;
public ActionIterator(Pipe iPipe) {
public ActionIterator(IPipe iPipe) {
pipe = iPipe;
}
@ -38,8 +39,8 @@ public class ActionIterator implements Iterable<StatementSlot> {
while (!isValid()) {
if (curDir == ForgeDirection.UNKNOWN) {
break;
} else if (pipe.gates[curDir.ordinal()] == null
|| index >= pipe.gates[curDir.ordinal()].activeActions.size() - 1) {
} else if (pipe.getGate(curDir) == null
|| index >= pipe.getGate(curDir).getActiveActions().size() - 1) {
index = 0;
curDir = ForgeDirection.values()[curDir.ordinal() + 1];
} else {
@ -48,7 +49,7 @@ public class ActionIterator implements Iterable<StatementSlot> {
}
if (isValid()) {
next = pipe.gates[curDir.ordinal()].activeActions.get(index);
next = pipe.getGate(curDir).getActiveActions().get(index);
}
}
@ -77,7 +78,7 @@ public class ActionIterator implements Iterable<StatementSlot> {
}
if (isValid()) {
next = pipe.gates[curDir.ordinal()].activeActions.get(index);
next = pipe.getGate(curDir).getActiveActions().get(index);
} else {
next = null;
}
@ -92,8 +93,8 @@ public class ActionIterator implements Iterable<StatementSlot> {
private boolean isValid() {
return curDir != ForgeDirection.UNKNOWN
&& pipe.gates[curDir.ordinal()] != null
&& index < pipe.gates[curDir.ordinal()].activeActions.size();
&& pipe.getGate(curDir) != null
&& index < pipe.getGate(curDir).getActiveActions().size();
}
}
}

View file

@ -28,7 +28,7 @@ import buildcraft.api.transport.IPipeTile;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportFluids;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.statements.ActionPipeDirection;
public class PipeFluidsIron extends Pipe<PipeTransportFluids> {

View file

@ -38,7 +38,7 @@ import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.pipes.events.PipeEventItem;
import buildcraft.transport.statements.ActionPipeColor;
import buildcraft.transport.statements.ActionPipeDirection;

View file

@ -33,7 +33,7 @@ import buildcraft.core.lib.network.IGuiReturnHandler;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.statements.ActionExtractionPreset;
public class PipeItemsEmzuli extends PipeItemsWood implements IGuiReturnHandler {

View file

@ -28,7 +28,7 @@ import buildcraft.api.transport.IPipeTile;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.statements.ActionPipeDirection;
public class PipeItemsIron extends Pipe<PipeTransportItems> {

View file

@ -31,7 +31,7 @@ import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TransportConstants;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.pipes.events.PipeEventItem;
import buildcraft.transport.statements.ActionPipeColor;

View file

@ -39,7 +39,7 @@ import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
import buildcraft.transport.TravelingItem;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.pipes.events.PipeEventItem;
import buildcraft.transport.statements.ActionPipeDirection;
import buildcraft.transport.utils.TransportUtils;

View file

@ -31,7 +31,7 @@ import buildcraft.core.lib.utils.StringUtils;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportPower;
import buildcraft.transport.gates.StatementSlot;
import buildcraft.api.statements.StatementSlot;
import buildcraft.transport.statements.ActionPowerLimiter;
public class PipePowerIron extends Pipe<PipeTransportPower> {

View file

@ -6,11 +6,11 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.transport.IPipeTile;
import buildcraft.api.transport.pluggable.IFacadePluggable;
import buildcraft.api.transport.pluggable.PipePluggable;
import buildcraft.core.CompatHooks;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.TileGenericPipe;
public class FacadeBlockAccess implements IBlockAccess {
private final IBlockAccess world;
@ -29,8 +29,8 @@ public class FacadeBlockAccess implements IBlockAccess {
}
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileGenericPipe) {
PipePluggable p = ((TileGenericPipe) tile).getPipePluggable(side);
if (tile instanceof IPipeTile) {
PipePluggable p = ((IPipeTile) tile).getPipePluggable(side);
if (p instanceof IFacadePluggable) {
return ((IFacadePluggable) p).getCurrentBlock();
}
@ -56,8 +56,8 @@ public class FacadeBlockAccess implements IBlockAccess {
}
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileGenericPipe) {
PipePluggable p = ((TileGenericPipe) tile).getPipePluggable(side);
if (tile instanceof IPipeTile) {
PipePluggable p = ((IPipeTile) tile).getPipePluggable(side);
if (p instanceof IFacadePluggable) {
//System.out.println("Found facade " + ((FacadePluggable) p).getRenderingMeta());
return ((IFacadePluggable) p).getCurrentMetadata();
@ -73,7 +73,7 @@ public class FacadeBlockAccess implements IBlockAccess {
@Override
public boolean isAirBlock(int x, int y, int z) {
return !(world.getBlock(x, y, z) instanceof BlockGenericPipe);
return !(world.getTileEntity(x, y, z) instanceof IPipeTile);
}
@Override