aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/covers
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/covers')
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java72
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java7
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) {