diff options
Diffstat (limited to 'src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java')
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java | 72 |
1 files changed, 34 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; } |