From 47a7da38816841810f1036275e9810783f3006a1 Mon Sep 17 00:00:00 2001 From: Serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:14:04 -0600 Subject: [PATCH] Separate PSS average IO into in and out (#2353) --- .../MetaTileEntityPowerSubstation.java | 85 +++++++++++-------- .../specific/DriverPowerSubstation.java | 11 ++- .../resources/assets/gregtech/lang/en_us.lang | 6 +- 3 files changed, 60 insertions(+), 42 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java index c6ee87449d2..7814f3dccc9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java @@ -81,8 +81,10 @@ public class MetaTileEntityPowerSubstation extends MultiblockWithDisplayBase private boolean isActive, isWorkingEnabled = true; // Stats tracked for UI display - private long netIOLastSec; - private long averageIOLastSec; + private long netInLastSec; + private long averageInLastSec; + private long netOutLastSec; + private long averageOutLastSec; public MetaTileEntityPowerSubstation(ResourceLocation metaTileEntityId) { super(metaTileEntityId); @@ -138,8 +140,10 @@ public void invalidateStructure() { inputHatches = null; outputHatches = null; passiveDrain = 0; - netIOLastSec = 0; - averageIOLastSec = 0; + netInLastSec = 0; + averageInLastSec = 0; + netOutLastSec = 0; + averageOutLastSec = 0; super.invalidateStructure(); } @@ -149,25 +153,27 @@ protected void updateFormedValid() { if (getOffsetTimer() % 20 == 0) { // active here is just used for rendering setActive(energyBank.hasEnergy()); - averageIOLastSec = netIOLastSec / 20; - netIOLastSec = 0; + averageInLastSec = netInLastSec / 20; + averageOutLastSec = netOutLastSec / 20; + netInLastSec = 0; + netOutLastSec = 0; } if (isWorkingEnabled()) { // Bank from Energy Input Hatches long energyBanked = energyBank.fill(inputHatches.getEnergyStored()); inputHatches.changeEnergy(-energyBanked); - netIOLastSec += energyBanked; + netInLastSec += energyBanked; // Passive drain long energyPassiveDrained = energyBank.drain(getPassiveDrain()); - netIOLastSec -= energyPassiveDrained; + netOutLastSec += energyPassiveDrained; // Debank to Dynamo Hatches long energyDebanked = energyBank .drain(outputHatches.getEnergyCapacity() - outputHatches.getEnergyStored()); outputHatches.changeEnergy(energyDebanked); - netIOLastSec -= energyDebanked; + netOutLastSec += energyDebanked; } } } @@ -359,44 +365,45 @@ protected void addDisplayText(List textList) { "gregtech.multiblock.power_substation.passive_drain", passiveDrain)); - // Average I/O line - TextFormatting averageIOColor = TextFormatting.GRAY; - if (isActive() && isWorkingEnabled() && averageIOLastSec == 0) { - // only set to yellow on zero if the machine is on, avoids a yellow "warning" - // color when the machine is first formed and not yet plugged in. - averageIOColor = TextFormatting.YELLOW; - } else if (averageIOLastSec > 0) { - averageIOColor = TextFormatting.GREEN; - } else if (averageIOLastSec < 0) { - averageIOColor = TextFormatting.RED; - } - - ITextComponent averageIO = TextComponentUtil.stringWithColor( - averageIOColor, - TextFormattingUtil.formatNumbers(averageIOLastSec) + " EU/t"); - + // Average EU IN line + ITextComponent avgValue = TextComponentUtil.stringWithColor( + TextFormatting.GREEN, + TextFormattingUtil.formatNumbers(averageInLastSec) + " EU/t"); ITextComponent base = TextComponentUtil.translationWithColor( TextFormatting.GRAY, - "gregtech.multiblock.power_substation.average_io", - averageIO); - + "gregtech.multiblock.power_substation.average_in", + avgValue); ITextComponent hover = TextComponentUtil.translationWithColor( TextFormatting.GRAY, - "gregtech.multiblock.power_substation.average_io_hover"); + "gregtech.multiblock.power_substation.average_in_hover"); + tl.add(TextComponentUtil.setHover(base, hover)); + + // Average EU OUT line + avgValue = TextComponentUtil.stringWithColor( + TextFormatting.RED, + TextFormattingUtil.formatNumbers(averageOutLastSec) + " EU/t"); + base = TextComponentUtil.translationWithColor( + TextFormatting.GRAY, + "gregtech.multiblock.power_substation.average_out", + avgValue); + hover = TextComponentUtil.translationWithColor( + TextFormatting.GRAY, + "gregtech.multiblock.power_substation.average_out_hover"); tl.add(TextComponentUtil.setHover(base, hover)); // Time to fill/drain line - if (averageIOLastSec > 0) { + if (averageInLastSec > averageOutLastSec) { ITextComponent timeToFill = getTimeToFillDrainText(energyCapacity.subtract(energyStored) - .divide(BigInteger.valueOf(averageIOLastSec * 20))); + .divide(BigInteger.valueOf((averageInLastSec - averageOutLastSec) * 20))); TextComponentUtil.setColor(timeToFill, TextFormatting.GREEN); tl.add(TextComponentUtil.translationWithColor( TextFormatting.GRAY, "gregtech.multiblock.power_substation.time_to_fill", timeToFill)); - } else if (averageIOLastSec < 0) { + } else if (averageInLastSec < averageOutLastSec) { ITextComponent timeToDrain = getTimeToFillDrainText( - energyStored.divide(BigInteger.valueOf(Math.abs(averageIOLastSec) * 20))); + energyStored.divide(BigInteger.valueOf( + (averageOutLastSec - averageInLastSec) * 20))); TextComponentUtil.setColor(timeToDrain, TextFormatting.RED); tl.add(TextComponentUtil.translationWithColor( TextFormatting.GRAY, @@ -412,9 +419,9 @@ protected void addDisplayText(List textList) { protected void addWarningText(List textList) { super.addWarningText(textList); if (isStructureFormed()) { - if (averageIOLastSec < 0) { // decreasing + if (averageInLastSec < averageOutLastSec) { // decreasing BigInteger timeToDrainSeconds = energyBank.getStored() - .divide(BigInteger.valueOf(Math.abs(averageIOLastSec) * 20)); + .divide(BigInteger.valueOf((averageOutLastSec - averageInLastSec) * 20)); if (timeToDrainSeconds.compareTo(BigInteger.valueOf(60 * 60)) < 0) { // less than 1 hour left textList.add(TextComponentUtil.translationWithColor( TextFormatting.YELLOW, @@ -550,8 +557,12 @@ public String getCapacity() { return TextFormattingUtil.formatNumbers(energyBank.getCapacity()); } - public long getAverageIOLastSec() { - return averageIOLastSec; + public long getAverageInLastSec() { + return averageInLastSec; + } + + public long getAverageOutLastSec() { + return averageOutLastSec; } @Override diff --git a/src/main/java/gregtech/integration/opencomputers/drivers/specific/DriverPowerSubstation.java b/src/main/java/gregtech/integration/opencomputers/drivers/specific/DriverPowerSubstation.java index 509de932b1b..53a506db55b 100644 --- a/src/main/java/gregtech/integration/opencomputers/drivers/specific/DriverPowerSubstation.java +++ b/src/main/java/gregtech/integration/opencomputers/drivers/specific/DriverPowerSubstation.java @@ -63,9 +63,14 @@ public Object[] getPassiveDrain(final Context context, final Arguments args) { return new Object[] { tileEntity.getPassiveDrain() }; } - @Callback(doc = "function():number -- Returns the average net EU/t in or out over the last second.") - public Object[] getAverageIOLastSec(final Context context, final Arguments args) { - return new Object[] { tileEntity.getAverageIOLastSec() }; + @Callback(doc = "function():number -- Returns the average EU/t in over the last second.") + public Object[] getAverageInLastSec(final Context context, final Arguments args) { + return new Object[] { tileEntity.getAverageInLastSec() }; + } + + @Callback(doc = "function():number -- Returns the average EU/t out over the last second.") + public Object[] getAverageOutLastSec(final Context context, final Arguments args) { + return new Object[] { tileEntity.getAverageOutLastSec() }; } } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 0a99c369d6a..b102b23fcff 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -5649,8 +5649,10 @@ gregtech.multiblock.computation.not_enough_computation=Machine needs more comput gregtech.multiblock.power_substation.stored=Stored: %s gregtech.multiblock.power_substation.capacity=Capacity: %s gregtech.multiblock.power_substation.passive_drain=Passive Drain: %s -gregtech.multiblock.power_substation.average_io=Avg. I/O: %s -gregtech.multiblock.power_substation.average_io_hover=The average change in energy of the Power Substation's internal energy bank +gregtech.multiblock.power_substation.average_in=Avg. EU IN: %s +gregtech.multiblock.power_substation.average_out=Avg. EU OUT: %s +gregtech.multiblock.power_substation.average_in_hover=The average EU/t input into the Power Substation's internal energy bank +gregtech.multiblock.power_substation.average_out_hover=The average EU/t output from the Power Substation's internal energy bank, both passive loss and outputs gregtech.multiblock.power_substation.time_to_fill=Time to fill: %s gregtech.multiblock.power_substation.time_to_drain=Time to drain: %s gregtech.multiblock.power_substation.time_seconds=%s Seconds