diff options
author | GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> | 2022-01-27 07:20:41 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 08:20:41 +0100 |
commit | f185448ac0452b6d88319b27d91706f45cb7a09b (patch) | |
tree | 06ada33307cb9459b525674ff40f7bd187f43674 /src/main/java/gregtech/client/GT_TooltipEventHandler.java | |
parent | 22bba6ee4da0b62b8b41ca9f0e70c6d6104d9cd8 (diff) | |
download | GT5-Unofficial-f185448ac0452b6d88319b27d91706f45cb7a09b.tar.gz GT5-Unofficial-f185448ac0452b6d88319b27d91706f45cb7a09b.tar.bz2 GT5-Unofficial-f185448ac0452b6d88319b27d91706f45cb7a09b.zip |
Add new circuit tiers (#895)
* 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>
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 | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/main/java/gregtech/client/GT_TooltipEventHandler.java b/src/main/java/gregtech/client/GT_TooltipEventHandler.java new file mode 100644 index 0000000000..1fb4995025 --- /dev/null +++ b/src/main/java/gregtech/client/GT_TooltipEventHandler.java @@ -0,0 +1,101 @@ +package gregtech.client; + +import static net.minecraft.util.EnumChatFormatting.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +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<>(); + + 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)); + } + + @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(); + } + event.toolTip.add(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 () -> ""; + + 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); + for(int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + int indexColorArray = (i * posstep + formattingArray.length - offset) % formattingArray.length; + sb.append(formattingArray[indexColorArray]); + sb.append(c); + } + return sb.toString(); + }; + } + + @SafeVarargs + private static void addOredictTooltip(String oredictName, Supplier<String>... tooltips) { + for(ItemStack item : OreDictionary.getOres(oredictName)) { + addItemTooltip(item, tooltips); + } + } + + @SafeVarargs + private static void addItemTooltip(String modID, String registryName, int meta, Supplier<String>... tooltips) { + Item item = GameRegistry.findItem(modID, registryName); + if(item == null || meta < 0 || meta >= OreDictionary.WILDCARD_VALUE || tooltips == null) return; + tooltipMap.put(item.getUnlocalizedName() + "@" + meta, tooltips); + } + + @SafeVarargs + private static void addItemTooltip(ItemStack item, Supplier<String>... tooltips) { + if(item == null || tooltips == null) return; + tooltipMap.put(getStackIdentifier(item), tooltips); + } + + private static String getStackIdentifier(ItemStack stack) { + return stack == null ? "" : stack.getItem().getUnlocalizedName() + "@" + stack.getItemDamage(); + } + +} |