diff options
author | Colen <54497873+GTNH-Colen@users.noreply.github.com> | 2022-01-28 20:14:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-28 21:14:17 +0100 |
commit | 3d2640eab73e1ecb17cff4700d8aa83fb324ee37 (patch) | |
tree | 8f357eef9d15f16ba54b9462eb53707055920d55 /src/main/java/gregtech/client/GT_TooltipEventHandler.java | |
parent | bba8933048adf109d7b1f2bfa42517b2a9fbd5cf (diff) | |
download | GT5-Unofficial-3d2640eab73e1ecb17cff4700d8aa83fb324ee37.tar.gz GT5-Unofficial-3d2640eab73e1ecb17cff4700d8aa83fb324ee37.tar.bz2 GT5-Unofficial-3d2640eab73e1ecb17cff4700d8aa83fb324ee37.zip |
Texture tooltips update (#903)
* New circuits
* Fix last tier ore dict
* Colorfull tier tooltips (#898)
* Make Repellator stop slimes spawning (#896)
* Add special tooltip handling, requested by Colen
Co-authored-by: Alkalus <3060479+draknyte1@users.noreply.github.com>
Co-authored-by: glowredman <fredcraft00@gmail.com>
* Fixed github shenanigans with new tier colours.
* Update A LOT of textures (mostly minor)
* Remove extraneous comments.
* Remove obsolete comments and update materials.java.
* Add tooltips for all batteries in base GT.
* Remove test case
Co-authored-by: Alkalus <3060479+draknyte1@users.noreply.github.com>
Co-authored-by: glowredman <fredcraft00@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/client/GT_TooltipEventHandler.java')
-rw-r--r-- | src/main/java/gregtech/client/GT_TooltipEventHandler.java | 192 |
1 files changed, 139 insertions, 53 deletions
diff --git a/src/main/java/gregtech/client/GT_TooltipEventHandler.java b/src/main/java/gregtech/client/GT_TooltipEventHandler.java index 1fb4995025..30ef1a396d 100644 --- a/src/main/java/gregtech/client/GT_TooltipEventHandler.java +++ b/src/main/java/gregtech/client/GT_TooltipEventHandler.java @@ -1,7 +1,5 @@ package gregtech.client; -import static net.minecraft.util.EnumChatFormatting.*; - import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; @@ -15,52 +13,93 @@ import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.oredict.OreDictionary; public class GT_TooltipEventHandler { - - private static final Map<String, Supplier<String>[]> tooltipMap = new HashMap<>(); - + + private static final Map<String, Supplier<String>> tooltipMap = new HashMap<>(); + + private static final String BLACK, DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, GOLD, GRAY, DARK_GRAY, BLUE, GREEN, AQUA, RED, LIGHT_PURPLE, YELLOW, WHITE, OBFUSCATED, BOLD, STRIKETHROUGH, UNDERLINE, ITALIC, RESET; + + private static final Supplier<String> NEW_LINE; + + /* + * What you can do: + * - add simple, unformated text + * - add formatted text + * Note: you can chain formatting codes but the color must be used first: + * e.g. BLACK + ITALIC will create black, italic text but ITALIC + BLACK will only create black text. + * - add animated text + * - chain multiple static and/or animated text together using chain() + * (Although chaining only static text together is pointless, text() is already able to to that) + * - add multiple lines by using NEW_LINE (either as String or as Supplier<String>) + * Note: formatting only applies for one line + * Note: having a NEW_LINE in animated text results in "skipping" of one formatting since NEW_LINE + * counts as character but is not displayed + * + * Note: adding a tooltip to an item multiple times also creates multiple lines (in the same order they were added) + * + * What you cannot do: + * - add a tooltip depending on NBT, tooltips are only mapped to name and meta + * + * This method is executed on postInit + */ public static void init() { - addOredictTooltip("circuitPrimitive", formattedText("ULV-Tier", RED)); - addOredictTooltip("circuitBasic", formattedText("LV-Tier", DARK_BLUE)); - addOredictTooltip("circuitGood", formattedText("MV-Tier", GRAY)); - addOredictTooltip("circuitAdvanced", formattedText("HV-Tier", GOLD)); - addOredictTooltip("circuitData", formattedText("EV-Tier", DARK_PURPLE)); - addOredictTooltip("circuitElite", formattedText("IV-Tier", DARK_BLUE)); - addOredictTooltip("circuitMaster", formattedText("LuV-Tier", LIGHT_PURPLE)); - addOredictTooltip("circuitUltimate", formattedText("ZPM-Tier", WHITE)); - addOredictTooltip("circuitSuperconductor", formattedText("UV-Tier", AQUA)); - addOredictTooltip("circuitInfinite", formattedText("UHV-Tier", DARK_RED)); - addOredictTooltip("circuitBio", formattedText("UEV-Tier", GREEN)); - //addOredictTooltip("circuitOptical", formattedText("UIV-Tier", DARK_GREEN)); - //addOredictTooltip("circuitExotic", formattedText("UV-Tier", DARK_AQUA)); - //addOredictTooltip("circuitCosmic", animatedString("UXV-Tier", 8, 500, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, BLACK, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE, WHITE)); - //addOredictTooltip("circuitTranscendental", animatedString("MAX-Tier", 1, 80, RED, GOLD, YELLOW, GREEN, AQUA, BLUE, LIGHT_PURPLE)); + + // Tooltip tiers for ALL items given the appropriate tier oredict tag. + addOredictTooltip("ULV", text(WHITE + "ULV-Tier")); + addOredictTooltip("LV" , text(GRAY + "LV-Tier")); + addOredictTooltip("MV" , text(GOLD + "MV-Tier")); + addOredictTooltip("HV" , text(YELLOW + "HV-Tier")); + addOredictTooltip("EV" , text(DARK_GRAY + "EV-Tier")); + addOredictTooltip("IV" , text(GREEN + "IV-Tier")); + addOredictTooltip("LuV", text(LIGHT_PURPLE + "LuV-Tier")); + addOredictTooltip("ZPM", text(AQUA + "ZPM-Tier")); + addOredictTooltip("UV" , text(DARK_GREEN + "UV-Tier")); + addOredictTooltip("UHV", text(DARK_RED + "UHV-Tier")); + addOredictTooltip("UEV", text(DARK_PURPLE + "UEV-Tier")); + addOredictTooltip("UIV", text(DARK_BLUE + BOLD + "UIV-Tier")); + addOredictTooltip("UMV", text(RED + BOLD + UNDERLINE + "UMV-Tier")); + addOredictTooltip("UXV", animatedText("UXV-Tier", 1, 100, DARK_PURPLE + BOLD + UNDERLINE, DARK_RED + UNDERLINE + BOLD)); + addOredictTooltip("MAX", chain( + animatedText("X", 1, 100, LIGHT_PURPLE + BOLD + OBFUSCATED + UNDERLINE, RED + BOLD + OBFUSCATED + UNDERLINE, GOLD + OBFUSCATED + BOLD + UNDERLINE, YELLOW + OBFUSCATED + BOLD + UNDERLINE, GREEN + OBFUSCATED + BOLD + UNDERLINE, AQUA + OBFUSCATED + BOLD + UNDERLINE, BLUE + OBFUSCATED + BOLD + UNDERLINE), + animatedText("MAX-Tier", 1, 100, RED + BOLD + UNDERLINE, GOLD + BOLD + UNDERLINE, YELLOW + BOLD + UNDERLINE, GREEN + BOLD + UNDERLINE, AQUA + BOLD + UNDERLINE, BLUE + BOLD + UNDERLINE, LIGHT_PURPLE + BOLD + UNDERLINE), + animatedText("X", 1, 100, GOLD + OBFUSCATED + BOLD + UNDERLINE, YELLOW + OBFUSCATED + BOLD + UNDERLINE, GREEN + OBFUSCATED + BOLD + UNDERLINE, AQUA + OBFUSCATED + BOLD + UNDERLINE, BLUE + OBFUSCATED + BOLD + UNDERLINE, LIGHT_PURPLE + OBFUSCATED + BOLD + UNDERLINE, RED + OBFUSCATED + BOLD + UNDERLINE) + )); + } - + @SubscribeEvent public void renderTooltip(ItemTooltipEvent event) { - Supplier<String>[] texts = tooltipMap.get(getStackIdentifier(event.itemStack)); - if(texts == null) return; - String s = ""; - for(Supplier<String> snippet : texts) { - s += snippet.get(); + Supplier<String> tooltip = tooltipMap.get(getStackIdentifier(event.itemStack)); + if(tooltip != null) { + String text = tooltip.get(); + if(!text.isEmpty()) { + for(String line : text.split("\n")) { + event.toolTip.add(line); + } + } } - event.toolTip.add(s); } - + + @SafeVarargs + private static Supplier<String> chain(Supplier<String>... parts) { + return () -> { + String s = ""; + for(Supplier<String> text : parts) { + s += text.get(); + } + return s; + }; + } + private static Supplier<String> text(String text) { return () -> text; } - - private static Supplier<String> formattedText(String text, EnumChatFormatting formatting){ - return () -> formatting + text; - } - + /** Taken and adapted from <a href=https://github.com/GTNewHorizons/Avaritia/blob/7b7eaed652f6be320b10f33d8f8e6a04e66ca14f/src/main/java/fox/spiteful/avaritia/LudicrousText.java#L19>Avaritia</a>, licensed under MIT */ - private static Supplier<String> animatedString(String text, int posstep, int delay, EnumChatFormatting... formattingArray) { - if(text.isEmpty()) return () -> ""; - + private static Supplier<String> animatedText(String text, int posstep, int delay, String... formattingArray) { + if(text == null || text.isEmpty() || formattingArray == null || formattingArray.length == 0) return () -> ""; + final int finalDelay = delay = delay <= 0 ? delay = 1 : delay; - + return () -> { StringBuilder sb = new StringBuilder(text.length() * 3); int offset = (int) ((System.currentTimeMillis() / finalDelay) % formattingArray.length); @@ -73,29 +112,76 @@ public class GT_TooltipEventHandler { return sb.toString(); }; } - - @SafeVarargs - private static void addOredictTooltip(String oredictName, Supplier<String>... tooltips) { + + private static void addOredictTooltip(String oredictName, Supplier<String> tooltip) { for(ItemStack item : OreDictionary.getOres(oredictName)) { - addItemTooltip(item, tooltips); + addItemTooltip(item, tooltip); } } - - @SafeVarargs - private static void addItemTooltip(String modID, String registryName, int meta, Supplier<String>... tooltips) { + + private static void addItemTooltip(String modID, String registryName, int meta, Supplier<String> tooltip) { Item item = GameRegistry.findItem(modID, registryName); - if(item == null || meta < 0 || meta >= OreDictionary.WILDCARD_VALUE || tooltips == null) return; - tooltipMap.put(item.getUnlocalizedName() + "@" + meta, tooltips); + if(item == null || meta < 0 || meta >= OreDictionary.WILDCARD_VALUE || tooltip == null) return; + String identifier = item.getUnlocalizedName() + "@" + meta; + Supplier<String> previous = tooltipMap.get(identifier); + if(previous == null) { + tooltipMap.put(identifier, tooltip); + } else { + tooltipMap.put(identifier, chain(previous, NEW_LINE, tooltip)); + } } - - @SafeVarargs - private static void addItemTooltip(ItemStack item, Supplier<String>... tooltips) { - if(item == null || tooltips == null) return; - tooltipMap.put(getStackIdentifier(item), tooltips); + + private static void addItemTooltip(ItemStack item, Supplier<String> tooltip) { + if(item == null || tooltip == null) return; + String identifier = getStackIdentifier(item); + Supplier<String> previous = tooltipMap.get(identifier); + if(previous == null) { + tooltipMap.put(identifier, tooltip); + } else { + tooltipMap.put(identifier, chain(previous, NEW_LINE, tooltip)); + } } - + private static String getStackIdentifier(ItemStack stack) { return stack == null ? "" : stack.getItem().getUnlocalizedName() + "@" + stack.getItemDamage(); } -} + static { + AQUA = EnumChatFormatting.AQUA.toString(); + BLACK = EnumChatFormatting.BLACK.toString(); + BLUE = EnumChatFormatting.BLUE.toString(); + BOLD = EnumChatFormatting.BOLD.toString(); + DARK_AQUA = EnumChatFormatting.DARK_AQUA.toString(); + DARK_BLUE = EnumChatFormatting.DARK_BLUE.toString(); + DARK_GRAY = EnumChatFormatting.DARK_GRAY.toString(); + DARK_GREEN = EnumChatFormatting.DARK_GREEN.toString(); + DARK_PURPLE = EnumChatFormatting.DARK_PURPLE.toString(); + DARK_RED = EnumChatFormatting.DARK_RED.toString(); + GOLD = EnumChatFormatting.GOLD.toString(); + GRAY = EnumChatFormatting.GRAY.toString(); + GREEN = EnumChatFormatting.GREEN.toString(); + ITALIC = EnumChatFormatting.ITALIC.toString(); + LIGHT_PURPLE = EnumChatFormatting.LIGHT_PURPLE.toString(); + OBFUSCATED = EnumChatFormatting.OBFUSCATED.toString(); + RED = EnumChatFormatting.RED.toString(); + RESET = EnumChatFormatting.RESET.toString(); + STRIKETHROUGH = EnumChatFormatting.STRIKETHROUGH.toString(); + UNDERLINE = EnumChatFormatting.UNDERLINE.toString(); + WHITE = EnumChatFormatting.WHITE.toString(); + YELLOW = EnumChatFormatting.YELLOW.toString(); + + NEW_LINE = new Supplier<String>() { + + @Override + public String get() { + return "\n"; + } + + @Override + public String toString() { + return "\n"; + } + }; + } + +}
\ No newline at end of file |