From 1f37e091b74e64eb4ff989f60de5924b8d4cb922 Mon Sep 17 00:00:00 2001 From: Matej Dipčár <492666@mail.muni.cz> Date: Wed, 21 Sep 2022 21:23:33 +0200 Subject: Implement logic in Wireless Fluid Detector --- src/main/java/gregtech/api/util/GT_Utility.java | 6 ++ .../common/covers/GT_Cover_LiquidMeter.java | 72 ++++++++++------------ .../redstone/GT_Cover_WirelessFluidDetector.java | 7 +++ 3 files changed, 47 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index 5898e5fd14..706694d6dd 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -4254,6 +4254,12 @@ public class GT_Utility { return Textures.BlockIcons.ERROR_TEXTURE_INDEX; } + public static byte convertRatioToRedstone(long value, long max) { + if (value <= 0) return 0; // Empty + if (value >= max) return 15; // Full + return (byte) (1 + (14 * value) / max); // Range 1-14 + } + @AutoValue public abstract static class ItemId { /** This method copies NBT, as it is mutable. */ diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java index ce795bdd09..7816e3dd48 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java @@ -53,58 +53,54 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase= tMax) { - // full - redstoneSignal = 15; - } else { - // 1-14 range - redstoneSignal = 1 + (14 * tUsed) / tMax; - } + byte signal = GT_Utility.convertRatioToRedstone(used, max); - if (aCoverVariable.inverted) { - redstoneSignal = 15 - redstoneSignal; + if (inverted) { + signal = (byte) (15 - signal); } - if (aCoverVariable.threshold > 0) { - if (aCoverVariable.inverted && tUsed >= aCoverVariable.threshold) { - redstoneSignal = 0; - } else if (!aCoverVariable.inverted && tUsed < aCoverVariable.threshold) { - redstoneSignal = 0; + if (threshold > 0) { + if (inverted && used >= threshold) { + return 0; + } else if (!inverted && used < threshold) { + return 0; } } - aTileEntity.setOutputRedstoneSignal(aSide, (byte) redstoneSignal); + return signal; } else { - aTileEntity.setOutputRedstoneSignal(aSide, (byte) 0); + return 0; } + } + + @Override + protected LiquidMeterData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + LiquidMeterData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + byte signal = computeSignalBasedOnFluid(aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold); + aTileEntity.setOutputRedstoneSignal(aSide, signal); + return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java index f7b7444577..163136cb45 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java @@ -1,11 +1,13 @@ package gregtech.common.covers.redstone; import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.GT_Cover_LiquidMeter; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -35,6 +37,10 @@ public class GT_Cover_WirelessFluidDetector extends GT_Cover_AdvancedRedstoneTra @Override public FluidTransmitterData doCoverThingsImpl(byte aSide, byte aInputRedstone, int aCoverID, FluidTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte signal = GT_Cover_LiquidMeter.computeSignalBasedOnFluid(aTileEntity, aCoverVariable.invert, aCoverVariable.threshold); + long hash = GregTech_API.hashCoverCoords(aTileEntity, aSide); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + return aCoverVariable; } @@ -51,6 +57,7 @@ public class GT_Cover_WirelessFluidDetector extends GT_Cover_AdvancedRedstoneTra } public static class FluidTransmitterData extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData { + /** The special value {@code 0} means threshold check is disabled. */ private int threshold; public FluidTransmitterData(int frequency, UUID uuid, boolean invert, int threshold) { -- cgit