diff options
Diffstat (limited to 'src')
6 files changed, 79 insertions, 13 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index e6bd089027..053d8c6236 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -42,6 +42,7 @@ import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; import gregtech.api.world.GT_Worldgen; +import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverBase; import gregtech.common.items.GT_IntegratedCircuit_Item; import java.util.ArrayList; import java.util.Collection; @@ -179,17 +180,33 @@ public class GregTech_API { */ public static final Map<String, Map<Integer, Map<Long, Byte>>> sAdvancedWirelessRedstone = new ConcurrentHashMap<>(); - public static Byte getAdvancedRedstone(UUID uuid, int frequency) { + public static Byte getAdvancedRedstone(UUID uuid, int frequency, GT_Cover_AdvancedRedstoneReceiverBase.GateMode mode) { Map<Integer, Map<Long, Byte>> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); if (frequencies == null) return 0; - // TODO: Implement All Modes Map<Long, Byte> signals = frequencies.get(frequency); - if (signals == null) return 0; - - return (byte) (signals.values().stream() - .map(signal -> signal > 0) - .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0); + if (signals == null) signals = new ConcurrentHashMap<>(); + + switch (mode) { + case AND: + return (byte) (signals.values().stream() + .map(signal -> signal > 0) + .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0); + case NAND: + return (byte) (signals.values().stream() + .map(signal -> signal > 0) + .reduce(true, (signalA, signalB) -> signalA && signalB) ? 0 : 15); + case OR: + return (byte) (signals.values().stream() + .map(signal -> signal > 0) + .reduce(false, (signalA, signalB) -> signalA || signalB) ? 15 : 0); + case NOR: + return (byte) (signals.values().stream() + .map(signal -> signal > 0) + .reduce(false, (signalA, signalB) -> signalA || signalB) ? 0 : 15); + default: + return 0; + } } public static void resetAdvancedRedstoneFrequency(UUID uuid, int frequency) { diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java index 37e1a6d960..2be46dfa14 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java @@ -30,6 +30,11 @@ public enum GT_GuiIcon implements IGuiIcon { GREEN_ARROW_DOWN(0, 32 * 5, 32 * 2), CYCLIC(0, 32 * 6, 32 * 2), + AND_GATE(0, 0, 32 * 3), + NAND_GATE(0, 32, 32 * 3), + OR_GATE(0, 32 * 2, 32 * 3), + NOR_GATE(0, 32 * 3, 32 * 3), + SLOT_DARKGRAY(1, 176, 0, 18, 18), SLOT_GRAY(1, 176, 18, 18, 18), diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java index 53a36cadce..8befcbfd52 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java @@ -5,6 +5,7 @@ import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.gui.GT_GUICover; import gregtech.api.gui.widgets.GT_GuiIcon; +import gregtech.api.gui.widgets.GT_GuiIconButton; import gregtech.api.gui.widgets.GT_GuiIconCheckButton; import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; import gregtech.api.interfaces.IGuiScreen; @@ -106,6 +107,13 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< return new GT_Cover_AdvancedRedstoneReceiverBase.GUI(aSide, aCoverID, aCoverVariable, aTileEntity); } + public enum GateMode { + AND, + NAND, + OR, + NOR + } + public static class ReceiverData implements ISerializableObject { private int frequency; @@ -113,14 +121,16 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< * If UUID is set to null, the cover frequency is public, rather than private **/ private UUID uuid; + private GateMode mode; - public ReceiverData(int frequency, UUID uuid) { + public ReceiverData(int frequency, UUID uuid, GateMode mode) { this.frequency = frequency; this.uuid = uuid; + this.mode = mode; } public ReceiverData() { - this(0, null); + this(0, null, GateMode.AND); } public UUID getUuid() { @@ -131,10 +141,14 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< return frequency; } + public GateMode getGateMode() { + return mode; + } + @Nonnull @Override public ISerializableObject copy() { - return new ReceiverData(frequency, uuid); + return new ReceiverData(frequency, uuid, mode); } @Nonnull @@ -145,6 +159,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< if (uuid != null) { tag.setString("uuid", uuid.toString()); } + tag.setByte("mode", (byte) mode.ordinal()); return tag; } @@ -157,6 +172,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< aBuf.writeLong(uuid.getLeastSignificantBits()); aBuf.writeLong(uuid.getMostSignificantBits()); } + aBuf.writeByte(mode.ordinal()); } @Override @@ -166,6 +182,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< if (tag.hasKey("uuid")) { uuid = UUID.fromString(tag.getString("uuid")); } + mode = GateMode.values()[tag.getByte("mode")]; } @Nonnull @@ -175,6 +192,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< if (aBuf.readBoolean()) { uuid = new UUID(aBuf.readLong(), aBuf.readLong()); } + mode = GateMode.values()[aBuf.readByte()]; return this; } @@ -192,6 +210,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< private static final int startY = 25; private static final int spaceX = 18; private static final int spaceY = 18; + private static final int gateModeButtonIdStart = 1; private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png"; @@ -206,6 +225,15 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< frequencyBox = new GT_Cover_AdvancedRedstoneReceiverBase.GUI.GT_GuiShortTextBox(this, 0, startX, startY + 2, spaceX * 5 - 3, 12); privateButton = new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null); + + new GT_GuiIconButton(this, gateModeButtonIdStart + 0, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.AND_GATE) + .setTooltipText(GT_Utility.trans("006", "AND Gate")); + new GT_GuiIconButton(this, gateModeButtonIdStart + 1, startX + spaceX * 1, startY + spaceY * 2, GT_GuiIcon.NAND_GATE) + .setTooltipText(GT_Utility.trans("006", "NAND Gate")); + new GT_GuiIconButton(this, gateModeButtonIdStart + 2, startX + spaceX * 2, startY + spaceY * 2, GT_GuiIcon.OR_GATE) + .setTooltipText(GT_Utility.trans("006", "OR Gate")); + new GT_GuiIconButton(this, gateModeButtonIdStart + 3, startX + spaceX * 3, startY + spaceY * 2, GT_GuiIcon.NOR_GATE) + .setTooltipText(GT_Utility.trans("006", "NOR Gate")); } @Override @@ -218,9 +246,14 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< textColor); this.getFontRenderer().drawString( GT_Utility.trans("601", "Use Private Frequency"), - startX + spaceX, + startX + spaceX * 5, startY + spaceY * 1 + 4, textColor); + this.getFontRenderer().drawString( + GT_Utility.trans("601", "Gate Mode"), + startX + spaceX * 5, + startY + spaceY * 2 + 4, + textColor); } @Override @@ -263,12 +296,23 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase< private void update() { privateButton.setChecked(coverVariable.uuid != null); resetTextBox(frequencyBox); + updateButtons(); + } + + private void updateButtons() { + GuiButton button; + for (int i = gateModeButtonIdStart; i < gateModeButtonIdStart + 4; ++i) { + button = (GuiButton) this.buttonList.get(i); + button.enabled = (button.id - gateModeButtonIdStart) != coverVariable.mode.ordinal(); + } } @Override public void buttonClicked(GuiButton btn) { if (btn == privateButton) { coverVariable.uuid = coverVariable.uuid == null ? Minecraft.getMinecraft().thePlayer.getUniqueID() : null; + } else if (btn.enabled) { + coverVariable.mode = GateMode.values()[btn.id - gateModeButtonIdStart]; } GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java index bedb878295..a8601b15d0 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java @@ -13,7 +13,7 @@ public class GT_Cover_AdvancedRedstoneReceiverExternal extends GT_Cover_Advanced @Override public ReceiverData doCoverThingsImpl(byte aSide, byte aInputRedstone, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { aTileEntity.setOutputRedstoneSignal(aSide, - GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency())); + GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode())); return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java index 7a4d498059..ea766e9e89 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java @@ -29,6 +29,6 @@ public class GT_Cover_AdvancedRedstoneReceiverInternal extends GT_Cover_Advanced @Override protected byte getRedstoneInputImpl(byte aSide, byte aInputRedstone, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { - return GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency()); + return GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()); } } diff --git a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png Binary files differindex ce0652d14a..255bdc2aab 100644 --- a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png +++ b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png |