From 5a3ce692c6da21cb45c12db9076cf344ad4b4f6e Mon Sep 17 00:00:00 2001 From: Matej Dipčár <492666@mail.muni.cz> Date: Wed, 21 Sep 2022 02:58:15 +0200 Subject: Implement all advanced receiver modes --- src/main/java/gregtech/api/GregTech_API.java | 31 +++++++++++++++++----- .../java/gregtech/api/gui/widgets/GT_GuiIcon.java | 5 ++++ 2 files changed, 29 insertions(+), 7 deletions(-) (limited to 'src/main/java/gregtech/api') 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>> 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> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); if (frequencies == null) return 0; - // TODO: Implement All Modes Map 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), -- cgit