From bc8864eeb2c4ba5a5f3d3709dc488089d77e4c98 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 Jul 2024 00:27:00 -0400 Subject: True HEX Display! Small change, major impact! --- .../skyblock/item/tooltip/TooltipManager.java | 1 + .../item/tooltip/adders/TrueHexDisplay.java | 42 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java (limited to 'src/main/java') 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/TrueHexDisplay.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java new file mode 100644 index 00000000..093e9de6 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java @@ -0,0 +1,42 @@ +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.TooltipAdder; +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 TooltipAdder { + 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 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)); + } + } + } + } + } +} -- cgit From 9ddc3fe9a52efcbd32e7671a4070ea0a371b5570 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 Jul 2024 01:50:27 -0400 Subject: Exotic Tooltip Enhancements/Fixes --- .../skyblock/item/tooltip/adders/ColorTooltip.java | 57 +++++++++++++++++----- .../item/tooltip/adders/ObtainedDateTooltip.java | 18 +++++++ .../java/de/hysky/skyblocker/utils/Constants.java | 29 ++++++++++- 3 files changed, 89 insertions(+), 15 deletions(-) (limited to 'src/main/java') 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 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 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..e7e79966 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 @@ -72,4 +72,22 @@ public class ObtainedDateTooltip extends SimpleTooltipAdder { return ""; } + + /** + * @see #getTimestamp(ItemStack) + */ + public static long getLongTimestamp(ItemStack stack) { + NbtCompound customData = ItemUtils.getCustomData(stack); + + if (customData != null && customData.contains("timestamp", NbtElement.LONG_TYPE)) { + return customData.getLong("timestamp"); + } + + if (customData != null && customData.contains("timestamp", NbtElement.STRING_TYPE)) { + TemporalAccessor date = OLD_OBTAINED_DATE_FORMAT.parse(customData.getString("timestamp")); + return Instant.from(date).toEpochMilli(); + } + + return 0L; + } } 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 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 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 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 MISC_GLITCHED_HEXES = Map.of( + "FFDC51", "SHARK_SCALE", + "F7DA33", "FROZEN_BLAZE", + "606060", "BAT_PERSON"); + Map 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 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 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 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 RANCHERS = List.of("CC5500", "000000", "0"); -- cgit From 050e3c76ab1b86de365bbab8207cd02043963ad2 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:27:06 -0400 Subject: Deduplicate timestamp code --- .../skyblock/item/tooltip/adders/ObtainedDateTooltip.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'src/main/java') 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 e7e79966..341ec0fe 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 @@ -12,6 +12,7 @@ import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; import java.time.Instant; +import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; @@ -77,17 +78,6 @@ public class ObtainedDateTooltip extends SimpleTooltipAdder { * @see #getTimestamp(ItemStack) */ public static long getLongTimestamp(ItemStack stack) { - NbtCompound customData = ItemUtils.getCustomData(stack); - - if (customData != null && customData.contains("timestamp", NbtElement.LONG_TYPE)) { - return customData.getLong("timestamp"); - } - - if (customData != null && customData.contains("timestamp", NbtElement.STRING_TYPE)) { - TemporalAccessor date = OLD_OBTAINED_DATE_FORMAT.parse(customData.getString("timestamp")); - return Instant.from(date).toEpochMilli(); - } - - return 0L; + return LocalDate.parse(getTimestamp(stack), OBTAINED_DATE_FORMATTER).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); } } -- cgit From 4c33da512d48a33cbc5a297ecdfe93906b3f037d Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jul 2024 00:59:29 -0400 Subject: Refactor obtained date methods --- .../item/tooltip/adders/ObtainedDateTooltip.java | 33 +++++++++++++--------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'src/main/java') 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 341ec0fe..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 @@ -12,7 +12,6 @@ import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; import java.time.Instant; -import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; @@ -42,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 @@ -59,25 +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); - - if (customData != null && customData.contains("timestamp", NbtElement.LONG_TYPE)) { - Instant date = Instant.ofEpochMilli(customData.getLong("timestamp")); - return OBTAINED_DATE_FORMATTER.format(date); - } + TemporalAccessor accessor = getTimestampInternal(stack); - 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); - } - - return ""; + return accessor != null ? OBTAINED_DATE_FORMATTER.format(accessor) : ""; } /** * @see #getTimestamp(ItemStack) */ public static long getLongTimestamp(ItemStack stack) { - return LocalDate.parse(getTimestamp(stack), OBTAINED_DATE_FORMATTER).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + TemporalAccessor accessor = getTimestampInternal(stack); + + return accessor != null ? Instant.from(accessor).toEpochMilli() : 0; } } -- cgit From fd5a6a25f95fbcae256586943d6f89d562776c5a Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 26 Jul 2024 01:02:03 -0400 Subject: Update to new tooltip system --- .../skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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 index 093e9de6..3599b75d 100644 --- 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 @@ -5,7 +5,7 @@ import java.util.regex.Pattern; import org.jetbrains.annotations.Nullable; -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipAdder; +import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.MutableText; @@ -14,7 +14,7 @@ import net.minecraft.text.Text; /** * Changes the color of HEX colors codes on dye items to reflect their actual color */ -public class TrueHexDisplay extends TooltipAdder { +public class TrueHexDisplay extends SimpleTooltipAdder { private static final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}"); public TrueHexDisplay() { @@ -39,4 +39,9 @@ public class TrueHexDisplay extends TooltipAdder { } } } + + @Override + public boolean isEnabled() { + return true; + } } -- cgit