diff options
Diffstat (limited to 'src/main/java/gregtech/common/covers')
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java | 72 | ||||
-rw-r--r-- | src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java | 7 |
2 files changed, 41 insertions, 38 deletions
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<GT_Cover_LiquidMe return false; } - @Override - protected LiquidMeterData doCoverThingsImpl( - byte aSide, - byte aInputRedstone, - int aCoverID, - LiquidMeterData aCoverVariable, - ICoverable aTileEntity, - long aTimer) { - if ((aTileEntity instanceof IFluidHandler)) { - FluidTankInfo[] tTanks = ((IFluidHandler) aTileEntity).getTankInfo(ForgeDirection.UNKNOWN); - long tMax = 0; - long tUsed = 0; - if (tTanks != null) { - for (FluidTankInfo tTank : tTanks) { - if (tTank != null) { - tMax += tTank.capacity; - FluidStack tLiquid = tTank.fluid; + public static byte computeSignalBasedOnFluid(ICoverable tileEntity, boolean inverted, int threshold) { + if (tileEntity instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(ForgeDirection.UNKNOWN); + long max = 0; + long used = 0; + if (tanks != null) { + for (FluidTankInfo tank : tanks) { + if (tank != null) { + max += tank.capacity; + FluidStack tLiquid = tank.fluid; if (tLiquid != null) { - tUsed += tLiquid.amount; + used += tLiquid.amount; } } } } - long redstoneSignal; - if (tUsed == 0L) { - // nothing - redstoneSignal = 0; - } else if (tUsed >= 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) { |