From 44024669c0f76e7c8e453dd4cbd0f36aee409be9 Mon Sep 17 00:00:00 2001 From: Matej Dipčár <492666@mail.muni.cz> Date: Wed, 21 Sep 2022 15:00:05 +0200 Subject: Move advanced redstone API to Wireless Base --- .../GT_Cover_AdvancedRedstoneReceiverExternal.java | 3 +- .../GT_Cover_AdvancedRedstoneReceiverInternal.java | 4 +- .../GT_Cover_AdvancedRedstoneTransmitterBase.java | 6 +-- ..._Cover_AdvancedRedstoneTransmitterExternal.java | 2 +- ..._Cover_AdvancedRedstoneTransmitterInternal.java | 2 +- .../GT_Cover_AdvancedWirelessRedstoneBase.java | 53 ++++++++++++++++++++++ 6 files changed, 61 insertions(+), 9 deletions(-) (limited to 'src/main/java/gregtech/common') 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 a8601b15d0..3f2db32f7f 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 @@ -1,6 +1,5 @@ package gregtech.common.covers.redstone; -import gregtech.api.GregTech_API; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; @@ -13,7 +12,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(), aCoverVariable.getGateMode())); + getSignalAt(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 ea766e9e89..a8fdf29249 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 @@ -18,7 +18,7 @@ public class GT_Cover_AdvancedRedstoneReceiverInternal extends GT_Cover_Advanced if (getRedstoneInput(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) { machine.enableWorking(); } else { - machine.disableWorking();; + machine.disableWorking(); } machine.setWorkDataValue(aInputRedstone); @@ -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(), aCoverVariable.getGateMode()); + return getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()); } } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java index 0d95263fa3..8e4829463f 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java @@ -38,7 +38,7 @@ public abstract class GT_Cover_AdvancedRedstoneTransmitterBase extends GT_Cover_ private static void unregisterSignal(byte aSide, TransmitterData aCoverVariable, ICoverable aTileEntity) { long hash = GregTech_API.hashCoverCoords(aTileEntity, aSide); - GregTech_API.removeAdvancedRedstone(aCoverVariable.uuid, aCoverVariable.frequency, hash); + removeSignalAt(aCoverVariable.uuid, aCoverVariable.frequency, hash); } @Override @@ -114,8 +114,8 @@ public abstract class GT_Cover_AdvancedRedstoneTransmitterBase extends GT_Cover_ invert = aBuf.readBoolean(); if (oldFrequency != frequency || !Objects.equals(oldUuid, uuid) || oldInvert != invert) { - GregTech_API.resetAdvancedRedstoneFrequency(uuid, frequency); - GregTech_API.resetAdvancedRedstoneFrequency(oldUuid, oldFrequency); + resetSignalAt(uuid, frequency); + resetSignalAt(oldUuid, oldFrequency); } return this; diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java index d33ed2d47a..84019efd61 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java @@ -20,7 +20,7 @@ public class GT_Cover_AdvancedRedstoneTransmitterExternal extends GT_Cover_Advan } long hash = GregTech_API.hashCoverCoords(aTileEntity, aSide); - GregTech_API.setAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java index 93f769c567..1e50891d37 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java @@ -20,7 +20,7 @@ public class GT_Cover_AdvancedRedstoneTransmitterInternal extends GT_Cover_Advan } long hash = GregTech_API.hashCoverCoords(aTileEntity, aSide); - GregTech_API.setAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java index 08fa5356c2..4267d4104d 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java @@ -1,6 +1,7 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.gui.GT_GUICover; import gregtech.api.gui.widgets.GT_GuiIcon; @@ -23,7 +24,9 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.Fluid; import javax.annotation.Nonnull; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; public abstract class GT_Cover_AdvancedWirelessRedstoneBase extends GT_CoverBehaviorBase { @@ -31,6 +34,56 @@ public abstract class GT_Cover_AdvancedWirelessRedstoneBase> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return 0; + + Map signals = frequencies.get(frequency); + 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 resetSignalAt(UUID uuid, int frequency) { + Map> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return; + frequencies.computeIfPresent(frequency, (k, longByteMap) -> new ConcurrentHashMap<>()); + } + + public static void removeSignalAt(UUID uuid, int frequency, long hash) { + Map> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return; + frequencies.computeIfPresent(frequency, (freq, longByteMap) -> { + longByteMap.remove(hash); + return longByteMap.isEmpty() ? null : longByteMap; + }); + } + + public static void setSignalAt(UUID uuid, int frequency, long hash, byte value) { + Map> frequencies = GregTech_API.sAdvancedWirelessRedstone.computeIfAbsent(String.valueOf(uuid), k -> new ConcurrentHashMap<>()); + Map signals = frequencies.computeIfAbsent(frequency, k -> new ConcurrentHashMap<>()); + signals.put(hash, value); + } + @Override public boolean letsEnergyInImpl(byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { return true; -- cgit