From 0b329169aed039f36fa4517d16c4ba7f99015368 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 22 Mar 2015 14:06:05 +0100 Subject: [PATCH] API, etc. improvements --- api/buildcraft/api/core/Position.java | 5 +++ api/buildcraft/api/gates/IGate.java | 12 +++++++ .../api/statements/IStatementContainer.java | 1 + .../api/statements}/StatementSlot.java | 5 +-- api/buildcraft/api/transport/IPipeTile.java | 1 + .../core/render/RenderBuildingItems.java | 3 +- .../buildcraft/factory/TileAutoWorkbench.java | 2 +- .../buildcraft/robotics/DockingStation.java | 10 +++--- common/buildcraft/robotics/EntityRobot.java | 9 ++--- .../robotics/ai/AIRobotDeliverRequested.java | 6 ++-- .../ai/AIRobotGotoStationToUnload.java | 6 ++-- .../ai/AIRobotGotoStationToUnloadFluids.java | 5 +-- .../robotics/ai/AIRobotRecharge.java | 2 +- .../ai/AIRobotSearchStackRequest.java | 7 ++-- .../buildcraft/robotics/ai/AIRobotSleep.java | 4 +-- .../buildcraft/robotics/ai/AIRobotUnload.java | 6 ++-- .../robotics/ai/AIRobotUnloadFluids.java | 5 +-- .../boards/BoardRobotGenericBreakBlock.java | 4 +-- .../robotics/boards/BoardRobotPump.java | 4 +-- .../statements/ActionRobotFilter.java | 10 +++--- .../statements/ActionRobotFilterTool.java | 4 +-- .../statements/ActionRobotWorkInArea.java | 2 +- .../statements/ActionStationAcceptItems.java | 7 ++-- .../statements/ActionStationForbidRobot.java | 4 +-- .../statements/ActionStationInputItems.java | 2 +- .../statements/ActionStationRequestItems.java | 14 +++----- common/buildcraft/transport/Gate.java | 36 ++++++++++++++++++- common/buildcraft/transport/Pipe.java | 2 +- .../transport/PipeTriggerProvider.java | 1 + .../transport/gates/ActionIterator.java | 19 +++++----- .../transport/pipes/PipeFluidsIron.java | 2 +- .../transport/pipes/PipeItemsDaizuli.java | 2 +- .../transport/pipes/PipeItemsEmzuli.java | 2 +- .../transport/pipes/PipeItemsIron.java | 2 +- .../transport/pipes/PipeItemsLapis.java | 2 +- .../transport/pipes/PipeItemsStripes.java | 2 +- .../transport/pipes/PipePowerIron.java | 2 +- .../transport/render/FacadeBlockAccess.java | 12 +++---- 38 files changed, 138 insertions(+), 86 deletions(-) rename {common/buildcraft/transport/gates => api/buildcraft/api/statements}/StatementSlot.java (86%) diff --git a/api/buildcraft/api/core/Position.java b/api/buildcraft/api/core/Position.java index 912840cf..6f4ff1d9 100644 --- a/api/buildcraft/api/core/Position.java +++ b/api/buildcraft/api/core/Position.java @@ -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; + } } diff --git a/api/buildcraft/api/gates/IGate.java b/api/buildcraft/api/gates/IGate.java index 7f456fae..683a65a8 100644 --- a/api/buildcraft/api/gates/IGate.java +++ b/api/buildcraft/api/gates/IGate.java @@ -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 getTriggers(); + List getActions(); + + List getActiveActions(); + + List getTriggerParameters(int index); + List getActionParameters(int index); } diff --git a/api/buildcraft/api/statements/IStatementContainer.java b/api/buildcraft/api/statements/IStatementContainer.java index 43a4f51e..834ec255 100644 --- a/api/buildcraft/api/statements/IStatementContainer.java +++ b/api/buildcraft/api/statements/IStatementContainer.java @@ -8,6 +8,7 @@ */ package buildcraft.api.statements; +import java.util.List; import net.minecraft.tileentity.TileEntity; /** diff --git a/common/buildcraft/transport/gates/StatementSlot.java b/api/buildcraft/api/statements/StatementSlot.java similarity index 86% rename from common/buildcraft/transport/gates/StatementSlot.java rename to api/buildcraft/api/statements/StatementSlot.java index 385968a0..6639bc51 100755 --- a/common/buildcraft/transport/gates/StatementSlot.java +++ b/api/buildcraft/api/statements/StatementSlot.java @@ -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; diff --git a/api/buildcraft/api/transport/IPipeTile.java b/api/buildcraft/api/transport/IPipeTile.java index e022518c..885a0e94 100644 --- a/api/buildcraft/api/transport/IPipeTile.java +++ b/api/buildcraft/api/transport/IPipeTile.java @@ -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); diff --git a/common/buildcraft/core/render/RenderBuildingItems.java b/common/buildcraft/core/render/RenderBuildingItems.java index 17282b28..0de3cef9 100755 --- a/common/buildcraft/core/render/RenderBuildingItems.java +++ b/common/buildcraft/core/render/RenderBuildingItems.java @@ -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); } diff --git a/common/buildcraft/factory/TileAutoWorkbench.java b/common/buildcraft/factory/TileAutoWorkbench.java index e273d5f0..a7692316 100644 --- a/common/buildcraft/factory/TileAutoWorkbench.java +++ b/common/buildcraft/factory/TileAutoWorkbench.java @@ -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() { diff --git a/common/buildcraft/robotics/DockingStation.java b/common/buildcraft/robotics/DockingStation.java index 4cb1f94a..e01b7264 100755 --- a/common/buildcraft/robotics/DockingStation.java +++ b/common/buildcraft/robotics/DockingStation.java @@ -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; diff --git a/common/buildcraft/robotics/EntityRobot.java b/common/buildcraft/robotics/EntityRobot.java index c319cdd7..9e2df4ee 100644 --- a/common/buildcraft/robotics/EntityRobot.java +++ b/common/buildcraft/robotics/EntityRobot.java @@ -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); diff --git a/common/buildcraft/robotics/ai/AIRobotDeliverRequested.java b/common/buildcraft/robotics/ai/AIRobotDeliverRequested.java index b6549230..d1b2b8d7 100755 --- a/common/buildcraft/robotics/ai/AIRobotDeliverRequested.java +++ b/common/buildcraft/robotics/ai/AIRobotDeliverRequested.java @@ -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; diff --git a/common/buildcraft/robotics/ai/AIRobotGotoStationToUnload.java b/common/buildcraft/robotics/ai/AIRobotGotoStationToUnload.java index 42abd9f0..81702258 100755 --- a/common/buildcraft/robotics/ai/AIRobotGotoStationToUnload.java +++ b/common/buildcraft/robotics/ai/AIRobotGotoStationToUnload.java @@ -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) { diff --git a/common/buildcraft/robotics/ai/AIRobotGotoStationToUnloadFluids.java b/common/buildcraft/robotics/ai/AIRobotGotoStationToUnloadFluids.java index bdfa15ba..11e04a5f 100755 --- a/common/buildcraft/robotics/ai/AIRobotGotoStationToUnloadFluids.java +++ b/common/buildcraft/robotics/ai/AIRobotGotoStationToUnloadFluids.java @@ -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); diff --git a/common/buildcraft/robotics/ai/AIRobotRecharge.java b/common/buildcraft/robotics/ai/AIRobotRecharge.java index 638e7258..cd96becd 100755 --- a/common/buildcraft/robotics/ai/AIRobotRecharge.java +++ b/common/buildcraft/robotics/ai/AIRobotRecharge.java @@ -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(); } } diff --git a/common/buildcraft/robotics/ai/AIRobotSearchStackRequest.java b/common/buildcraft/robotics/ai/AIRobotSearchStackRequest.java index 222b5343..710ac27a 100755 --- a/common/buildcraft/robotics/ai/AIRobotSearchStackRequest.java +++ b/common/buildcraft/robotics/ai/AIRobotSearchStackRequest.java @@ -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) { diff --git a/common/buildcraft/robotics/ai/AIRobotSleep.java b/common/buildcraft/robotics/ai/AIRobotSleep.java index 2458bd33..25bb2f0a 100755 --- a/common/buildcraft/robotics/ai/AIRobotSleep.java +++ b/common/buildcraft/robotics/ai/AIRobotSleep.java @@ -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(); } diff --git a/common/buildcraft/robotics/ai/AIRobotUnload.java b/common/buildcraft/robotics/ai/AIRobotUnload.java index 0d9a5992..9baba3d6 100755 --- a/common/buildcraft/robotics/ai/AIRobotUnload.java +++ b/common/buildcraft/robotics/ai/AIRobotUnload.java @@ -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) { diff --git a/common/buildcraft/robotics/ai/AIRobotUnloadFluids.java b/common/buildcraft/robotics/ai/AIRobotUnloadFluids.java index 09e3ed55..23f6b265 100755 --- a/common/buildcraft/robotics/ai/AIRobotUnloadFluids.java +++ b/common/buildcraft/robotics/ai/AIRobotUnloadFluids.java @@ -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); diff --git a/common/buildcraft/robotics/boards/BoardRobotGenericBreakBlock.java b/common/buildcraft/robotics/boards/BoardRobotGenericBreakBlock.java index c8712ace..15268d20 100644 --- a/common/buildcraft/robotics/boards/BoardRobotGenericBreakBlock.java +++ b/common/buildcraft/robotics/boards/BoardRobotGenericBreakBlock.java @@ -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) { diff --git a/common/buildcraft/robotics/boards/BoardRobotPump.java b/common/buildcraft/robotics/boards/BoardRobotPump.java index 123394d6..585f6f87 100644 --- a/common/buildcraft/robotics/boards/BoardRobotPump.java +++ b/common/buildcraft/robotics/boards/BoardRobotPump.java @@ -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) { diff --git a/common/buildcraft/robotics/statements/ActionRobotFilter.java b/common/buildcraft/robotics/statements/ActionRobotFilter.java index 88b7c83d..e73adc4b 100755 --- a/common/buildcraft/robotics/statements/ActionRobotFilter.java +++ b/common/buildcraft/robotics/statements/ActionRobotFilter.java @@ -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 getGateFilterStacks(IDockingStation station) { ArrayList result = new ArrayList(); - 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())) { diff --git a/common/buildcraft/robotics/statements/ActionRobotFilterTool.java b/common/buildcraft/robotics/statements/ActionRobotFilterTool.java index ced83a4f..36080dea 100644 --- a/common/buildcraft/robotics/statements/ActionRobotFilterTool.java +++ b/common/buildcraft/robotics/statements/ActionRobotFilterTool.java @@ -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 getGateFilterStacks(IDockingStation station) { ArrayList result = new ArrayList(); - 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) { diff --git a/common/buildcraft/robotics/statements/ActionRobotWorkInArea.java b/common/buildcraft/robotics/statements/ActionRobotWorkInArea.java index e2b6a436..037f417e 100755 --- a/common/buildcraft/robotics/statements/ActionRobotWorkInArea.java +++ b/common/buildcraft/robotics/statements/ActionRobotWorkInArea.java @@ -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 { diff --git a/common/buildcraft/robotics/statements/ActionStationAcceptItems.java b/common/buildcraft/robotics/statements/ActionStationAcceptItems.java index bebc4fda..9fb06be9 100755 --- a/common/buildcraft/robotics/statements/ActionStationAcceptItems.java +++ b/common/buildcraft/robotics/statements/ActionStationAcceptItems.java @@ -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); diff --git a/common/buildcraft/robotics/statements/ActionStationForbidRobot.java b/common/buildcraft/robotics/statements/ActionStationForbidRobot.java index 4819f2c1..59f31d33 100755 --- a/common/buildcraft/robotics/statements/ActionStationForbidRobot.java +++ b/common/buildcraft/robotics/statements/ActionStationForbidRobot.java @@ -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; diff --git a/common/buildcraft/robotics/statements/ActionStationInputItems.java b/common/buildcraft/robotics/statements/ActionStationInputItems.java index f5cc15fa..8a4dd03e 100755 --- a/common/buildcraft/robotics/statements/ActionStationInputItems.java +++ b/common/buildcraft/robotics/statements/ActionStationInputItems.java @@ -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 { diff --git a/common/buildcraft/robotics/statements/ActionStationRequestItems.java b/common/buildcraft/robotics/statements/ActionStationRequestItems.java index 6299b9d2..47ef35cd 100755 --- a/common/buildcraft/robotics/statements/ActionStationRequestItems.java +++ b/common/buildcraft/robotics/statements/ActionStationRequestItems.java @@ -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); diff --git a/common/buildcraft/transport/Gate.java b/common/buildcraft/transport/Gate.java index ab8ec659..76df3993 100644 --- a/common/buildcraft/transport/Gate.java +++ b/common/buildcraft/transport/Gate.java @@ -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 getTriggers() { + return Arrays.asList(triggers).subList(0, material.numSlots); + } + + @Override + public List getActions() { + return Arrays.asList(actions).subList(0, material.numSlots); + } + + @Override + public List getActiveActions() { + return activeActions; + } + + @Override + public List getTriggerParameters(int index) { + if (index < 0 || index >= material.numSlots) { + return null; + } + return Arrays.asList(triggerParameters[index]).subList(0, material.numTriggerParameters); + } + + @Override + public List 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()]; diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java index c95d0d07..dd224113 100644 --- a/common/buildcraft/transport/Pipe.java +++ b/common/buildcraft/transport/Pipe.java @@ -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 implements IDropControlInventory, IPipe { diff --git a/common/buildcraft/transport/PipeTriggerProvider.java b/common/buildcraft/transport/PipeTriggerProvider.java index 315fe207..4a4a18b1 100644 --- a/common/buildcraft/transport/PipeTriggerProvider.java +++ b/common/buildcraft/transport/PipeTriggerProvider.java @@ -27,6 +27,7 @@ public class PipeTriggerProvider implements ITriggerProvider { LinkedList result = new LinkedList(); Pipe pipe = null; TileEntity tile = container.getTile(); + if (tile instanceof TileGenericPipe) { pipe = ((TileGenericPipe) tile).pipe; } diff --git a/common/buildcraft/transport/gates/ActionIterator.java b/common/buildcraft/transport/gates/ActionIterator.java index c0288809..be8e56b0 100755 --- a/common/buildcraft/transport/gates/ActionIterator.java +++ b/common/buildcraft/transport/gates/ActionIterator.java @@ -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 { + 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 { 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 { } 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 { } 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 { 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(); } } } diff --git a/common/buildcraft/transport/pipes/PipeFluidsIron.java b/common/buildcraft/transport/pipes/PipeFluidsIron.java index 3392e287..56046832 100644 --- a/common/buildcraft/transport/pipes/PipeFluidsIron.java +++ b/common/buildcraft/transport/pipes/PipeFluidsIron.java @@ -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 { diff --git a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java index 01de1eb1..b3d50fdc 100644 --- a/common/buildcraft/transport/pipes/PipeItemsDaizuli.java +++ b/common/buildcraft/transport/pipes/PipeItemsDaizuli.java @@ -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; diff --git a/common/buildcraft/transport/pipes/PipeItemsEmzuli.java b/common/buildcraft/transport/pipes/PipeItemsEmzuli.java index 4f4efdb7..0033d677 100644 --- a/common/buildcraft/transport/pipes/PipeItemsEmzuli.java +++ b/common/buildcraft/transport/pipes/PipeItemsEmzuli.java @@ -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 { diff --git a/common/buildcraft/transport/pipes/PipeItemsIron.java b/common/buildcraft/transport/pipes/PipeItemsIron.java index 159916b5..65bc157b 100644 --- a/common/buildcraft/transport/pipes/PipeItemsIron.java +++ b/common/buildcraft/transport/pipes/PipeItemsIron.java @@ -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 { diff --git a/common/buildcraft/transport/pipes/PipeItemsLapis.java b/common/buildcraft/transport/pipes/PipeItemsLapis.java index c291fa3f..bbe4f8c9 100644 --- a/common/buildcraft/transport/pipes/PipeItemsLapis.java +++ b/common/buildcraft/transport/pipes/PipeItemsLapis.java @@ -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; diff --git a/common/buildcraft/transport/pipes/PipeItemsStripes.java b/common/buildcraft/transport/pipes/PipeItemsStripes.java index a0bb4a29..d0478df7 100644 --- a/common/buildcraft/transport/pipes/PipeItemsStripes.java +++ b/common/buildcraft/transport/pipes/PipeItemsStripes.java @@ -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; diff --git a/common/buildcraft/transport/pipes/PipePowerIron.java b/common/buildcraft/transport/pipes/PipePowerIron.java index 807190a8..43a4228e 100644 --- a/common/buildcraft/transport/pipes/PipePowerIron.java +++ b/common/buildcraft/transport/pipes/PipePowerIron.java @@ -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 { diff --git a/common/buildcraft/transport/render/FacadeBlockAccess.java b/common/buildcraft/transport/render/FacadeBlockAccess.java index 0fbcf130..355b005a 100644 --- a/common/buildcraft/transport/render/FacadeBlockAccess.java +++ b/common/buildcraft/transport/render/FacadeBlockAccess.java @@ -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