added mouse button and description to statement parameters, added sided redstone I/O support
This commit is contained in:
parent
c1c475fc65
commit
9ddcb5cce4
24 changed files with 262 additions and 62 deletions
|
@ -11,7 +11,6 @@ package buildcraft.api.gates;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import buildcraft.api.core.NetworkData;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
|
||||
|
@ -31,7 +30,7 @@ public class ActionParameterItemStack implements IActionParameter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
if (stack != null) {
|
||||
this.stack = stack.copy();
|
||||
this.stack.stackSize = 1;
|
||||
|
@ -63,4 +62,9 @@ public class ActionParameterItemStack implements IActionParameter {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return stack.getDisplayName();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,9 @@ public interface IStatementParameter {
|
|||
|
||||
IIcon getIconToDraw();
|
||||
|
||||
void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack);
|
||||
String getDescription();
|
||||
|
||||
void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton);
|
||||
|
||||
void writeToNBT(NBTTagCompound compound);
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import net.minecraft.item.Item;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import buildcraft.api.core.NetworkData;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
|
||||
|
@ -32,7 +31,7 @@ public class TriggerParameterItemStack implements ITriggerParameter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
if (stack != null) {
|
||||
this.stack = stack.copy();
|
||||
this.stack.stackSize = 1;
|
||||
|
@ -60,4 +59,8 @@ public class TriggerParameterItemStack implements ITriggerParameter {
|
|||
stack = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("stack"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return stack.getDisplayName();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +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
|
||||
*/
|
||||
@API(apiVersion = "2.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|gates")
|
||||
@API(apiVersion = "2.1", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|gates")
|
||||
package buildcraft.api.gates;
|
||||
import cpw.mods.fml.common.API;
|
||||
|
||||
|
|
|
@ -96,11 +96,13 @@ import buildcraft.core.recipes.RefineryRecipeManager;
|
|||
import buildcraft.core.render.BlockHighlightHandler;
|
||||
import buildcraft.core.robots.EntityRobot;
|
||||
import buildcraft.core.statements.ActionMachineControl;
|
||||
import buildcraft.core.statements.ActionMachineControl.Mode;
|
||||
import buildcraft.core.statements.ActionRedstoneOutput;
|
||||
import buildcraft.core.statements.DefaultActionProvider;
|
||||
import buildcraft.core.statements.DefaultTriggerProvider;
|
||||
import buildcraft.core.statements.StatementIconProvider;
|
||||
import buildcraft.core.statements.StatementParameterDirection;
|
||||
import buildcraft.core.statements.StatementParameterRedstoneGateSideOnly;
|
||||
import buildcraft.core.statements.TriggerEnergy;
|
||||
import buildcraft.core.statements.TriggerFluidContainer;
|
||||
import buildcraft.core.statements.TriggerFluidContainerLevel;
|
||||
|
@ -108,7 +110,6 @@ import buildcraft.core.statements.TriggerInventory;
|
|||
import buildcraft.core.statements.TriggerInventoryLevel;
|
||||
import buildcraft.core.statements.TriggerMachine;
|
||||
import buildcraft.core.statements.TriggerRedstoneInput;
|
||||
import buildcraft.core.statements.ActionMachineControl.Mode;
|
||||
import buildcraft.core.utils.ColorUtils;
|
||||
import buildcraft.core.utils.CraftingHandler;
|
||||
import buildcraft.core.utils.WorldPropertyIsDirt;
|
||||
|
@ -345,6 +346,7 @@ public class BuildCraftCore extends BuildCraftMod {
|
|||
StatementManager.registerParameterClass("buildcraft:stackTrigger", TriggerParameterItemStack.class);
|
||||
StatementManager.registerParameterClass("buildcraft:stackAction", ActionParameterItemStack.class);
|
||||
StatementManager.registerParameterClass("buildcraft:pipeActionDirection", StatementParameterDirection.class);
|
||||
StatementManager.registerParameterClass("buildcraft:redstoneGateSideOnly", StatementParameterRedstoneGateSideOnly.class);
|
||||
StatementManager.registerTriggerProvider(new DefaultTriggerProvider());
|
||||
StatementManager.registerActionProvider(new DefaultActionProvider());
|
||||
|
||||
|
|
|
@ -129,12 +129,12 @@ import buildcraft.transport.statements.ActionRedstoneFaderOutput;
|
|||
import buildcraft.transport.statements.ActionSignalOutput;
|
||||
import buildcraft.transport.statements.ActionSingleEnergyPulse;
|
||||
import buildcraft.transport.statements.ActionValve;
|
||||
import buildcraft.transport.statements.ActionValve.ValveState;
|
||||
import buildcraft.transport.statements.TriggerClockTimer;
|
||||
import buildcraft.transport.statements.TriggerParameterSignal;
|
||||
import buildcraft.transport.statements.TriggerPipeContents;
|
||||
import buildcraft.transport.statements.TriggerPipeSignal;
|
||||
import buildcraft.transport.statements.TriggerRedstoneFaderInput;
|
||||
import buildcraft.transport.statements.ActionValve.ValveState;
|
||||
import buildcraft.transport.statements.TriggerClockTimer.Time;
|
||||
import buildcraft.transport.statements.TriggerPipeContents.PipeContents;
|
||||
import buildcraft.transport.stripes.StripesHandlerArrow;
|
||||
|
@ -469,12 +469,6 @@ public class BuildCraftTransport extends BuildCraftMod {
|
|||
channels = NetworkRegistry.INSTANCE.newChannel
|
||||
(DefaultProps.NET_CHANNEL_NAME + "-TRANSPORT", new BuildCraftChannelHandler(), new PacketHandlerTransport());
|
||||
|
||||
// Register connection handler
|
||||
// MinecraftForge.registerConnectionHandler(new ConnectionHandler());
|
||||
|
||||
// Register GUI handler
|
||||
// MinecraftForge.setGuiHandler(mod_BuildCraftTransport.instance, new GuiHandler());
|
||||
|
||||
TransportProxy.proxy.registerTileEntities();
|
||||
|
||||
BuilderAPI.schematicRegistry.registerSchematicBlock(genericPipeBlock, SchematicPipe.class);
|
||||
|
|
|
@ -55,7 +55,7 @@ public final class HeuristicBlockDetection {
|
|||
} else {
|
||||
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlockCreative.class);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,13 +41,9 @@ public class SchematicRail extends SchematicBlock {
|
|||
break;
|
||||
|
||||
case 6:
|
||||
meta = 7;
|
||||
break;
|
||||
case 7:
|
||||
meta = 8;
|
||||
break;
|
||||
case 8:
|
||||
meta = 9;
|
||||
meta++;
|
||||
break;
|
||||
case 9:
|
||||
meta = 6;
|
||||
|
|
|
@ -95,7 +95,7 @@ public final class SchematicRegistry implements ISchematicRegistry {
|
|||
}
|
||||
|
||||
public void registerSchematicBlock(Block block, int meta, Class<? extends Schematic> clazz, Object... params) {
|
||||
if (block == null || Block.blockRegistry.getNameForObject(block) == null || Block.blockRegistry.getNameForObject(block).equals("null")) {
|
||||
if (block == null || Block.blockRegistry.getNameForObject(block) == null || "null".equals(Block.blockRegistry.getNameForObject(block))) {
|
||||
BCLog.logger.warn("Mod tried to register block with null name! Ignoring.");
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class RenderRobot extends Render implements IItemRenderer {
|
|||
|
||||
try {
|
||||
renderManager.renderEngine.bindTexture(robot.getTexture());
|
||||
} catch(Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// TODO: Figure out why the NPE inside Minecraft happens.
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
package buildcraft.core.statements;
|
||||
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
|
||||
public class ActionRedstoneOutput extends BCActionPassive {
|
||||
|
||||
|
@ -24,4 +25,20 @@ public class ActionRedstoneOutput extends BCActionPassive {
|
|||
public int getIconIndex() {
|
||||
return StatementIconProvider.Trigger_RedstoneInput_Active;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IActionParameter createParameter(int index) {
|
||||
IActionParameter param = null;
|
||||
|
||||
if (index == 0) {
|
||||
param = new StatementParameterRedstoneGateSideOnly();
|
||||
}
|
||||
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxParameters() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,9 +69,9 @@ public final class StatementIconProvider implements IIconProvider {
|
|||
public static final int Action_Parameter_Direction_South = 42;
|
||||
public static final int Action_Parameter_Direction_West = 43;
|
||||
public static final int Action_Parameter_Direction_East = 44;
|
||||
public static final int Action_Parameter_RedstoneGateSideOnly = 45;
|
||||
|
||||
|
||||
public static final int MAX = 45;
|
||||
public static final int MAX = 46;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private final IIcon[] icons = new IIcon[MAX];
|
||||
|
@ -135,5 +135,7 @@ public final class StatementIconProvider implements IIconProvider {
|
|||
icons[StatementIconProvider.Action_Parameter_Direction_South] = iconRegister.registerIcon("buildcraft:triggers/trigger_dir_south");
|
||||
icons[StatementIconProvider.Action_Parameter_Direction_West] = iconRegister.registerIcon("buildcraft:triggers/trigger_dir_west");
|
||||
icons[StatementIconProvider.Action_Parameter_Direction_East] = iconRegister.registerIcon("buildcraft:triggers/trigger_dir_east");
|
||||
|
||||
icons[StatementIconProvider.Action_Parameter_RedstoneGateSideOnly] = iconRegister.registerIcon("buildcraft:triggers/redstone_gate_side_only");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import buildcraft.api.gates.IActionParameter;
|
|||
import buildcraft.api.gates.IStatement;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
|
||||
public class StatementParameterDirection implements IActionParameter, ITriggerParameter {
|
||||
|
||||
|
@ -42,9 +43,9 @@ public class StatementParameterDirection implements IActionParameter, ITriggerPa
|
|||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
do {
|
||||
direction = ForgeDirection.getOrientation((direction.ordinal() + 1) % 6);
|
||||
direction = ForgeDirection.getOrientation((direction.ordinal() + (mouseButton > 0 ? -1 : 1)) % 6);
|
||||
} while (!pipe.isPipeConnected(direction));
|
||||
}
|
||||
|
||||
|
@ -70,4 +71,13 @@ public class StatementParameterDirection implements IActionParameter, ITriggerPa
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
if (direction == ForgeDirection.UNKNOWN) {
|
||||
return "";
|
||||
} else {
|
||||
return StringUtils.localize("direction." + direction.name().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
package buildcraft.core.statements;
|
||||
|
||||
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.gates.ITriggerParameter;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
|
||||
public class StatementParameterRedstoneGateSideOnly implements
|
||||
IActionParameter, ITriggerParameter {
|
||||
@NetworkData
|
||||
public boolean isOn = false;
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStackToDraw() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIconToDraw() {
|
||||
if (!isOn) {
|
||||
return null;
|
||||
} else {
|
||||
return StatementIconProvider.INSTANCE.getIcon(StatementIconProvider.Action_Parameter_RedstoneGateSideOnly);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
isOn = !isOn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound) {
|
||||
compound.setByte("isOn", isOn ? (byte) 1 : (byte) 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
if (compound.hasKey("isOn")) {
|
||||
isOn = compound.getByte("isOn") == 1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return isOn ? StringUtils.localize("gate.parameter.redstone.gateSideOnly") : "";
|
||||
}
|
||||
}
|
|
@ -27,11 +27,30 @@ public class TriggerRedstoneInput extends BCTrigger {
|
|||
return StringUtils.localize("gate.trigger.redstone.input." + (active ? "active" : "inactive"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITriggerParameter createParameter(int index) {
|
||||
ITriggerParameter param = null;
|
||||
|
||||
if (index == 0) {
|
||||
param = new StatementParameterRedstoneGateSideOnly();
|
||||
}
|
||||
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxParameters() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
TileGenericPipe tile = (TileGenericPipe) gate.getPipe().getTile();
|
||||
//int level = tile.redstoneInputSide[gate.getSide().ordinal()];
|
||||
int level = tile.redstoneInput;
|
||||
if (parameters.length > 0 && parameters[0] instanceof StatementParameterRedstoneGateSideOnly &&
|
||||
((StatementParameterRedstoneGateSideOnly) parameters[0]).isOn) {
|
||||
level = tile.redstoneInputSide[gate.getSide().ordinal()];
|
||||
}
|
||||
|
||||
return active ? level > 0 : level == 0;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ public class WorldPropertyIsOre extends WorldProperty {
|
|||
}
|
||||
|
||||
for (String oreName : OreDictionary.getOreNames()) {
|
||||
if(oreName.startsWith("ore")) {
|
||||
if (oreName.startsWith("ore")) {
|
||||
ArrayList<ItemStack> oreStacks = OreDictionary.getOres(oreName);
|
||||
if (oreStacks.size() > 0) {
|
||||
Block block = Block.getBlockFromItem(oreStacks.get(0).getItem());
|
||||
|
|
|
@ -37,6 +37,7 @@ import buildcraft.api.transport.IPipe;
|
|||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.statements.ActionRedstoneOutput;
|
||||
import buildcraft.core.statements.StatementParameterRedstoneGateSideOnly;
|
||||
import buildcraft.transport.gates.ActionSlot;
|
||||
import buildcraft.transport.gates.GateDefinition.GateLogic;
|
||||
import buildcraft.transport.gates.GateDefinition.GateMaterial;
|
||||
|
@ -66,6 +67,7 @@ public final class Gate implements IGate {
|
|||
public BitSet broadcastSignal = new BitSet(PipeWire.VALUES.length);
|
||||
public BitSet prevBroadcastSignal = new BitSet(PipeWire.VALUES.length);
|
||||
public int redstoneOutput = 0;
|
||||
public int redstoneOutputSide = 0;
|
||||
|
||||
/**
|
||||
* this is the internal pulsing state of the gate. Intended to be managed
|
||||
|
@ -329,6 +331,10 @@ public final class Gate implements IGate {
|
|||
return redstoneOutput;
|
||||
}
|
||||
|
||||
public int getSidedRedstoneOutput() {
|
||||
return redstoneOutputSide;
|
||||
}
|
||||
|
||||
public void startResolution() {
|
||||
for (GateExpansionController expansion : expansions.values()) {
|
||||
expansion.startResolution();
|
||||
|
@ -339,6 +345,9 @@ public final class Gate implements IGate {
|
|||
int oldRedstoneOutput = redstoneOutput;
|
||||
redstoneOutput = 0;
|
||||
|
||||
int oldRedstoneOutputSide = redstoneOutputSide;
|
||||
redstoneOutputSide = 0;
|
||||
|
||||
/* for (ForgeDirection ioSide : ForgeDirection.VALID_DIRECTIONS) {
|
||||
pipe.transport.allowInput(ioSide, true);
|
||||
pipe.transport.allowOutput(ioSide, true);
|
||||
|
@ -447,10 +456,17 @@ public final class Gate implements IGate {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (action instanceof ActionRedstoneOutput) {
|
||||
redstoneOutput = 15;
|
||||
} else if (action instanceof ActionRedstoneFaderOutput) {
|
||||
redstoneOutput = ((ActionRedstoneFaderOutput) action).level;
|
||||
if (action instanceof ActionRedstoneOutput || action instanceof ActionRedstoneFaderOutput) {
|
||||
if (slot.parameters != null && slot.parameters.length >= 1 &&
|
||||
slot.parameters[0] instanceof StatementParameterRedstoneGateSideOnly &&
|
||||
((StatementParameterRedstoneGateSideOnly) slot.parameters[0]).isOn) {
|
||||
redstoneOutputSide = (action instanceof ActionRedstoneFaderOutput) ? ((ActionRedstoneFaderOutput) action).level : 15;
|
||||
} else {
|
||||
redstoneOutput = (action instanceof ActionRedstoneFaderOutput) ? ((ActionRedstoneFaderOutput) action).level : 15;
|
||||
if (redstoneOutput > redstoneOutputSide) {
|
||||
redstoneOutputSide = redstoneOutput;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
|
||||
TileEntity tile = pipe.container.getTile(side);
|
||||
|
@ -464,7 +480,7 @@ public final class Gate implements IGate {
|
|||
|
||||
pipe.actionsActivated(activeActions);
|
||||
|
||||
if (oldRedstoneOutput != redstoneOutput) {
|
||||
if (oldRedstoneOutput != redstoneOutput || oldRedstoneOutputSide != redstoneOutputSide) {
|
||||
pipe.updateNeighbors(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldSettings.GameType;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
@ -404,11 +403,14 @@ public abstract class Pipe<T extends PipeTransport> implements IDropControlInven
|
|||
return false;
|
||||
}
|
||||
|
||||
private int getMaxRedstoneOutput() {
|
||||
public int getMaxRedstoneOutput(ForgeDirection dir) {
|
||||
int output = 0;
|
||||
|
||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
output = Math.max(output, getRedstoneOutput(dir));
|
||||
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
|
||||
output = Math.max(output, getRedstoneOutput(side));
|
||||
if (side == dir) {
|
||||
output = Math.max(output, getRedstoneOutputSide(side));
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
|
@ -420,6 +422,12 @@ public abstract class Pipe<T extends PipeTransport> implements IDropControlInven
|
|||
return gate != null ? gate.getRedstoneOutput() : 0;
|
||||
}
|
||||
|
||||
private int getRedstoneOutputSide(ForgeDirection dir) {
|
||||
Gate gate = gates[dir.ordinal()];
|
||||
|
||||
return gate != null ? gate.getSidedRedstoneOutput() : 0;
|
||||
}
|
||||
|
||||
public int isPoweringTo(int side) {
|
||||
ForgeDirection o = ForgeDirection.getOrientation(side).getOpposite();
|
||||
|
||||
|
@ -427,12 +435,8 @@ public abstract class Pipe<T extends PipeTransport> implements IDropControlInven
|
|||
|
||||
if (tile instanceof TileGenericPipe && container.isPipeConnected(o)) {
|
||||
return 0;
|
||||
/* } else if (tile != null && container.isPipeConnected(o)) {
|
||||
return getMaxRedstoneOutput();
|
||||
} else {
|
||||
return getRedstoneOutput(o); */
|
||||
} else {
|
||||
return getMaxRedstoneOutput();
|
||||
return getMaxRedstoneOutput(o);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.core.utils.ColorUtils;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.world.World;
|
||||
import buildcraft.core.utils.ColorUtils;
|
||||
|
||||
public class PipeColoringRecipe implements IRecipe {
|
||||
|
||||
|
|
|
@ -125,6 +125,17 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
return getParameter() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
IStatementParameter parameter = getParameter();
|
||||
|
||||
if (parameter != null) {
|
||||
return parameter.getDescription() != null ? parameter.getDescription() : "";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStack() {
|
||||
IStatementParameter parameter = getParameter();
|
||||
|
@ -463,7 +474,7 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
}
|
||||
|
||||
if (param != null) {
|
||||
param.clicked(pipe.container, statement.getStatement(), mc.thePlayer.inventory.getItemStack());
|
||||
param.clicked(pipe.container, statement.getStatement(), mc.thePlayer.inventory.getItemStack(), k);
|
||||
paramSlot.setParameter(param, true);
|
||||
}
|
||||
}
|
||||
|
|
16
common/buildcraft/transport/statements/ActionParameterSignal.java
Executable file → Normal file
16
common/buildcraft/transport/statements/ActionParameterSignal.java
Executable file → Normal file
|
@ -8,6 +8,8 @@
|
|||
*/
|
||||
package buildcraft.transport.statements;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
@ -17,6 +19,7 @@ import buildcraft.api.gates.IStatement;
|
|||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.statements.StatementIconProvider;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
|
||||
public class ActionParameterSignal implements IActionParameter {
|
||||
|
||||
|
@ -59,13 +62,13 @@ public class ActionParameterSignal implements IActionParameter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
if (color == null) {
|
||||
color = PipeWire.RED;
|
||||
} else if (color == PipeWire.YELLOW) {
|
||||
color = mouseButton == 0 ? PipeWire.RED : PipeWire.YELLOW;
|
||||
} else if (color == (mouseButton == 0 ? PipeWire.YELLOW : PipeWire.RED)) {
|
||||
color = null;
|
||||
} else {
|
||||
color = PipeWire.values()[color.ordinal() + 1];
|
||||
color = PipeWire.values()[mouseButton == 0 ? color.ordinal() + 1 : color.ordinal() - 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,4 +96,9 @@ public class ActionParameterSignal implements IActionParameter {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return String.format(StringUtils.localize("gate.action.pipe.wire"), StringUtils.localize("color." + color.name().toLowerCase(Locale.ENGLISH)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,9 @@ import net.minecraft.client.renderer.texture.IIconRegister;
|
|||
import net.minecraft.util.IIcon;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import buildcraft.api.gates.IActionParameter;
|
||||
import buildcraft.core.statements.BCActionPassive;
|
||||
import buildcraft.core.statements.StatementParameterRedstoneGateSideOnly;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
|
||||
public class ActionRedstoneFaderOutput extends BCActionPassive {
|
||||
|
@ -41,4 +43,20 @@ public class ActionRedstoneFaderOutput extends BCActionPassive {
|
|||
public void registerIcons(IIconRegister iconRegister) {
|
||||
icon = iconRegister.registerIcon(String.format("buildcraft:triggers/redstone_%02d", level));
|
||||
}
|
||||
|
||||
@Override
|
||||
public IActionParameter createParameter(int index) {
|
||||
IActionParameter param = null;
|
||||
|
||||
if (index == 0) {
|
||||
param = new StatementParameterRedstoneGateSideOnly();
|
||||
}
|
||||
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxParameters() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
24
common/buildcraft/transport/statements/TriggerParameterSignal.java
Executable file → Normal file
24
common/buildcraft/transport/statements/TriggerParameterSignal.java
Executable file → Normal file
|
@ -8,6 +8,8 @@
|
|||
*/
|
||||
package buildcraft.transport.statements;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
@ -17,6 +19,7 @@ import buildcraft.api.gates.ITriggerParameter;
|
|||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.api.transport.PipeWire;
|
||||
import buildcraft.core.statements.StatementIconProvider;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
|
||||
public class TriggerParameterSignal implements ITriggerParameter {
|
||||
|
||||
|
@ -79,7 +82,8 @@ public class TriggerParameterSignal implements ITriggerParameter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) {
|
||||
public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) {
|
||||
if (mouseButton == 0) {
|
||||
if (color == null) {
|
||||
active = true;
|
||||
color = PipeWire.RED;
|
||||
|
@ -91,6 +95,19 @@ public class TriggerParameterSignal implements ITriggerParameter {
|
|||
color = PipeWire.values()[color.ordinal() + 1];
|
||||
active = true;
|
||||
}
|
||||
} else {
|
||||
if (color == null) {
|
||||
active = false;
|
||||
color = PipeWire.YELLOW;
|
||||
} else if (!active) {
|
||||
active = true;
|
||||
} else if (color == PipeWire.RED) {
|
||||
color = null;
|
||||
} else {
|
||||
color = PipeWire.values()[color.ordinal() - 1];
|
||||
active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,4 +128,9 @@ public class TriggerParameterSignal implements ITriggerParameter {
|
|||
color = PipeWire.values()[nbt.getByte("color")];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return String.format(StringUtils.localize("gate.trigger.pipe.wire." + (active ? "active" : "inactive")), StringUtils.localize("color." + color.name().toLowerCase(Locale.ENGLISH)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
import buildcraft.api.gates.IGate;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.core.statements.BCTrigger;
|
||||
import buildcraft.core.statements.StatementParameterRedstoneGateSideOnly;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.TileGenericPipe;
|
||||
|
||||
|
@ -33,10 +34,13 @@ public class TriggerRedstoneFaderInput extends BCTrigger {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameter) {
|
||||
public boolean isTriggerActive(IGate gate, ITriggerParameter[] parameters) {
|
||||
TileGenericPipe tile = (TileGenericPipe) gate.getPipe().getTile();
|
||||
// int inputLevel = tile.redstoneInputSide[gate.getSide().ordinal()];
|
||||
int inputLevel = tile.redstoneInput;
|
||||
if (parameters.length > 0 && parameters[0] instanceof StatementParameterRedstoneGateSideOnly &&
|
||||
((StatementParameterRedstoneGateSideOnly) parameters[0]).isOn) {
|
||||
inputLevel = tile.redstoneInputSide[gate.getSide().ordinal()];
|
||||
}
|
||||
|
||||
return inputLevel == level;
|
||||
}
|
||||
|
@ -46,4 +50,20 @@ public class TriggerRedstoneFaderInput extends BCTrigger {
|
|||
public void registerIcons(IIconRegister iconRegister) {
|
||||
icon = iconRegister.registerIcon(String.format("buildcraft:triggers/redstone_%02d", level));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITriggerParameter createParameter(int index) {
|
||||
ITriggerParameter param = null;
|
||||
|
||||
if (index == 0) {
|
||||
param = new StatementParameterRedstoneGateSideOnly();
|
||||
}
|
||||
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxParameters() {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue