diff options
author | Harry <harryyunull@gmail.com> | 2023-09-08 16:53:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-08 10:53:48 +0200 |
commit | 33a08e2ad9ca8bc42d13130f30f273268048fee0 (patch) | |
tree | f10a4a181719d7c026c4220cecd48f7f1df85210 /src | |
parent | ece08c3b040b580e7eb6b19972580570d7842fd9 (diff) | |
download | GT5-Unofficial-33a08e2ad9ca8bc42d13130f30f273268048fee0.tar.gz GT5-Unofficial-33a08e2ad9ca8bc42d13130f30f273268048fee0.tar.bz2 GT5-Unofficial-33a08e2ad9ca8bc42d13130f30f273268048fee0.zip |
Display current recipe in GUI (#2252)
* Display current recipe
* 2 decimals
* fixes
* formatNumbers
* Fix formatting
* update modularui
---------
Co-authored-by: GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java | 116 |
1 files changed, 105 insertions, 11 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java index 254f9df469..a729342430 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java @@ -2,11 +2,13 @@ package gregtech.api.metatileentity.implementations; import static gregtech.api.enums.GT_Values.V; import static gregtech.api.enums.GT_Values.VN; +import static gregtech.api.util.GT_Utility.formatNumbers; import static mcp.mobius.waila.api.SpecialChars.GREEN; import static mcp.mobius.waila.api.SpecialChars.RED; import static mcp.mobius.waila.api.SpecialChars.RESET; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -36,6 +38,7 @@ import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; @@ -1604,30 +1607,30 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity return new String[] { /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) + + formatNumbers(mProgresstime / 20) + EnumChatFormatting.RESET + " s / " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) + + formatNumbers(mMaxProgresstime / 20) + EnumChatFormatting.RESET + " s", /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) + + formatNumbers(storedEnergy) + EnumChatFormatting.RESET + " EU / " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) + + formatNumbers(maxEnergy) + EnumChatFormatting.RESET + " EU", /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) + + formatNumbers(getActualEnergyUsage()) + EnumChatFormatting.RESET + " EU/t", /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) + + formatNumbers(getMaxInputVoltage()) + EnumChatFormatting.RESET + " EU/t(*2A) " + StatCollector.translateToLocal("GT5U.machines.tier") @@ -1734,14 +1737,14 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.use_with_amperage", - GT_Utility.formatNumbers(actualEnergyUsage), + formatNumbers(actualEnergyUsage), GT_Utility.getAmperageForTier(actualEnergyUsage, (byte) energyTier), GT_Utility.getColoredTierNameFromTier((byte) energyTier))); } else if (actualEnergyUsage < 0) { currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.produce_with_amperage", - GT_Utility.formatNumbers(-actualEnergyUsage), + formatNumbers(-actualEnergyUsage), GT_Utility.getAmperageForTier(-actualEnergyUsage, (byte) energyTier), GT_Utility.getColoredTierNameFromTier((byte) energyTier))); } @@ -1750,13 +1753,13 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.use", - GT_Utility.formatNumbers(actualEnergyUsage), + formatNumbers(actualEnergyUsage), GT_Utility.getColoredTierNameFromVoltage(actualEnergyUsage))); } else if (actualEnergyUsage < 0) { currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.produce", - GT_Utility.formatNumbers(-actualEnergyUsage), + formatNumbers(-actualEnergyUsage), GT_Utility.getColoredTierNameFromVoltage(-actualEnergyUsage))); } } @@ -1766,7 +1769,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity // Show ns on the tooltip if (GT_Mod.gregtechproxy.wailaAverageNS) { int tAverageTime = tag.getInteger("averageNS"); - currentTip.add("Average CPU load of ~" + GT_Utility.formatNumbers(tAverageTime) + " ns"); + currentTip.add("Average CPU load of ~" + formatNumbers(tAverageTime) + " ns"); } super.getWailaBody(itemStack, currentTip, accessor, config); } @@ -2137,6 +2140,74 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity return true; } + protected String generateCurrentRecipeInfoString() { + StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "In progress: ") + .append(String.format("%,.2f", (double) mProgresstime / 20)) + .append("s / ") + .append(String.format("%,.2f", (double) mMaxProgresstime / 20)) + .append("s (") + .append(formatNumbers((Math.round((double) mProgresstime / mMaxProgresstime * 1000) / 10.0))) + .append("%)\n"); + + Function<Integer, Void> appendRate = (Integer amount) -> { + double processPerTick = (double) amount / mMaxProgresstime * 20; + if (processPerTick > 1) { + ret.append(" (") + .append(formatNumbers(Math.round(processPerTick * 10) / 10.0)) + .append("/s)"); + } else { + ret.append(" (") + .append(formatNumbers(Math.round(1 / processPerTick * 10) / 10.0)) + .append("s/ea)"); + } + return null; + }; + + int lines = 0; + int MAX_LINES = 5; + + if (mOutputItems != null) { + for (var item : mOutputItems) { + if (item == null) continue; + if (lines >= MAX_LINES) { + ret.append("..."); + return ret.toString(); + } + lines++; + ret.append(EnumChatFormatting.AQUA) + .append(item.getDisplayName()) + .append(EnumChatFormatting.WHITE) + .append(" x ") + .append(EnumChatFormatting.GOLD) + .append(formatNumbers(item.stackSize)) + .append(EnumChatFormatting.WHITE); + appendRate.apply(item.stackSize); + ret.append('\n'); + } + } + if (mOutputFluids != null) { + for (var fluid : mOutputFluids) { + if (fluid == null) continue; + if (lines >= MAX_LINES) { + ret.append("..."); + return ret.toString(); + } + lines++; + ret.append(EnumChatFormatting.AQUA) + .append(fluid.getLocalizedName()) + .append(EnumChatFormatting.WHITE) + .append(" x ") + .append(EnumChatFormatting.GOLD) + .append(formatNumbers(fluid.amount)) + .append("L") + .append(EnumChatFormatting.WHITE); + appendRate.apply(fluid.amount); + ret.append('\n'); + } + } + return ret.toString(); + } + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { screenElements.setSynced(false) .setSpace(0) @@ -2218,6 +2289,29 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity && shouldDisplayCheckRecipeResult())) .widget(new CheckRecipeResultSyncer(() -> checkRecipeResult, (result) -> checkRecipeResult = result)); + // Display current recipe + screenElements.widget( + TextWidget.dynamicString(this::generateCurrentRecipeInfoString) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> (mOutputFluids != null && mOutputFluids.length > 0) + || (mOutputItems != null && mOutputItems.length > 0))) + .widget( + new FakeSyncWidget.ListSyncer<>( + () -> mOutputFluids != null ? Arrays.asList(mOutputFluids) : Collections.emptyList(), + val -> mOutputFluids = val.toArray(new FluidStack[0]), + NetworkUtils::writeFluidStack, + NetworkUtils::readFluidStack)) + .widget( + new FakeSyncWidget.ListSyncer<>( + () -> mOutputItems != null ? Arrays.asList(mOutputItems) : Collections.emptyList(), + val -> mOutputItems = val.toArray(new ItemStack[0]), + NetworkUtils::writeItemStack, + NetworkUtils::readItemStack)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mProgresstime, val -> mProgresstime = val)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mMaxProgresstime, val -> mMaxProgresstime = val)); + screenElements.widget( new TextWidget(GT_Utility.trans("144", "Missing Turbine Rotor")).setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> { |