From e6c8d35894d561e6aea1cfb7450f00a70c9e01d8 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:46:59 +0200 Subject: Multi ToolTip unification (#3343) Co-authored-by: chochem <40274384+chochem@users.noreply.github.com> Co-authored-by: GDCloud Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/enums/GTValues.java | 2 +- src/main/java/gregtech/api/util/GTUtility.java | 9 +- .../api/util/MultiblockTooltipBuilder.java | 157 ++++++++++++++++++--- src/main/java/gregtech/api/util/StringUtils.java | 13 ++ src/main/java/gregtech/common/GTProxy.java | 5 + src/main/java/gregtech/common/config/Client.java | 4 + .../common/items/behaviors/BehaviourCoverTool.java | 9 +- .../behaviors/BehaviourSprayColorInfinite.java | 10 +- .../machines/multi/MTEAssemblyLine.java | 4 +- .../machines/multi/MTEBrickedBlastFurnace.java | 4 +- .../machines/multi/MTECharcoalPit.java | 4 +- .../tileentities/machines/multi/MTECleanroom.java | 4 +- .../machines/multi/MTEConcreteBackfillerBase.java | 4 +- .../machines/multi/MTEDieselEngine.java | 4 +- .../machines/multi/MTEDistillationTower.java | 4 +- .../machines/multi/MTEElectricBlastFurnace.java | 4 +- .../machines/multi/MTEExtremeDieselEngine.java | 4 +- .../machines/multi/MTEFusionComputer.java | 4 +- .../machines/multi/MTEFusionComputer1.java | 4 +- .../machines/multi/MTEFusionComputer2.java | 4 +- .../machines/multi/MTEFusionComputer3.java | 4 +- .../machines/multi/MTEHeatExchanger.java | 4 +- .../machines/multi/MTEImplosionCompressor.java | 4 +- .../machines/multi/MTEIndustrialBrewery.java | 5 +- .../MTEIndustrialElectromagneticSeparator.java | 13 +- .../machines/multi/MTEIndustrialExtractor.java | 5 +- .../machines/multi/MTEIndustrialLaserEngraver.java | 5 +- .../machines/multi/MTEIntegratedOreFactory.java | 4 +- .../machines/multi/MTELargeBoiler.java | 6 +- .../machines/multi/MTELargeChemicalReactor.java | 4 +- .../machines/multi/MTELargeFluidExtractor.java | 4 +- .../machines/multi/MTELargeTurbineGas.java | 4 +- .../machines/multi/MTELargeTurbineGasAdvanced.java | 7 +- .../machines/multi/MTELargeTurbineHPSteam.java | 4 +- .../machines/multi/MTELargeTurbinePlasma.java | 4 +- .../machines/multi/MTELargeTurbineSteam.java | 4 +- .../machines/multi/MTEMultiAutoclave.java | 11 +- .../machines/multi/MTEMultiCanner.java | 5 +- .../machines/multi/MTEMultiFurnace.java | 4 +- .../tileentities/machines/multi/MTEMultiLathe.java | 11 +- .../machines/multi/MTEMultiSolidifier.java | 23 +-- .../tileentities/machines/multi/MTENanoForge.java | 18 +-- .../tileentities/machines/multi/MTEOilCracker.java | 4 +- .../machines/multi/MTEOilDrillBase.java | 4 +- .../machines/multi/MTEOilDrillInfinite.java | 4 +- .../machines/multi/MTEOreDrillingPlantBase.java | 4 +- .../tileentities/machines/multi/MTEPCBFactory.java | 5 +- .../machines/multi/MTEPlasmaForge.java | 18 +-- .../machines/multi/MTEProcessingArray.java | 3 +- .../machines/multi/MTEPyrolyseOven.java | 4 +- .../machines/multi/MTETranscendentPlasmaMixer.java | 4 +- .../machines/multi/MTEVacuumFreezer.java | 4 +- .../machines/multi/MTEWormholeGenerator.java | 17 +-- .../multi/compressor/MTEBlackHoleCompressor.java | 11 +- .../multi/compressor/MTEHIPCompressor.java | 5 +- .../multi/compressor/MTEIndustrialCompressor.java | 6 +- .../multi/compressor/MTENeutroniumCompressor.java | 5 +- .../machines/multi/drone/MTEDroneCentre.java | 6 +- .../multi/purification/MTEPurificationPlant.java | 4 +- .../MTEPurificationUnitBaryonicPerfection.java | 4 +- .../purification/MTEPurificationUnitClarifier.java | 6 +- .../purification/MTEPurificationUnitDegasser.java | 4 +- .../MTEPurificationUnitFlocculation.java | 5 +- .../purification/MTEPurificationUnitOzonation.java | 4 +- .../MTEPurificationUnitPhAdjustment.java | 5 +- .../MTEPurificationUnitPlasmaHeater.java | 5 +- .../MTEPurificationUnitUVTreatment.java | 5 +- .../machines/multiblock/AdvChemicalProcessor.java | 5 +- .../machines/multiblock/DistillationTower.java | 5 +- .../machines/multiblock/LaserEngraver.java | 1 - .../machines/multiblock/LayeredCokeBattery.java | 4 +- .../machines/multiblock/Macerator.java | 4 +- .../java/gregtech/loaders/preload/GTPreLoad.java | 1 + .../loaders/preload/LoaderMetaTileEntities.java | 2 +- 74 files changed, 264 insertions(+), 314 deletions(-) create mode 100644 src/main/java/gregtech/api/util/StringUtils.java (limited to 'src/main/java/gregtech') diff --git a/src/main/java/gregtech/api/enums/GTValues.java b/src/main/java/gregtech/api/enums/GTValues.java index 388e2aec76..c91800933f 100644 --- a/src/main/java/gregtech/api/enums/GTValues.java +++ b/src/main/java/gregtech/api/enums/GTValues.java @@ -650,7 +650,7 @@ public class GTValues { + EnumChatFormatting.WHITE + EnumChatFormatting.ITALIC + "Number"; - public static final String Ollie = "" + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + "Ollie"; + public static final String Ollie = EnumChatFormatting.GREEN.toString() + EnumChatFormatting.BOLD + "Ollie"; public static final String authorBaps = "Author: " + EnumChatFormatting.GOLD + "Ba" + EnumChatFormatting.LIGHT_PURPLE diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java index bb31b86ef0..1d75772803 100644 --- a/src/main/java/gregtech/api/util/GTUtility.java +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -3306,7 +3306,10 @@ public class GTUtility { private static void addBaseInfo(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, ArrayList tList, TileEntity tTileEntity, Block tBlock) { tList.add( - "----- X: " + EnumChatFormatting.AQUA + EnumChatFormatting.STRIKETHROUGH + "-----" + + EnumChatFormatting.RESET + + " X: " + + EnumChatFormatting.AQUA + formatNumbers(aX) + EnumChatFormatting.RESET + " Y: " @@ -3321,7 +3324,9 @@ public class GTUtility { + EnumChatFormatting.AQUA + aWorld.provider.dimensionId + EnumChatFormatting.RESET - + " -----"); + + " " + + EnumChatFormatting.STRIKETHROUGH + + "-----"); try { tList.add( GTUtility.trans("162", "Name: ") + EnumChatFormatting.BLUE diff --git a/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java b/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java index dd142fdf9f..5b858a426a 100644 --- a/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java +++ b/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.stream.IntStream; import java.util.stream.Stream; +import javax.annotation.Nullable; + import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; @@ -15,6 +17,8 @@ import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; import com.gtnewhorizon.structurelib.StructureLibAPI; +import gregtech.GTMod; + /** * This makes it easier to build multi tooltips, with a standardized format.
* Info section order should be:
@@ -42,17 +46,6 @@ public class MultiblockTooltipBuilder { private static final String TAB = " "; private static final String COLON = ": "; private static final String SEPARATOR = ", "; - - private final List iLines; - private final List sLines; - private final List hLines; - private final SetMultimap hBlocks; - - private String[] iArray; - private String[] sArray; - private String[] hArray; - - // Localized tooltips private static final String TT_machineType = StatCollector.translateToLocal("GT5U.MBTT.MachineType"); private static final String TT_dimensions = StatCollector.translateToLocal("GT5U.MBTT.Dimensions"); private static final String TT_hollow = StatCollector.translateToLocal("GT5U.MBTT.Hollow"); @@ -73,12 +66,24 @@ public class MultiblockTooltipBuilder { private static final String TT_hold = StatCollector.translateToLocal("GT5U.MBTT.Hold"); private static final String TT_todisplay = StatCollector.translateToLocal("GT5U.MBTT.Display"); private static final String TT_structurehint = StatCollector.translateToLocal("GT5U.MBTT.StructureHint"); - private static final String TT_mod = StatCollector.translateToLocal("GT5U.MBTT.Mod"); + private static final String TT_addedBy = StatCollector.translateToLocal("GT5U.MBTT.Mod"); private static final String TT_air = StatCollector.translateToLocal("GT5U.MBTT.Air"); + private static final String TT_StructureComplex = StatCollector.translateToLocal("GT5U.MBTT.Structure.Complex"); + private static final String TT_SeeStructure1 = StatCollector.translateToLocal("GT5U.MBTT.Structure.SeeStructure1"); + private static final String TT_SeeStructure2 = StatCollector.translateToLocal("GT5U.MBTT.Structure.SeeStructure2"); private static final String[] TT_dots = IntStream.range(0, 16) .mapToObj(i -> StatCollector.translateToLocal("structurelib.blockhint." + i + ".name")) .toArray(String[]::new); + private List iLines; + private List sLines; + private List hLines; + private SetMultimap hBlocks; + + private String[] iArray; + private String[] sArray; + private String[] hArray; + public MultiblockTooltipBuilder() { iLines = new LinkedList<>(); sLines = new LinkedList<>(); @@ -117,20 +122,38 @@ public class MultiblockTooltipBuilder { * @param infoStrings The lines to be added. * @return Instance this method was called on. */ - public MultiblockTooltipBuilder addInfoAll(String... infoStrings) { iLines.addAll(Arrays.asList(infoStrings)); return this; } /** - * Add a separator line like this:
- * ----------------------------------------- + * Add a separator line * * @return Instance this method was called on. */ public MultiblockTooltipBuilder addSeparator() { - iLines.add("-----------------------------------------"); + switch (GTMod.gregtechproxy.separatorStyle) { + case 0 -> iLines.add(" "); + case 1 -> iLines.add(EnumChatFormatting.GRAY + StringUtils.getRepetitionOf('-', 41)); + default -> iLines.add( + EnumChatFormatting.GRAY.toString() + EnumChatFormatting.STRIKETHROUGH + + StringUtils.getRepetitionOf('-', 41)); + } + return this; + } + + /** + * Add a colored separator line with specified length + * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addLineSeparator(EnumChatFormatting color, int length) { + if (GTMod.gregtechproxy.separatorStyle == 1) { + iLines.add(color + StringUtils.getRepetitionOf('-', length)); + } else { + iLines.add(color.toString() + EnumChatFormatting.STRIKETHROUGH + StringUtils.getRepetitionOf('-', length)); + } return this; } @@ -142,6 +165,7 @@ public class MultiblockTooltipBuilder { * @return Instance this method was called on. */ public MultiblockTooltipBuilder addPollutionAmount(int pollution) { + if (pollution == 0) return this; iLines.add( TT_causes + COLON + EnumChatFormatting.DARK_PURPLE + pollution + " " + EnumChatFormatting.GRAY + TT_pps); return this; @@ -652,6 +676,36 @@ public class MultiblockTooltipBuilder { return this; } + /** + * Add a colored separator line with specified length to structure info.
+ * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addStructureInfoLineSeparator(EnumChatFormatting color, int length) { + if (GTMod.gregtechproxy.separatorStyle == 1) { + sLines.add(color + StringUtils.getRepetitionOf('-', length)); + } else { + sLines.add(color.toString() + EnumChatFormatting.STRIKETHROUGH + StringUtils.getRepetitionOf('-', length)); + } + return this; + } + + /** + * Add a separator line to structure info.
+ * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addStructureInfoSeparator() { + switch (GTMod.gregtechproxy.separatorStyle) { + case 0 -> sLines.add(" "); + case 1 -> sLines.add(EnumChatFormatting.GRAY + StringUtils.getRepetitionOf('-', 30)); + default -> sLines.add( + EnumChatFormatting.GRAY.toString() + EnumChatFormatting.STRIKETHROUGH + + StringUtils.getRepetitionOf('-', 30)); + } + return this; + } + /** * Use this method to add non-standard structural info.
* (indent)info @@ -691,12 +745,36 @@ public class MultiblockTooltipBuilder { /** * Call at the very end.
- * Adds a final line with the mod name and information on how to display the structure guidelines.
+ * Adds a line jump.
+ * Adds information on how to display the structure guidelines.
+ * Adds credit for creators of this multi, if any.
+ *

* Ends the building process. * - * @param mod Name of the mod that adds this multiblock machine + * @param authors Formatted names of the creators of this multiblock machine - if any */ - public MultiblockTooltipBuilder toolTipFinisher(String mod) { + public MultiblockTooltipBuilder toolTipFinisher(@Nullable String... authors) { + iLines.add(" "); + return toolTipFinisher0(authors); + } + + /** + * Call at the very end.
+ * Adds a line jump with configurable color and length.
+ * Adds information on how to display the structure guidelines.
+ * Adds credit for creators of this multi, if any.
+ *

+ * Ends the building process. + * + * @param authors Formatted names of the creators of this multiblock machine - if any + */ + public MultiblockTooltipBuilder toolTipFinisher(EnumChatFormatting separatorColor, int separatorLength, + @Nullable String... authors) { + this.addLineSeparator(separatorColor, separatorLength); + return toolTipFinisher0(authors); + } + + private MultiblockTooltipBuilder toolTipFinisher0(@Nullable String... authors) { iLines.add( TT_hold + " " + EnumChatFormatting.BOLD @@ -705,8 +783,42 @@ public class MultiblockTooltipBuilder { + EnumChatFormatting.GRAY + " " + TT_todisplay); - iLines.add(TT_mod + COLON + EnumChatFormatting.GREEN + mod + EnumChatFormatting.GRAY); + if (authors != null && authors.length > 0) { + final String authorTag = "Author: "; + final StringBuilder sb = new StringBuilder(); + sb.append(TT_addedBy); + sb.append(COLON); + for (int i = 0; i < authors.length; i++) { + String author = authors[i]; + if (author.startsWith(authorTag)) { + // to support all the values in GTValues + // that already have Author at the start + sb.append(author.substring(authorTag.length())); + } else { + sb.append(author); + } + if (i != authors.length - 1) { + sb.append(EnumChatFormatting.RESET); + sb.append(EnumChatFormatting.GRAY); + sb.append(" & "); + sb.append(EnumChatFormatting.GREEN); + } + } + iLines.add(sb.toString()); + } hLines.add(TT_structurehint); + sLines.add(" "); + sLines.add(EnumChatFormatting.WHITE + TT_StructureComplex); + sLines.add( + EnumChatFormatting.WHITE + TT_SeeStructure1 + + EnumChatFormatting.BLUE + + " Structure" + + EnumChatFormatting.DARK_BLUE + + "Lib " + + EnumChatFormatting.RESET + + EnumChatFormatting.WHITE + + TT_SeeStructure2); + // create the final arrays iArray = iLines.toArray(new String[0]); sArray = sLines.toArray(new String[0]); // e.getKey() - 1 because 1 dot is meta 0. @@ -717,6 +829,11 @@ public class MultiblockTooltipBuilder { .stream() .map(e -> TT_dots[e.getKey() - 1] + COLON + String.join(SEPARATOR, e.getValue()))) .toArray(String[]::new); + // free memory + iLines = null; + sLines = null; + hLines = null; + hBlocks = null; return this; } diff --git a/src/main/java/gregtech/api/util/StringUtils.java b/src/main/java/gregtech/api/util/StringUtils.java new file mode 100644 index 0000000000..74c11f9ae4 --- /dev/null +++ b/src/main/java/gregtech/api/util/StringUtils.java @@ -0,0 +1,13 @@ +package gregtech.api.util; + +import java.util.Arrays; + +public class StringUtils { + + public static String getRepetitionOf(char c, int length) { + final char[] chars = new char[length]; + Arrays.fill(chars, c); + return new String(chars); + } + +} diff --git a/src/main/java/gregtech/common/GTProxy.java b/src/main/java/gregtech/common/GTProxy.java index 01d6315ebf..1515256ec1 100644 --- a/src/main/java/gregtech/common/GTProxy.java +++ b/src/main/java/gregtech/common/GTProxy.java @@ -686,6 +686,11 @@ public abstract class GTProxy implements IGTMod, IFuelHandler { */ public int mTitleTabStyle = 0; + /** + * Which style should tooltip separator lines have? 0: empty line, 1: dashed line, 2+: continuous line + */ + public int separatorStyle = 2; + /** * Whether to show seconds or ticks on NEI */ diff --git a/src/main/java/gregtech/common/config/Client.java b/src/main/java/gregtech/common/config/Client.java index f871b846a4..f51c154466 100644 --- a/src/main/java/gregtech/common/config/Client.java +++ b/src/main/java/gregtech/common/config/Client.java @@ -103,6 +103,10 @@ public class Client { @Config.Comment("Which style to use for title tab on machine GUI? 0: text tab split-dark, 1: text tab unified, 2: item icon tab.") @Config.DefaultInt(0) public int titleTabStyle; + + @Config.Comment("Which style should tooltip separator lines have? 0: empty line, 1: dashed line, 2+: continuous line.") + @Config.DefaultInt(2) + public int separatorStyle; } @Config.LangKey("GT5U.gui.config.client.preference") diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java index b39135fed2..6719478dca 100644 --- a/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java @@ -93,7 +93,10 @@ public class BehaviourCoverTool extends BehaviourNone { private void doCopy(TileEntity aTileEntity, World aWorld, int aX, int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ, List aList) { aList.add( - "----- X: " + EnumChatFormatting.AQUA + EnumChatFormatting.STRIKETHROUGH + "-----" + + EnumChatFormatting.RESET + + " X: " + + EnumChatFormatting.AQUA + GTUtility.formatNumbers(aX) + EnumChatFormatting.RESET + " Y: " @@ -108,7 +111,9 @@ public class BehaviourCoverTool extends BehaviourNone { + EnumChatFormatting.AQUA + aWorld.provider.dimensionId + EnumChatFormatting.RESET - + " -----"); + + " " + + EnumChatFormatting.STRIKETHROUGH + + "-----"); if (aTileEntity instanceof ICoverable tCoverable) { final ForgeDirection tSide = tCoverable.getCoverItemAtSide(side) != null ? side : tCoverable.getCoverItemAtSide(GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ)) != null diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java index ad22dcb958..7a625afc41 100644 --- a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java @@ -37,7 +37,6 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { private static final List COLOR_SELECTIONS; public static final String COLOR_NBT_TAG = "current_color"; public static final String LOCK_NBT_TAG = "is_locked"; - public static final String SEPARATOR = "-----------------------------------------"; private byte mCurrentColor; @@ -108,25 +107,22 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { final ItemStack itemStack) { aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.infinite")); aList.add(mTooltipChain); - aList.add(SEPARATOR); + aList.add(" "); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.more_info")); - aList.add(SEPARATOR); aList.add(AuthorQuerns); - return aList; } @Override public List getAdditionalToolTipsWhileSneaking(final MetaBaseItem aItem, final List aList, final ItemStack aStack) { - aList.add(SEPARATOR); + aList.add(" "); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.switch")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.gui")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.pick")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.lock")); - aList.add(SEPARATOR); + aList.add(" "); aList.add(AuthorQuerns); - return aList; } // endregion diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java index 31224ce604..382400c3b1 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java @@ -132,11 +132,9 @@ public class MTEAssemblyLine extends MTEExtendedPowerMultiBlockBase protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType("Combustion Generator") - .addInfo("Controller block for the Large Combustion Engine") .addInfo("Supply Diesel Fuels and 1000L of Lubricant per hour to run") .addInfo("Supply 40L/s of Oxygen to boost output (optional)") .addInfo("Default: Produces 2048EU/t at 100% fuel efficiency") .addInfo("Boosted: Produces 6144EU/t at 150% fuel efficiency") .addInfo("You need to wait for it to reach 300% to output full power") .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() .beginStructureBlock(3, 3, 4, false) .addController("Front center") .addCasingInfoRange("Stable Titanium Machine Casing", 16, 22, false) @@ -117,7 +115,7 @@ public class MTEDieselEngine extends MTEEnhancedMultiBlockBase .addInputHatch("Diesel Fuel, next to a Gear Box", 1) .addInputHatch("Lubricant, next to a Gear Box", 1) .addInputHatch("Oxygen, optional, next to a Gear Box", 1) - .toolTipFinisher("Gregtech"); + .toolTipFinisher(); return tt; } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java index 9e89ad1a22..2fb630d8f8 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java @@ -133,10 +133,8 @@ public class MTEDistillationTower extends MTEEnhancedMultiBlockBase