further cleanup - make robots respect IPipeTile
This commit is contained in:
parent
f5c3220c53
commit
281d7409f9
5 changed files with 55 additions and 20 deletions
22
common/buildcraft/robots/RobotUtils.java
Normal file
22
common/buildcraft/robots/RobotUtils.java
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package buildcraft.robots;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
import buildcraft.api.transport.IPipeTile;
|
||||||
|
import buildcraft.transport.TileGenericPipe;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by asie on 1/24/15.
|
||||||
|
*/
|
||||||
|
public class RobotUtils {
|
||||||
|
private RobotUtils() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DockingStation getStation(IPipeTile tile, ForgeDirection d) {
|
||||||
|
if (tile.getPipePluggable(d) instanceof RobotStationPluggable) {
|
||||||
|
RobotStationPluggable pluggable = (RobotStationPluggable) tile.getPipePluggable(d);
|
||||||
|
return pluggable.getStation();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,7 +19,9 @@ import buildcraft.api.statements.IActionInternal;
|
||||||
import buildcraft.api.statements.IStatementContainer;
|
import buildcraft.api.statements.IStatementContainer;
|
||||||
import buildcraft.api.statements.IStatementParameter;
|
import buildcraft.api.statements.IStatementParameter;
|
||||||
import buildcraft.api.statements.StatementParameterItemStack;
|
import buildcraft.api.statements.StatementParameterItemStack;
|
||||||
|
import buildcraft.api.transport.IPipeTile;
|
||||||
import buildcraft.core.ItemMapLocation;
|
import buildcraft.core.ItemMapLocation;
|
||||||
|
import buildcraft.robots.RobotUtils;
|
||||||
import buildcraft.robots.ai.AIRobotGoAndLinkToDock;
|
import buildcraft.robots.ai.AIRobotGoAndLinkToDock;
|
||||||
import buildcraft.robots.DockingStation;
|
import buildcraft.robots.DockingStation;
|
||||||
import buildcraft.robots.EntityRobot;
|
import buildcraft.robots.EntityRobot;
|
||||||
|
@ -47,11 +49,15 @@ public class ActionRobotGotoStation extends BCStatement implements IActionIntern
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionActivate(IStatementContainer container, IStatementParameter[] parameters) {
|
public void actionActivate(IStatementContainer container, IStatementParameter[] parameters) {
|
||||||
Pipe<?> pipe = ((Gate) container).pipe;
|
if (!(container.getTile() instanceof IPipeTile)) {
|
||||||
RobotRegistry registry = RobotRegistry.getRegistry(pipe.getWorld());
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IPipeTile tile = (IPipeTile) container.getTile();
|
||||||
|
RobotRegistry registry = RobotRegistry.getRegistry(tile.getWorldObj());
|
||||||
|
|
||||||
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) {
|
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
DockingStation station = pipe.container.getStation(d);
|
DockingStation station = RobotUtils.getStation(tile, d);
|
||||||
|
|
||||||
if (station != null && station.robotTaking() != null) {
|
if (station != null && station.robotTaking() != null) {
|
||||||
EntityRobot robot = (EntityRobot) station.robotTaking();
|
EntityRobot robot = (EntityRobot) station.robotTaking();
|
||||||
|
|
|
@ -27,7 +27,10 @@ import buildcraft.api.statements.IActionExternal;
|
||||||
import buildcraft.api.statements.IActionInternal;
|
import buildcraft.api.statements.IActionInternal;
|
||||||
import buildcraft.api.statements.IActionProvider;
|
import buildcraft.api.statements.IActionProvider;
|
||||||
import buildcraft.api.statements.IStatementContainer;
|
import buildcraft.api.statements.IStatementContainer;
|
||||||
|
import buildcraft.api.transport.IPipe;
|
||||||
|
import buildcraft.api.transport.IPipeTile;
|
||||||
import buildcraft.robots.DockingStation;
|
import buildcraft.robots.DockingStation;
|
||||||
|
import buildcraft.robots.RobotUtils;
|
||||||
import buildcraft.silicon.TileAssemblyTable;
|
import buildcraft.silicon.TileAssemblyTable;
|
||||||
import buildcraft.transport.PipeTransportItems;
|
import buildcraft.transport.PipeTransportItems;
|
||||||
import buildcraft.transport.TileGenericPipe;
|
import buildcraft.transport.TileGenericPipe;
|
||||||
|
@ -36,19 +39,18 @@ public class RobotsActionProvider implements IActionProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<IActionInternal> getInternalActions(IStatementContainer container) {
|
public Collection<IActionInternal> getInternalActions(IStatementContainer container) {
|
||||||
|
LinkedList<IActionInternal> result = new LinkedList<IActionInternal>();
|
||||||
TileEntity tile = container.getTile();
|
TileEntity tile = container.getTile();
|
||||||
|
|
||||||
if (!(tile instanceof TileGenericPipe)) {
|
if (!(tile instanceof IPipeTile)) {
|
||||||
return null;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkedList<IActionInternal> result = new LinkedList<IActionInternal>();
|
|
||||||
|
|
||||||
ArrayList<DockingStation> stations = new ArrayList<DockingStation>();
|
ArrayList<DockingStation> stations = new ArrayList<DockingStation>();
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
if (((TileGenericPipe) tile).getStation(dir) != null) {
|
if (RobotUtils.getStation((IPipeTile) tile, dir) != null) {
|
||||||
stations.add(((TileGenericPipe) tile).getStation(dir));
|
stations.add(RobotUtils.getStation((IPipeTile) tile, dir));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
package buildcraft.robots.statements;
|
package buildcraft.robots.statements;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
@ -16,10 +17,14 @@ import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
import buildcraft.BuildCraftSilicon;
|
import buildcraft.BuildCraftSilicon;
|
||||||
|
import buildcraft.api.statements.IActionInternal;
|
||||||
import buildcraft.api.statements.IStatementContainer;
|
import buildcraft.api.statements.IStatementContainer;
|
||||||
import buildcraft.api.statements.ITriggerExternal;
|
import buildcraft.api.statements.ITriggerExternal;
|
||||||
import buildcraft.api.statements.ITriggerInternal;
|
import buildcraft.api.statements.ITriggerInternal;
|
||||||
import buildcraft.api.statements.ITriggerProvider;
|
import buildcraft.api.statements.ITriggerProvider;
|
||||||
|
import buildcraft.api.transport.IPipeTile;
|
||||||
|
import buildcraft.robots.DockingStation;
|
||||||
|
import buildcraft.robots.RobotUtils;
|
||||||
import buildcraft.transport.TileGenericPipe;
|
import buildcraft.transport.TileGenericPipe;
|
||||||
|
|
||||||
public class RobotsTriggerProvider implements ITriggerProvider {
|
public class RobotsTriggerProvider implements ITriggerProvider {
|
||||||
|
@ -28,21 +33,20 @@ public class RobotsTriggerProvider implements ITriggerProvider {
|
||||||
public Collection<ITriggerInternal> getInternalTriggers(IStatementContainer container) {
|
public Collection<ITriggerInternal> getInternalTriggers(IStatementContainer container) {
|
||||||
LinkedList<ITriggerInternal> result = new LinkedList<ITriggerInternal>();
|
LinkedList<ITriggerInternal> result = new LinkedList<ITriggerInternal>();
|
||||||
TileEntity tile = container.getTile();
|
TileEntity tile = container.getTile();
|
||||||
|
|
||||||
if (!(tile instanceof TileGenericPipe)) {
|
if (!(tile instanceof IPipeTile)) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean stationFound = false;
|
ArrayList<DockingStation> stations = new ArrayList<DockingStation>();
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
if (((TileGenericPipe) tile).getStation(dir) != null) {
|
if (RobotUtils.getStation((IPipeTile) tile, dir) != null) {
|
||||||
stationFound = true;
|
stations.add(RobotUtils.getStation((IPipeTile) tile, dir));
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stationFound) {
|
if (stations.size() == 0) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@ import buildcraft.api.gates.IGate;
|
||||||
import buildcraft.api.statements.IStatementContainer;
|
import buildcraft.api.statements.IStatementContainer;
|
||||||
import buildcraft.api.statements.IStatementParameter;
|
import buildcraft.api.statements.IStatementParameter;
|
||||||
import buildcraft.api.statements.ITriggerInternal;
|
import buildcraft.api.statements.ITriggerInternal;
|
||||||
|
import buildcraft.api.transport.IPipeTile;
|
||||||
|
import buildcraft.robots.RobotUtils;
|
||||||
import buildcraft.robots.ai.AIRobotSleep;
|
import buildcraft.robots.ai.AIRobotSleep;
|
||||||
import buildcraft.robots.DockingStation;
|
import buildcraft.robots.DockingStation;
|
||||||
import buildcraft.robots.EntityRobot;
|
import buildcraft.robots.EntityRobot;
|
||||||
|
@ -42,15 +44,14 @@ public class TriggerRobotSleep extends BCStatement implements ITriggerInternal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isTriggerActive(IStatementContainer container, IStatementParameter[] parameters) {
|
public boolean isTriggerActive(IStatementContainer container, IStatementParameter[] parameters) {
|
||||||
if (!(container instanceof IGate)) {
|
if (!(container.getTile() instanceof IPipeTile)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pipe<?> pipe = (Pipe<?>) ((IGate) container).getPipe();
|
IPipeTile tile = (IPipeTile) container.getTile();
|
||||||
TileGenericPipe tile = pipe.container;
|
|
||||||
|
|
||||||
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) {
|
for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
DockingStation station = tile.getStation(d);
|
DockingStation station = RobotUtils.getStation(tile, d);
|
||||||
|
|
||||||
if (station != null && station.robotTaking() != null) {
|
if (station != null && station.robotTaking() != null) {
|
||||||
EntityRobot robot = (EntityRobot) station.robotTaking();
|
EntityRobot robot = (EntityRobot) station.robotTaking();
|
||||||
|
|
Loading…
Reference in a new issue