Completed support for action parameters and parametrized pipe signal.
Finalized implementation of emerald gate. Close #1880.
This commit is contained in:
parent
bc51e29746
commit
7d2e546a66
18 changed files with 338 additions and 89 deletions
|
@ -8,6 +8,9 @@
|
|||
*/
|
||||
package buildcraft.api.gates;
|
||||
|
||||
|
||||
public interface IAction extends IStatement {
|
||||
|
||||
void actionActivate(IGate gate, IActionParameter[] parameters);
|
||||
|
||||
}
|
||||
|
|
|
@ -8,6 +8,15 @@
|
|||
*/
|
||||
package buildcraft.api.gates;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.transport.IPipe;
|
||||
|
||||
public interface IGate {
|
||||
|
||||
void setPulsing(boolean pulsing);
|
||||
|
||||
IPipe getPipe();
|
||||
|
||||
ForgeDirection getSide();
|
||||
}
|
||||
|
|
|
@ -8,12 +8,9 @@
|
|||
*/
|
||||
package buildcraft.api.gates;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.transport.IPipe;
|
||||
|
||||
public interface ITrigger extends IStatement {
|
||||
|
||||
boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameters);
|
||||
boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters);
|
||||
|
||||
}
|
||||
|
|
|
@ -22,6 +22,8 @@ import buildcraft.api.transport.IPipeTile;
|
|||
public final class StatementManager {
|
||||
|
||||
public static Map<String, IStatement> statements = new HashMap<String, IStatement>();
|
||||
public static Map<String, Class<? extends IStatementParameter>> idToParameter = new HashMap<String, Class<? extends IStatementParameter>>();
|
||||
public static Map<Class<? extends IStatementParameter>, String> parameterToId = new HashMap<Class<? extends IStatementParameter>, String>();
|
||||
private static List<ITriggerProvider> triggerProviders = new LinkedList<ITriggerProvider>();
|
||||
private static List<IActionProvider> actionProviders = new LinkedList<IActionProvider>();
|
||||
|
||||
|
@ -37,10 +39,21 @@ public final class StatementManager {
|
|||
}
|
||||
}
|
||||
|
||||
public static void registerActionProvider(IActionProvider provider) {
|
||||
if (provider != null && !actionProviders.contains(provider)) {
|
||||
actionProviders.add(provider);
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerStatement(IStatement statement) {
|
||||
statements.put(statement.getUniqueTag(), statement);
|
||||
}
|
||||
|
||||
public static void registerParameterClass(String name, Class<? extends IStatementParameter> param) {
|
||||
idToParameter.put(name, param);
|
||||
parameterToId.put(param, name);
|
||||
}
|
||||
|
||||
public static List<ITrigger> getNeighborTriggers(Block block, TileEntity entity) {
|
||||
List<ITrigger> result = new LinkedList<ITrigger>();
|
||||
|
||||
|
@ -59,12 +72,6 @@ public final class StatementManager {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static void registerActionProvider(IActionProvider provider) {
|
||||
if (provider != null && !actionProviders.contains(provider)) {
|
||||
actionProviders.add(provider);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<IAction> getNeighborActions(Block block, TileEntity entity) {
|
||||
List<IAction> result = new LinkedList<IAction>();
|
||||
|
||||
|
@ -118,4 +125,20 @@ public final class StatementManager {
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String getParameterKind(IStatementParameter param) {
|
||||
return parameterToId.get(param.getClass());
|
||||
}
|
||||
|
||||
public static IStatementParameter createParameter(String kind) {
|
||||
try {
|
||||
return idToParameter.get(kind).newInstance();
|
||||
} catch (InstantiationException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import net.minecraftforge.oredict.OreDictionary;
|
|||
import buildcraft.api.blueprints.SchematicRegistry;
|
||||
import buildcraft.api.boards.RedstoneBoardRegistry;
|
||||
import buildcraft.api.gates.StatementManager;
|
||||
import buildcraft.api.gates.TriggerParameter;
|
||||
import buildcraft.api.recipes.BuildcraftRecipeRegistry;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.builders.schematics.SchematicRotateMeta;
|
||||
|
@ -69,6 +70,8 @@ import buildcraft.transport.gates.GateExpansionPulsar;
|
|||
import buildcraft.transport.gates.GateExpansionRedstoneFader;
|
||||
import buildcraft.transport.gates.GateExpansionTimer;
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.triggers.ActionParameterSignal;
|
||||
import buildcraft.transport.triggers.TriggerParameterSignal;
|
||||
|
||||
@Mod(name = "BuildCraft Silicon", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Silicon", dependencies = DefaultProps.DEPENDENCY_TRANSPORT)
|
||||
public class BuildCraftSilicon extends BuildCraftMod {
|
||||
|
@ -142,6 +145,10 @@ public class BuildCraftSilicon extends BuildCraftMod {
|
|||
}
|
||||
|
||||
SiliconProxy.proxy.registerRenderers();
|
||||
|
||||
StatementManager.registerParameterClass("buildcraft:stackTrigger", TriggerParameter.class);
|
||||
StatementManager.registerParameterClass("buildcraft:pipeWireTrigger", TriggerParameterSignal.class);
|
||||
StatementManager.registerParameterClass("buildcraft:pipeWireAction", ActionParameterSignal.class);
|
||||
}
|
||||
|
||||
public static void loadRecipes() {
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
package buildcraft.core.triggers;
|
||||
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
import buildcraft.api.gates.IGate;
|
||||
|
||||
public abstract class BCAction extends BCStatement implements IAction {
|
||||
|
||||
|
@ -16,4 +18,13 @@ public abstract class BCAction extends BCStatement implements IAction {
|
|||
super(uniqueTag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IActionParameter createParameter(int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionActivate(IGate gate, IActionParameter[] parameters) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,9 +15,7 @@ import cpw.mods.fml.relauncher.Side;
|
|||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import buildcraft.api.gates.IStatement;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.gates.StatementManager;
|
||||
import buildcraft.api.gates.TriggerParameter;
|
||||
|
||||
public abstract class BCStatement implements IStatement {
|
||||
|
||||
|
@ -72,9 +70,4 @@ public abstract class BCStatement implements IStatement {
|
|||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITriggerParameter createParameter(int index) {
|
||||
return new TriggerParameter();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,9 +12,11 @@ import net.minecraft.tileentity.TileEntity;
|
|||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.api.gates.TriggerParameter;
|
||||
import buildcraft.transport.Pipe;
|
||||
|
||||
/**
|
||||
* This class has to be implemented to create new triggers kinds to BuildCraft
|
||||
|
@ -28,8 +30,9 @@ public abstract class BCTrigger extends BCStatement implements ITrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameters) {
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
ITriggerParameter p = parameters[0];
|
||||
Pipe pipe = (Pipe) gate.getPipe();
|
||||
|
||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
|
||||
if (isTriggerActive(side.getOpposite(), pipe.getAdjacentTile(side), p)) {
|
||||
|
@ -44,4 +47,9 @@ public abstract class BCTrigger extends BCStatement implements ITrigger {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITriggerParameter createParameter(int index) {
|
||||
return new TriggerParameter();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,9 +10,9 @@ package buildcraft.core.triggers;
|
|||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.Pipe;
|
||||
|
||||
|
@ -31,8 +31,8 @@ public class TriggerRedstoneInput extends BCTrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameters) {
|
||||
return !(active ^ isBeingPowered((Pipe) pipe, direction));
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
return !(active ^ isBeingPowered((Pipe) gate.getPipe(), gate.getSide()));
|
||||
}
|
||||
|
||||
private boolean isBeingPowered(Pipe pipe, ForgeDirection direction) {
|
||||
|
|
|
@ -37,6 +37,7 @@ import buildcraft.api.gates.ITrigger;
|
|||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.gates.StatementManager;
|
||||
import buildcraft.api.gates.TriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.triggers.ActionRedstoneOutput;
|
||||
|
@ -45,7 +46,6 @@ import buildcraft.transport.gates.GateDefinition.GateMaterial;
|
|||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.gui.ContainerGateInterface;
|
||||
import buildcraft.transport.triggers.ActionRedstoneFaderOutput;
|
||||
import buildcraft.transport.triggers.ActionSignalOutput;
|
||||
|
||||
public final class Gate implements IGate {
|
||||
|
||||
|
@ -161,6 +161,7 @@ public final class Gate implements IGate {
|
|||
for (int j = 0; j < 3; ++j) {
|
||||
if (triggerParameters[i][j] != null) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
cpt.setString("kind", StatementManager.getParameterKind(triggerParameters[i][j]));
|
||||
triggerParameters[i][j].writeToNBT(cpt);
|
||||
data.setTag("triggerParameters[" + i + "][" + j + "]", cpt);
|
||||
}
|
||||
|
@ -169,6 +170,7 @@ public final class Gate implements IGate {
|
|||
for (int j = 0; j < 3; ++j) {
|
||||
if (actionParameters[i][j] != null) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
cpt.setString("kind", StatementManager.getParameterKind(actionParameters[i][j]));
|
||||
actionParameters[i][j].writeToNBT(cpt);
|
||||
data.setTag("actionParameters[" + i + "][" + j + "]", cpt);
|
||||
}
|
||||
|
@ -200,19 +202,18 @@ public final class Gate implements IGate {
|
|||
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
if (data.hasKey("triggerParameters[" + i + "][" + j + "]")) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
// we need the real parameter type here
|
||||
triggerParameters[i][j] = new TriggerParameter();
|
||||
triggerParameters[i][j].readFromNBT(data.getCompoundTag("triggerParameters[" + i + "][" + j + "]"));
|
||||
NBTTagCompound cpt = data.getCompoundTag("triggerParameters[" + i + "][" + j + "]");
|
||||
triggerParameters[i][j] = (ITriggerParameter) StatementManager.createParameter(cpt
|
||||
.getString("kind"));
|
||||
triggerParameters[i][j].readFromNBT(cpt);
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
if (data.hasKey("triggerParameters[" + i + "][" + j + "]")) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
// actionParameters[i][j] = new ActionParameter();
|
||||
// actionParameters[i][j].readFromNBT(data.getCompoundTag("actionParameters["
|
||||
// + i + "][" + j + "]"));
|
||||
if (data.hasKey("actionParameters[" + i + "][" + j + "]")) {
|
||||
NBTTagCompound cpt = data.getCompoundTag("actionParameters[" + i + "][" + j + "]");
|
||||
actionParameters[i][j] = (IActionParameter) StatementManager.createParameter(cpt.getString("kind"));
|
||||
actionParameters[i][j].readFromNBT(cpt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -345,9 +346,13 @@ public final class Gate implements IGate {
|
|||
}
|
||||
|
||||
// Activate the actions
|
||||
for (Map.Entry<IAction, Boolean> entry : activeActions.entrySet()) {
|
||||
if (entry.getValue()) {
|
||||
IAction action = entry.getKey();
|
||||
for (int it = 0; it < activeActions.size(); ++it) {
|
||||
if (actionsState[it] == ActionState.Activated) {
|
||||
IAction action = actions[it];
|
||||
action.actionActivate(this, actionParameters[it]);
|
||||
|
||||
// TODO: A lot of the code below should be removed in favor
|
||||
// of calls to actionActivate
|
||||
|
||||
// Custom gate actions take precedence over defaults.
|
||||
if (resolveAction(action, actionCount.count(action))) {
|
||||
|
@ -358,8 +363,6 @@ public final class Gate implements IGate {
|
|||
redstoneOutput = 15;
|
||||
} else if (action instanceof ActionRedstoneFaderOutput) {
|
||||
redstoneOutput = ((ActionRedstoneFaderOutput) action).level;
|
||||
} else if (action instanceof ActionSignalOutput) {
|
||||
broadcastSignal.set(((ActionSignalOutput) action).color.ordinal());
|
||||
} else {
|
||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
|
||||
TileEntity tile = pipe.container.getTile(side);
|
||||
|
@ -401,7 +404,7 @@ public final class Gate implements IGate {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (trigger.isTriggerActive(pipe, direction, parameters)) {
|
||||
if (trigger.isTriggerActive(this, parameters)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -444,6 +447,7 @@ public final class Gate implements IGate {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPulsing (boolean pulsing) {
|
||||
if (pulsing != isPulsing) {
|
||||
isPulsing = pulsing;
|
||||
|
@ -454,4 +458,18 @@ public final class Gate implements IGate {
|
|||
public float getPulseStage () {
|
||||
return pulseStage;
|
||||
}
|
||||
|
||||
public void broadcastSignal(PipeWire color) {
|
||||
broadcastSignal.set(color.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPipe getPipe() {
|
||||
return pipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForgeDirection getSide() {
|
||||
return direction;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -347,6 +347,14 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
}
|
||||
}
|
||||
|
||||
public ITriggerParameter getTriggerParameter(int trigger, int param) {
|
||||
if (gate == null) {
|
||||
return null;
|
||||
} else {
|
||||
return gate.getTriggerParameter(trigger, param);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ACTIONS *
|
||||
*/
|
||||
|
|
|
@ -22,6 +22,7 @@ import cpw.mods.fml.relauncher.Side;
|
|||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
import buildcraft.api.gates.IStatement;
|
||||
import buildcraft.api.gates.IStatementParameter;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
|
@ -124,7 +125,7 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
|
||||
@Override
|
||||
public boolean isDefined() {
|
||||
return gate.getTriggerParameter(statementSlot.slot, slot) != null;
|
||||
return getParameter() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -158,6 +159,8 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
public boolean isRequired() {
|
||||
return statementSlot.getStatement() != null && slot < statementSlot.getStatement().minParameters();
|
||||
}
|
||||
|
||||
public abstract void setParameter(IStatementParameter param, boolean notifyServer);
|
||||
}
|
||||
|
||||
class TriggerParameterSlot extends StatementParameterSlot {
|
||||
|
@ -169,6 +172,11 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
public IStatementParameter getParameter() {
|
||||
return gate.getTriggerParameter(statementSlot.slot, slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParameter(IStatementParameter param, boolean notifyServer) {
|
||||
container.setTriggerParameter(statementSlot.slot, slot, (ITriggerParameter) param, notifyServer);
|
||||
}
|
||||
}
|
||||
|
||||
class ActionParameterSlot extends StatementParameterSlot {
|
||||
|
@ -180,6 +188,11 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
public IStatementParameter getParameter() {
|
||||
return gate.getActionParameter(statementSlot.slot, slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParameter(IStatementParameter param, boolean notifyServer) {
|
||||
container.setActionParameter(statementSlot.slot, slot, (IActionParameter) param, notifyServer);
|
||||
}
|
||||
}
|
||||
|
||||
public GuiGateInterface(IInventory playerInventory, Pipe pipe) {
|
||||
|
@ -335,26 +348,21 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
if (slot instanceof TriggerSlot) {
|
||||
boolean halfWidth = container.actionsState[actionTracker] == ActionState.Partial;
|
||||
|
||||
if (gate.material.numTriggerParameters > 0) {
|
||||
if (container.actionsState[actionTracker] != ActionState.Deactivated) {
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
|
||||
drawTexturedModalRect(cornerX + slot.x + 35, cornerY + slot.y + 6, 176, 18, halfWidth ? 9 : 18, 4);
|
||||
}
|
||||
} else if (container.actionsState[actionTracker] != ActionState.Deactivated) {
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
|
||||
drawTexturedModalRect(cornerX + slot.x + 17, cornerY + slot.y + 6, 176, 18, halfWidth ? 9 : 18, 4);
|
||||
drawTexturedModalRect(cornerX + slot.x + 17 + 18 * gate.material.numTriggerParameters, cornerY
|
||||
+ slot.y + 6, 176, 18, halfWidth ? 9 : 18, 4);
|
||||
}
|
||||
|
||||
actionTracker++;
|
||||
} else if (slot instanceof StatementParameterSlot) {
|
||||
StatementParameterSlot paramSlot = (StatementParameterSlot) slot;
|
||||
StatementSlot trigger = paramSlot.statementSlot;
|
||||
StatementSlot statement = paramSlot.statementSlot;
|
||||
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
|
||||
if (trigger.isDefined()) {
|
||||
if (statement.isDefined()) {
|
||||
if (!paramSlot.isAllowed()) {
|
||||
drawTexturedModalRect(cornerX + slot.x - 1, cornerY + slot.y - 1, 176, 0, 18, 18);
|
||||
} else if (paramSlot.isRequired() && paramSlot.getItemStack() == null) {
|
||||
|
@ -464,16 +472,24 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
} else {
|
||||
container.setAction(actionSlot.slot, changed.getUniqueTag(), true);
|
||||
}
|
||||
} else if (slot instanceof TriggerParameterSlot) {
|
||||
TriggerParameterSlot paramSlot = (TriggerParameterSlot) slot;
|
||||
TriggerSlot trigger = (TriggerSlot) paramSlot.statementSlot;
|
||||
|
||||
if (trigger.isDefined() && trigger.getStatement().maxParameters() != 0) {
|
||||
ITriggerParameter param = (ITriggerParameter) trigger.getStatement().createParameter(paramSlot.slot);
|
||||
for (StatementParameterSlot p : actionSlot.parameters) {
|
||||
container.setActionParameter(actionSlot.slot, p.slot, null, true);
|
||||
}
|
||||
} else if (slot instanceof StatementParameterSlot) {
|
||||
StatementParameterSlot paramSlot = (StatementParameterSlot) slot;
|
||||
StatementSlot statement = paramSlot.statementSlot;
|
||||
|
||||
if (statement.isDefined() && statement.getStatement().maxParameters() != 0) {
|
||||
IStatementParameter param = paramSlot.getParameter();
|
||||
|
||||
if (param == null) {
|
||||
param = statement.getStatement().createParameter(paramSlot.slot);
|
||||
}
|
||||
|
||||
if (param != null) {
|
||||
param.clicked(pipe.container, trigger.getStatement(), mc.thePlayer.inventory.getItemStack());
|
||||
container.setTriggerParameter(trigger.slot, paramSlot.slot, param, true);
|
||||
param.clicked(pipe.container, statement.getStatement(), mc.thePlayer.inventory.getItemStack());
|
||||
paramSlot.setParameter(param, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
86
common/buildcraft/transport/triggers/ActionParameterSignal.java
Executable file
86
common/buildcraft/transport/triggers/ActionParameterSignal.java
Executable file
|
@ -0,0 +1,86 @@
|
|||
/**
|
||||
* 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.transport.triggers;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import buildcraft.api.core.NetworkData;
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
import buildcraft.api.gates.IStatement;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.triggers.StatementIconProvider;
|
||||
|
||||
public class ActionParameterSignal implements IActionParameter {
|
||||
|
||||
@NetworkData
|
||||
public PipeWire color = null;
|
||||
|
||||
public ActionParameterSignal() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStackToDraw() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIconToDraw() {
|
||||
int id = 0;
|
||||
|
||||
if (color == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (color) {
|
||||
case RED:
|
||||
id = StatementIconProvider.Trigger_PipeSignal_Red_Active;
|
||||
break;
|
||||
case BLUE:
|
||||
id = StatementIconProvider.Trigger_PipeSignal_Blue_Active;
|
||||
break;
|
||||
case GREEN:
|
||||
id = StatementIconProvider.Trigger_PipeSignal_Green_Active;
|
||||
break;
|
||||
case YELLOW:
|
||||
id = StatementIconProvider.Trigger_PipeSignal_Yellow_Active;
|
||||
break;
|
||||
}
|
||||
|
||||
return StatementIconProvider.INSTANCE.getIcon(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
if (color == null) {
|
||||
color = PipeWire.RED;
|
||||
} else if (color == PipeWire.YELLOW) {
|
||||
color = null;
|
||||
} else {
|
||||
color = PipeWire.values()[color.ordinal() + 1];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
if (color != null) {
|
||||
nbt.setByte("color", (byte) color.ordinal());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
if (nbt.hasKey("color")) {
|
||||
color = PipeWire.values()[nbt.getByte("color")];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,10 +11,13 @@ package buildcraft.transport.triggers;
|
|||
import java.util.Locale;
|
||||
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.triggers.BCAction;
|
||||
import buildcraft.core.triggers.StatementIconProvider;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.Gate;
|
||||
|
||||
public class ActionSignalOutput extends BCAction {
|
||||
|
||||
|
@ -50,4 +53,31 @@ public class ActionSignalOutput extends BCAction {
|
|||
public IAction rotateLeft() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxParameters() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IActionParameter createParameter(int index) {
|
||||
return new ActionParameterSignal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionActivate(IGate iGate, IActionParameter[] parameters) {
|
||||
Gate gate = (Gate) iGate;
|
||||
|
||||
gate.broadcastSignal(color);
|
||||
|
||||
for (IActionParameter param : parameters) {
|
||||
if (param != null) {
|
||||
ActionParameterSignal signal = (ActionParameterSignal) param;
|
||||
|
||||
if (signal.color != null) {
|
||||
gate.broadcastSignal(signal.color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,19 +22,15 @@ import buildcraft.core.triggers.StatementIconProvider;
|
|||
public class TriggerParameterSignal implements ITriggerParameter {
|
||||
|
||||
@NetworkData
|
||||
private boolean active;
|
||||
public boolean active = false;
|
||||
|
||||
@NetworkData
|
||||
private PipeWire color = PipeWire.RED;
|
||||
public PipeWire color = null;
|
||||
|
||||
public TriggerParameterSignal() {
|
||||
|
||||
}
|
||||
|
||||
public TriggerParameterSignal(TriggerPipeSignal trigger) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStackToDraw() {
|
||||
return null;
|
||||
|
@ -44,6 +40,10 @@ public class TriggerParameterSignal implements ITriggerParameter {
|
|||
public IIcon getIconToDraw() {
|
||||
int id = 0;
|
||||
|
||||
if (color == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (active) {
|
||||
switch (color) {
|
||||
case RED:
|
||||
|
@ -81,18 +81,35 @@ public class TriggerParameterSignal implements ITriggerParameter {
|
|||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
if (stmt instanceof TriggerPipeSignal) {
|
||||
TriggerPipeSignal signal = (TriggerPipeSignal) stmt;
|
||||
if (color == null) {
|
||||
active = true;
|
||||
color = PipeWire.RED;
|
||||
} else if (active) {
|
||||
active = false;
|
||||
} else if (color == PipeWire.YELLOW) {
|
||||
color = null;
|
||||
} else {
|
||||
color = PipeWire.values()[color.ordinal() + 1];
|
||||
active = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
nbt.setBoolean("active", active);
|
||||
|
||||
if (color != null) {
|
||||
nbt.setByte("color", (byte) color.ordinal());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound) {
|
||||
}
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
active = nbt.getBoolean("active");
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
if (nbt.hasKey("color")) {
|
||||
color = PipeWire.values()[nbt.getByte("color")];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,9 +21,9 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.core.triggers.BCTrigger;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.Pipe;
|
||||
|
@ -72,11 +72,12 @@ public class TriggerPipeContents extends BCTrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameters) {
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
Pipe pipe = (Pipe) gate.getPipe();
|
||||
ITriggerParameter parameter = parameters[0];
|
||||
|
||||
if (((Pipe) pipe).transport instanceof PipeTransportItems) {
|
||||
PipeTransportItems transportItems = (PipeTransportItems) ((Pipe) pipe).transport;
|
||||
if (pipe.transport instanceof PipeTransportItems) {
|
||||
PipeTransportItems transportItems = (PipeTransportItems) pipe.transport;
|
||||
if (kind == PipeContents.empty) {
|
||||
return transportItems.items.isEmpty();
|
||||
} else if (kind == PipeContents.containsItems) {
|
||||
|
@ -92,8 +93,8 @@ public class TriggerPipeContents extends BCTrigger {
|
|||
return !transportItems.items.isEmpty();
|
||||
}
|
||||
}
|
||||
} else if (((Pipe) pipe).transport instanceof PipeTransportFluids) {
|
||||
PipeTransportFluids transportFluids = (PipeTransportFluids) ((Pipe) pipe).transport;
|
||||
} else if (pipe.transport instanceof PipeTransportFluids) {
|
||||
PipeTransportFluids transportFluids = (PipeTransportFluids) pipe.transport;
|
||||
|
||||
FluidStack searchedFluid = null;
|
||||
|
||||
|
@ -120,8 +121,8 @@ public class TriggerPipeContents extends BCTrigger {
|
|||
|
||||
return false;
|
||||
}
|
||||
} else if (((Pipe) pipe).transport instanceof PipeTransportPower) {
|
||||
PipeTransportPower transportPower = (PipeTransportPower) ((Pipe) pipe).transport;
|
||||
} else if (pipe.transport instanceof PipeTransportPower) {
|
||||
PipeTransportPower transportPower = (PipeTransportPower) pipe.transport;
|
||||
|
||||
switch (kind) {
|
||||
case empty:
|
||||
|
|
|
@ -10,11 +10,9 @@ package buildcraft.transport.triggers;
|
|||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.triggers.BCTrigger;
|
||||
import buildcraft.core.triggers.StatementIconProvider;
|
||||
|
@ -45,12 +43,38 @@ public class TriggerPipeSignal extends BCTrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameter) {
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
Pipe pipe = (Pipe) gate.getPipe();
|
||||
|
||||
if (active) {
|
||||
return ((Pipe) pipe).signalStrength[color.ordinal()] > 0;
|
||||
} else {
|
||||
return ((Pipe) pipe).signalStrength[color.ordinal()] == 0;
|
||||
if (pipe.signalStrength[color.ordinal()] == 0) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (pipe.signalStrength[color.ordinal()] > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (ITriggerParameter param : parameters) {
|
||||
if (param != null) {
|
||||
TriggerParameterSignal signal = (TriggerParameterSignal) param;
|
||||
|
||||
if (signal.color != null) {
|
||||
if (signal.active) {
|
||||
if (pipe.signalStrength[signal.color.ordinal()] == 0) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (pipe.signalStrength[signal.color.ordinal()] > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -89,6 +113,6 @@ public class TriggerPipeSignal extends BCTrigger {
|
|||
|
||||
@Override
|
||||
public ITriggerParameter createParameter(int index) {
|
||||
return new TriggerParameterSignal(this);
|
||||
return new TriggerParameterSignal();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,11 +14,9 @@ import net.minecraft.util.IIcon;
|
|||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.core.triggers.BCTrigger;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.TileGenericPipe;
|
||||
|
@ -41,8 +39,8 @@ public class TriggerRedstoneFaderInput extends BCTrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IPipe pipe, ForgeDirection direction, ITriggerParameter[] parameter) {
|
||||
return ((TileGenericPipe) pipe.getTile()).redstoneInput[direction.ordinal()] == level;
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameter) {
|
||||
return ((TileGenericPipe) gate.getPipe().getTile()).redstoneInput[gate.getSide().ordinal()] == level;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue