-
Notifications
You must be signed in to change notification settings - Fork 497
/
RobotsActionProvider.java
executable file
·100 lines (80 loc) · 3.13 KB
/
RobotsActionProvider.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* 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.silicon.statements;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import net.minecraft.block.Block;
import net.minecraft.block.BlockWorkbench;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.IFluidHandler;
import buildcraft.BuildCraftSilicon;
import buildcraft.api.gates.IAction;
import buildcraft.api.gates.IActionProvider;
import buildcraft.api.robots.IRequestProvider;
import buildcraft.api.transport.IPipeTile;
import buildcraft.core.robots.DockingStation;
import buildcraft.silicon.TileAssemblyTable;
import buildcraft.transport.PipeTransportItems;
import buildcraft.transport.TileGenericPipe;
public class RobotsActionProvider implements IActionProvider {
@Override
public Collection<IAction> getInternalActions(TileEntity tile) {
if (!(tile instanceof TileGenericPipe)) {
return null;
}
LinkedList<IAction> result = new LinkedList<IAction>();
ArrayList<DockingStation> stations = new ArrayList<DockingStation>();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if (((TileGenericPipe) tile).getStation(dir) != null) {
stations.add(((TileGenericPipe) tile).getStation(dir));
}
}
if (stations.size() == 0) {
return result;
}
result.add(BuildCraftSilicon.actionRobotGotoStation);
result.add(BuildCraftSilicon.actionRobotWorkInArea);
result.add(BuildCraftSilicon.actionRobotWakeUp);
result.add(BuildCraftSilicon.actionRobotFilter);
result.add(BuildCraftSilicon.actionStationForbidRobot);
if (((TileGenericPipe) tile).pipe.transport instanceof PipeTransportItems) {
result.add(BuildCraftSilicon.actionStationDropInPipe);
}
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
TileEntity sideTile = ((TileGenericPipe) tile).getTile(dir);
Block sideBlock = ((TileGenericPipe) tile).getBlock(dir);
if (sideTile instanceof IInventory) {
result.add(BuildCraftSilicon.actionStationProvideItems);
result.add(BuildCraftSilicon.actionStationRequestItems);
result.add(BuildCraftSilicon.actionStationAcceptItems);
}
if (sideTile instanceof IFluidHandler) {
result.add(BuildCraftSilicon.actionStationAcceptFluids);
result.add(BuildCraftSilicon.actionStationProvideFluids);
}
if (sideTile instanceof IRequestProvider) {
result.add(BuildCraftSilicon.actionStationMachineRequestItems);
}
if (sideTile instanceof TileEntityFurnace
|| sideTile instanceof TileAssemblyTable
|| sideBlock instanceof BlockWorkbench) {
result.add(BuildCraftSilicon.actionRobotAllowCraft);
}
}
return result;
}
@Override
public Collection<IAction> getExternalActions(ForgeDirection side, TileEntity tile) {
return null;
}
}