From 9ddcb5cce4c920f73e4c17c26c634dc33fe5eccb Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 26 Oct 2014 17:56:18 +0100 Subject: [PATCH] added mouse button and description to statement parameters, added sided redstone I/O support --- .../api/gates/ActionParameterItemStack.java | 8 ++- .../api/gates/IStatementParameter.java | 4 +- .../api/gates/TriggerParameterItemStack.java | 7 ++- api/buildcraft/api/gates/package-info.java | 2 +- common/buildcraft/BuildCraftCore.java | 4 +- common/buildcraft/BuildCraftTransport.java | 8 +-- .../builders/HeuristicBlockDetection.java | 2 +- .../builders/schematics/SchematicRail.java | 6 +-- .../core/blueprints/SchematicRegistry.java | 2 +- .../buildcraft/core/render/RenderRobot.java | 2 +- .../core/statements/ActionRedstoneOutput.java | 17 ++++++ .../statements/StatementIconProvider.java | 6 ++- .../StatementParameterDirection.java | 14 ++++- ...tatementParameterRedstoneGateSideOnly.java | 53 +++++++++++++++++++ .../core/statements/TriggerRedstoneInput.java | 21 +++++++- .../core/utils/WorldPropertyIsOre.java | 2 +- common/buildcraft/transport/Gate.java | 28 +++++++--- common/buildcraft/transport/Pipe.java | 22 ++++---- .../transport/PipeColoringRecipe.java | 3 +- .../transport/gui/GuiGateInterface.java | 13 ++++- .../statements/ActionParameterSignal.java | 16 ++++-- .../statements/ActionRedstoneFaderOutput.java | 18 +++++++ .../statements/TriggerParameterSignal.java | 42 +++++++++++---- .../statements/TriggerRedstoneFaderInput.java | 24 ++++++++- 24 files changed, 262 insertions(+), 62 deletions(-) create mode 100644 common/buildcraft/core/statements/StatementParameterRedstoneGateSideOnly.java mode change 100755 => 100644 common/buildcraft/transport/statements/ActionParameterSignal.java mode change 100755 => 100644 common/buildcraft/transport/statements/TriggerParameterSignal.java diff --git a/api/buildcraft/api/gates/ActionParameterItemStack.java b/api/buildcraft/api/gates/ActionParameterItemStack.java index 86c7f376..e5863989 100755 --- a/api/buildcraft/api/gates/ActionParameterItemStack.java +++ b/api/buildcraft/api/gates/ActionParameterItemStack.java @@ -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(); + } } diff --git a/api/buildcraft/api/gates/IStatementParameter.java b/api/buildcraft/api/gates/IStatementParameter.java index 79c3c823..bafce2f5 100755 --- a/api/buildcraft/api/gates/IStatementParameter.java +++ b/api/buildcraft/api/gates/IStatementParameter.java @@ -19,8 +19,10 @@ public interface IStatementParameter { ItemStack getItemStackToDraw(); IIcon getIconToDraw(); + + String getDescription(); - void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack); + void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton); void writeToNBT(NBTTagCompound compound); diff --git a/api/buildcraft/api/gates/TriggerParameterItemStack.java b/api/buildcraft/api/gates/TriggerParameterItemStack.java index 2685be7f..a5201b0d 100644 --- a/api/buildcraft/api/gates/TriggerParameterItemStack.java +++ b/api/buildcraft/api/gates/TriggerParameterItemStack.java @@ -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(); + } } diff --git a/api/buildcraft/api/gates/package-info.java b/api/buildcraft/api/gates/package-info.java index 1f05792a..0a4e4df3 100644 --- a/api/buildcraft/api/gates/package-info.java +++ b/api/buildcraft/api/gates/package-info.java @@ -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; diff --git a/common/buildcraft/BuildCraftCore.java b/common/buildcraft/BuildCraftCore.java index 39543b7d..ada2771a 100644 --- a/common/buildcraft/BuildCraftCore.java +++ b/common/buildcraft/BuildCraftCore.java @@ -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()); diff --git a/common/buildcraft/BuildCraftTransport.java b/common/buildcraft/BuildCraftTransport.java index fbba6811..d441fb69 100644 --- a/common/buildcraft/BuildCraftTransport.java +++ b/common/buildcraft/BuildCraftTransport.java @@ -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); diff --git a/common/buildcraft/builders/HeuristicBlockDetection.java b/common/buildcraft/builders/HeuristicBlockDetection.java index 0201553b..e9554403 100644 --- a/common/buildcraft/builders/HeuristicBlockDetection.java +++ b/common/buildcraft/builders/HeuristicBlockDetection.java @@ -55,7 +55,7 @@ public final class HeuristicBlockDetection { } else { SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlockCreative.class); } - } catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/common/buildcraft/builders/schematics/SchematicRail.java b/common/buildcraft/builders/schematics/SchematicRail.java index b89b00c1..28d0aea4 100755 --- a/common/buildcraft/builders/schematics/SchematicRail.java +++ b/common/buildcraft/builders/schematics/SchematicRail.java @@ -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; diff --git a/common/buildcraft/core/blueprints/SchematicRegistry.java b/common/buildcraft/core/blueprints/SchematicRegistry.java index 39c08a8f..b3dee0dd 100644 --- a/common/buildcraft/core/blueprints/SchematicRegistry.java +++ b/common/buildcraft/core/blueprints/SchematicRegistry.java @@ -95,7 +95,7 @@ public final class SchematicRegistry implements ISchematicRegistry { } public void registerSchematicBlock(Block block, int meta, Class 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; } diff --git a/common/buildcraft/core/render/RenderRobot.java b/common/buildcraft/core/render/RenderRobot.java index 9e609373..f36fafa1 100644 --- a/common/buildcraft/core/render/RenderRobot.java +++ b/common/buildcraft/core/render/RenderRobot.java @@ -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); diff --git a/common/buildcraft/core/statements/ActionRedstoneOutput.java b/common/buildcraft/core/statements/ActionRedstoneOutput.java index 1879fec4..f0436ae1 100644 --- a/common/buildcraft/core/statements/ActionRedstoneOutput.java +++ b/common/buildcraft/core/statements/ActionRedstoneOutput.java @@ -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; + } } diff --git a/common/buildcraft/core/statements/StatementIconProvider.java b/common/buildcraft/core/statements/StatementIconProvider.java index 061f6d45..0e5752e5 100644 --- a/common/buildcraft/core/statements/StatementIconProvider.java +++ b/common/buildcraft/core/statements/StatementIconProvider.java @@ -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"); } } diff --git a/common/buildcraft/core/statements/StatementParameterDirection.java b/common/buildcraft/core/statements/StatementParameterDirection.java index cab7fbc5..e2b49334 100644 --- a/common/buildcraft/core/statements/StatementParameterDirection.java +++ b/common/buildcraft/core/statements/StatementParameterDirection.java @@ -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()); + } + } } diff --git a/common/buildcraft/core/statements/StatementParameterRedstoneGateSideOnly.java b/common/buildcraft/core/statements/StatementParameterRedstoneGateSideOnly.java new file mode 100644 index 00000000..8245fee8 --- /dev/null +++ b/common/buildcraft/core/statements/StatementParameterRedstoneGateSideOnly.java @@ -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") : ""; + } +} diff --git a/common/buildcraft/core/statements/TriggerRedstoneInput.java b/common/buildcraft/core/statements/TriggerRedstoneInput.java index 003279dd..679dc592 100644 --- a/common/buildcraft/core/statements/TriggerRedstoneInput.java +++ b/common/buildcraft/core/statements/TriggerRedstoneInput.java @@ -26,12 +26,31 @@ public class TriggerRedstoneInput extends BCTrigger { public String getDescription() { 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; } diff --git a/common/buildcraft/core/utils/WorldPropertyIsOre.java b/common/buildcraft/core/utils/WorldPropertyIsOre.java index 7c9a8a52..fc0c9fb5 100755 --- a/common/buildcraft/core/utils/WorldPropertyIsOre.java +++ b/common/buildcraft/core/utils/WorldPropertyIsOre.java @@ -34,7 +34,7 @@ public class WorldPropertyIsOre extends WorldProperty { } for (String oreName : OreDictionary.getOreNames()) { - if(oreName.startsWith("ore")) { + if (oreName.startsWith("ore")) { ArrayList oreStacks = OreDictionary.getOres(oreName); if (oreStacks.size() > 0) { Block block = Block.getBlockFromItem(oreStacks.get(0).getItem()); diff --git a/common/buildcraft/transport/Gate.java b/common/buildcraft/transport/Gate.java index 03aab079..188dec4f 100644 --- a/common/buildcraft/transport/Gate.java +++ b/common/buildcraft/transport/Gate.java @@ -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,7 +67,8 @@ 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 * by the server side only, the client is supposed to be referring to the @@ -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(); @@ -338,6 +344,9 @@ public final class Gate implements IGate { public void resolveActions() { int oldRedstoneOutput = redstoneOutput; redstoneOutput = 0; + + int oldRedstoneOutputSide = redstoneOutputSide; + redstoneOutputSide = 0; /* for (ForgeDirection ioSide : ForgeDirection.VALID_DIRECTIONS) { pipe.transport.allowInput(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); } diff --git a/common/buildcraft/transport/Pipe.java b/common/buildcraft/transport/Pipe.java index 7bf3f47a..7c956a3b 100644 --- a/common/buildcraft/transport/Pipe.java +++ b/common/buildcraft/transport/Pipe.java @@ -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 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 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 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); } } diff --git a/common/buildcraft/transport/PipeColoringRecipe.java b/common/buildcraft/transport/PipeColoringRecipe.java index 6b0b9101..964f2c71 100644 --- a/common/buildcraft/transport/PipeColoringRecipe.java +++ b/common/buildcraft/transport/PipeColoringRecipe.java @@ -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 { diff --git a/common/buildcraft/transport/gui/GuiGateInterface.java b/common/buildcraft/transport/gui/GuiGateInterface.java index 14aca34f..9f6aaef8 100644 --- a/common/buildcraft/transport/gui/GuiGateInterface.java +++ b/common/buildcraft/transport/gui/GuiGateInterface.java @@ -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); } } diff --git a/common/buildcraft/transport/statements/ActionParameterSignal.java b/common/buildcraft/transport/statements/ActionParameterSignal.java old mode 100755 new mode 100644 index 0091bba9..f3af9dd8 --- a/common/buildcraft/transport/statements/ActionParameterSignal.java +++ b/common/buildcraft/transport/statements/ActionParameterSignal.java @@ -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))); + } } diff --git a/common/buildcraft/transport/statements/ActionRedstoneFaderOutput.java b/common/buildcraft/transport/statements/ActionRedstoneFaderOutput.java index 40720e77..4dc871bc 100644 --- a/common/buildcraft/transport/statements/ActionRedstoneFaderOutput.java +++ b/common/buildcraft/transport/statements/ActionRedstoneFaderOutput.java @@ -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; + } } diff --git a/common/buildcraft/transport/statements/TriggerParameterSignal.java b/common/buildcraft/transport/statements/TriggerParameterSignal.java old mode 100755 new mode 100644 index b8e3cba4..c3e310dd --- a/common/buildcraft/transport/statements/TriggerParameterSignal.java +++ b/common/buildcraft/transport/statements/TriggerParameterSignal.java @@ -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,17 +82,31 @@ public class TriggerParameterSignal implements ITriggerParameter { } @Override - public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack) { - if (color == null) { - active = true; - color = PipeWire.RED; - } else if (active) { - active = false; - } else if (color == PipeWire.YELLOW) { - color = null; + public void clicked(IPipeTile pipe, IStatement stmt, ItemStack stack, int mouseButton) { + if (mouseButton == 0) { + 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; + } } else { - color = PipeWire.values()[color.ordinal() + 1]; - active = true; + 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; + } } } @@ -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))); + } } diff --git a/common/buildcraft/transport/statements/TriggerRedstoneFaderInput.java b/common/buildcraft/transport/statements/TriggerRedstoneFaderInput.java index ea049887..f81e498b 100644 --- a/common/buildcraft/transport/statements/TriggerRedstoneFaderInput.java +++ b/common/buildcraft/transport/statements/TriggerRedstoneFaderInput.java @@ -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; + } }