From 33a08e2ad9ca8bc42d13130f30f273268048fee0 Mon Sep 17 00:00:00 2001 From: Harry Date: Fri, 8 Sep 2023 16:53:48 +0800 Subject: 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> --- .../GT_MetaTileEntity_MultiBlockBase.java | 116 +++++++++++++++++++-- 1 file changed, 105 insertions(+), 11 deletions(-) (limited to 'src/main/java/gregtech') 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 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 -> { -- cgit