diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2024-07-31 14:04:19 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-31 14:04:19 +0800 |
| commit | b498af11f092ee31da124e1c8714f213d253439f (patch) | |
| tree | bba3c3a7f49aea39ae5a33bce5dcd0b3681f5a32 /src/main/java | |
| parent | c31cdee817dab3657528325947ce9429a138b30e (diff) | |
| parent | fd5a6a25f95fbcae256586943d6f89d562776c5a (diff) | |
| download | Skyblocker-b498af11f092ee31da124e1c8714f213d253439f.tar.gz Skyblocker-b498af11f092ee31da124e1c8714f213d253439f.tar.bz2 Skyblocker-b498af11f092ee31da124e1c8714f213d253439f.zip | |
Merge pull request #835 from AzureAaron/tooltip-tweaks
Tooltip Tweaks
Diffstat (limited to 'src/main/java')
5 files changed, 142 insertions, 25 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java index 3b4cb41c..40655bd1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java @@ -23,6 +23,7 @@ import java.util.List; public class TooltipManager { private static final TooltipAdder[] adders = new TooltipAdder[]{ new LineSmoothener(), // Applies before anything else + new TrueHexDisplay(), new SupercraftReminder(), ChocolateFactorySolver.INSTANCE, new ReorderHelper(), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java index 8d9d8fbb..5b78e2cb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java @@ -20,6 +20,7 @@ import java.util.List; public class ColorTooltip extends SimpleTooltipAdder { private static final Logger LOGGER = LoggerFactory.getLogger(ColorTooltip.class); + private static final long WITHER_GLITCHED_AFTER_DATE = 1605830400000L; public ColorTooltip(int priority) { super(priority); @@ -45,25 +46,29 @@ public class ColorTooltip extends SimpleTooltipAdder { if (existingTooltip.startsWith("Color: ")) { correctLine = true; - addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, existingTooltip); + addExoticTooltip(lines, stack, internalID, colorHex, expectedHex, existingTooltip); break; } } if (!correctLine) { - addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, ""); + addExoticTooltip(lines, stack, internalID, colorHex, expectedHex, ""); } } } - private static void addExoticTooltip(List<Text> lines, String internalID, NbtCompound customData, String colorHex, String expectedHex, String existingTooltip) { - if (expectedHex != null && !colorHex.equalsIgnoreCase(expectedHex) && !isException(internalID, colorHex) && !intendedDyed(customData)) { - final DyeType type = checkDyeType(colorHex); - lines.add(1, Text.literal(existingTooltip + Formatting.DARK_GRAY + "(").append(type.getTranslatedText()).append(Formatting.DARK_GRAY + ")")); + private static void addExoticTooltip(List<Text> lines, ItemStack stack, String internalID, String colorHex, String expectedHex, String existingTooltip) { + if (expectedHex != null && !colorHex.equalsIgnoreCase(expectedHex) && !isException(internalID, colorHex) && !intendedDyed(ItemUtils.getCustomData(stack))) { + final DyeType type = checkDyeType(stack, colorHex); + lines.add(1, Text.literal(existingTooltip + Formatting.DARK_GRAY + "(") + .append(type.getTranslatedText()) + .append(Text.literal(" - ")) + .append(Text.literal("#" + colorHex).withColor(Integer.decode("0x" + colorHex))) + .append(Text.literal(")").formatted(Formatting.DARK_GRAY))); } } - public static String getExpectedHex(String id) { + private static String getExpectedHex(String id) { String color = TooltipInfoType.COLOR.getData().get(id).getAsString(); if (color != null) { String[] RGBValues = color.split(","); @@ -74,7 +79,7 @@ public class ColorTooltip extends SimpleTooltipAdder { } } - public static boolean isException(String id, String hex) { + private static boolean isException(String id, String hex) { return switch (id) { case String it when it.startsWith("LEATHER") || it.equals("GHOST_BOOTS") || Constants.SEYMOUR_IDS.contains(it) -> true; case String it when it.startsWith("RANCHER") -> Constants.RANCHERS.contains(hex); @@ -88,28 +93,54 @@ public class ColorTooltip extends SimpleTooltipAdder { }; } - public static DyeType checkDyeType(String hex) { + private static DyeType checkDyeType(ItemStack stack, String hex) { return switch (hex) { case String it when Constants.CRYSTAL_HEXES.contains(it) -> DyeType.CRYSTAL; case String it when Constants.FAIRY_HEXES.contains(it) -> DyeType.FAIRY; case String it when Constants.OG_FAIRY_HEXES.contains(it) -> DyeType.OG_FAIRY; - case String it when Constants.SPOOK.contains(it) -> DyeType.SPOOK; - case String it when Constants.GLITCHED.contains(it) -> DyeType.GLITCHED; + case String it when Constants.SPOOK.contains(it) && stack.getSkyblockId().startsWith("FAIRY_") -> DyeType.SPOOK; + case String it when Constants.GLITCHED.contains(it) && isGlitched(stack, hex) -> DyeType.GLITCHED; default -> DyeType.EXOTIC; }; } - public static boolean intendedDyed(NbtCompound customData) { + private static boolean intendedDyed(NbtCompound customData) { return customData.contains("dye_item"); } - public enum DyeType implements StringIdentifiable { + //Thanks to TGWaffles' guidance on how to make this more accurate + private static boolean isGlitched(ItemStack stack, String hex) { + String id = stack.getSkyblockId(); + + if (id.contains("WITHER")) { + return isWitherGlitched(id, hex, ObtainedDateTooltip.getLongTimestamp(stack)); + } + + String miscGlitchedId = Constants.MISC_GLITCHED_HEXES.get(hex); + + return miscGlitchedId != null && id.startsWith(miscGlitchedId); + } + + private static boolean isWitherGlitched(String id, String hex, long obtained) { + if (hex.equals("000000") && obtained < WITHER_GLITCHED_AFTER_DATE) return false; //Too old to be glitched + + return switch (id) { + case String it when it.contains("CHESTPLATE") -> Constants.WITHER_CHESTPLATE_HEXES.containsKey(hex) && Constants.WITHER_CHESTPLATE_HEXES.containsValue(it) && !Constants.WITHER_CHESTPLATE_HEXES.get(hex).equals(it); + case String it when it.contains("LEGGINGS") -> Constants.WITHER_LEGGINGS_HEXES.containsKey(hex) && Constants.WITHER_LEGGINGS_HEXES.containsValue(it) && !Constants.WITHER_LEGGINGS_HEXES.get(hex).equals(it); + case String it when it.contains("BOOTS") -> Constants.WITHER_BOOTS_HEXES.containsKey(hex) && Constants.WITHER_BOOTS_HEXES.containsValue(it) && !Constants.WITHER_BOOTS_HEXES.get(hex).equals(it); + + default -> false; + }; + } + + private enum DyeType implements StringIdentifiable { CRYSTAL("crystal", Formatting.AQUA), FAIRY("fairy", Formatting.LIGHT_PURPLE), OG_FAIRY("og_fairy", Formatting.DARK_PURPLE), SPOOK("spook", Formatting.RED), GLITCHED("glitched", Formatting.BLUE), EXOTIC("exotic", Formatting.GOLD); + private final String name; private final Formatting formatting; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java index 31aa3de4..1cbff9d8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java @@ -41,6 +41,20 @@ public class ObtainedDateTooltip extends SimpleTooltipAdder { } } + private static TemporalAccessor getTimestampInternal(ItemStack stack) { + NbtCompound customData = ItemUtils.getCustomData(stack); + + if (customData != null && customData.contains("timestamp", NbtElement.LONG_TYPE)) { + return Instant.ofEpochMilli(customData.getLong("timestamp")); + } + + if (customData != null && customData.contains("timestamp", NbtElement.STRING_TYPE)) { + return OLD_OBTAINED_DATE_FORMAT.parse(customData.getString("timestamp")); + } + + return null; + } + /** * This method converts the "timestamp" variable into the same date format as Hypixel represents it in the museum. * Currently, there are two types of string timestamps the legacy which is built like this @@ -58,18 +72,17 @@ public class ObtainedDateTooltip extends SimpleTooltipAdder { * @return if the item have a "Timestamp" it will be shown formated on the tooltip */ public static String getTimestamp(ItemStack stack) { - NbtCompound customData = ItemUtils.getCustomData(stack); + TemporalAccessor accessor = getTimestampInternal(stack); - if (customData != null && customData.contains("timestamp", NbtElement.LONG_TYPE)) { - Instant date = Instant.ofEpochMilli(customData.getLong("timestamp")); - return OBTAINED_DATE_FORMATTER.format(date); - } + return accessor != null ? OBTAINED_DATE_FORMATTER.format(accessor) : ""; + } - if (customData != null && customData.contains("timestamp", NbtElement.STRING_TYPE)) { - TemporalAccessor date = OLD_OBTAINED_DATE_FORMAT.parse(customData.getString("timestamp")); - return OBTAINED_DATE_FORMATTER.format(date); - } + /** + * @see #getTimestamp(ItemStack) + */ + public static long getLongTimestamp(ItemStack stack) { + TemporalAccessor accessor = getTimestampInternal(stack); - return ""; + return accessor != null ? Instant.from(accessor).toEpochMilli() : 0; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java new file mode 100644 index 00000000..3599b75d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java @@ -0,0 +1,47 @@ +package de.hysky.skyblocker.skyblock.item.tooltip.adders; + +import java.util.List; +import java.util.regex.Pattern; + +import org.jetbrains.annotations.Nullable; + +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; + +/** + * Changes the color of HEX colors codes on dye items to reflect their actual color + */ +public class TrueHexDisplay extends SimpleTooltipAdder { + private static final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}"); + + public TrueHexDisplay() { + super(Integer.MIN_VALUE); + } + + @Override + public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) { + String itemId = stack.getSkyblockId(); + + //Nice job on item id consistency Hypixel + if (itemId != null && !itemId.isEmpty() && (itemId.startsWith("DYE_") || itemId.endsWith("_DYE"))) { + for (Text line : lines) { + //The hex part is inside of the siblings + for (Text text : line.getSiblings()) { + String stringified = text.getString(); + + if (HEX_PATTERN.matcher(stringified).matches()) { + ((MutableText) text).withColor(Integer.decode(stringified)); + } + } + } + } + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/Constants.java b/src/main/java/de/hysky/skyblocker/utils/Constants.java index c002be57..50c79638 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Constants.java +++ b/src/main/java/de/hysky/skyblocker/utils/Constants.java @@ -6,6 +6,7 @@ import net.minecraft.util.Formatting; import java.time.LocalDate; import java.util.List; +import java.util.Map; import java.util.function.Supplier; /** @@ -62,11 +63,35 @@ public interface Constants { List<String> OG_FAIRY_HEXES = List.of("FF99FF", "FFCCFF", "E5CCFF", "CC99FF", "CC00CC", "FF00FF", "FF33FF", "FF66FF", "B266FF", "9933FF", "7F00FF", "660066", "6600CC", "4C0099", "330066", "990099", "660033", "99004C", "CC0066", "660033", "99004C", "FFCCE5", "660033", "FFCCE5", "FF99CC", "FFCCE5", "FF99CC", "FF66B2"); - List<String> GLITCHED = List.of("FFDC51", "F7DA33", "606060", "E7413C", "45413C", "4A14B7", "1793C4", "000000", "E75C3C", "65605A", - "5D2FB9", "17A8C4", "E76E3C", "88837E", "8969C8", "1CD4E4"); // Glitched through other means such as Shark Scale upgrade color List<String> SPOOK = List.of("000000", "070008", "0E000F", "150017", "1B001F", "220027", "29002E", "300036", "37003E", "3E0046", "45004D", "4C0055", "52005D", "590065", "60006C", "670074", "6E007C", "750084", "7C008B", "830093", "89009B", "9000A3", "9700AA", "993399", "9E00B2"); + // Exotic - Glitched Hexes + Map<String, String> MISC_GLITCHED_HEXES = Map.of( + "FFDC51", "SHARK_SCALE", + "F7DA33", "FROZEN_BLAZE", + "606060", "BAT_PERSON"); + Map<String, String> WITHER_CHESTPLATE_HEXES = Map.of( + "E7413C", "POWER_WITHER_CHESTPLATE", + "45413C", "TANK_WITHER_CHESTPLATE", + "4A14B7", "SPEED_WITHER_CHESTPLATE", + "1793C4", "WISE_WITHER_CHESTPLATE", + "000000", "WITHER_CHESTPLATE"); + Map<String, String> WITHER_LEGGINGS_HEXES = Map.of( + "E75C3C", "POWER_WITHER_LEGGINGS", + "65605A", "TANK_WITHER_LEGGINGS", + "5D2FB9", "SPEED_WITHER_LEGGINGS", + "17A8C4", "WISE_WITHER_LEGGINGS", + "000000", "WITHER_LEGGINGS"); + Map<String, String> WITHER_BOOTS_HEXES = Map.of( + "E76E3C", "POWER_WITHER_BOOTS", + "88837E", "TANK_WITHER_BOOTS", + "8969C8", "SPEED_WITHER_BOOTS", + "1CD4E4", "WISE_WITHER_BOOTS", + "000000", "WITHER_BOOTS"); + //All glitched hexes + List<String> GLITCHED = List.of("FFDC51", "F7DA33", "606060", "E7413C", "45413C", "4A14B7", "1793C4", "000000", "E75C3C", "65605A", + "5D2FB9", "17A8C4", "E76E3C", "88837E", "8969C8", "1CD4E4"); // Glitched through other means such as Shark Scale upgrade color // List of exceptions List<String> RANCHERS = List.of("CC5500", "000000", "0"); |
