aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/client/GT_TooltipEventHandler.java
diff options
context:
space:
mode:
authorColen <54497873+GTNH-Colen@users.noreply.github.com>2022-01-28 20:14:17 +0000
committerGitHub <noreply@github.com>2022-01-28 21:14:17 +0100
commit3d2640eab73e1ecb17cff4700d8aa83fb324ee37 (patch)
tree8f357eef9d15f16ba54b9462eb53707055920d55 /src/main/java/gregtech/client/GT_TooltipEventHandler.java
parentbba8933048adf109d7b1f2bfa42517b2a9fbd5cf (diff)
downloadGT5-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.java192
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