aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-07-31 14:04:19 +0800
committerGitHub <noreply@github.com>2024-07-31 14:04:19 +0800
commitb498af11f092ee31da124e1c8714f213d253439f (patch)
treebba3c3a7f49aea39ae5a33bce5dcd0b3681f5a32 /src/main/java
parentc31cdee817dab3657528325947ce9429a138b30e (diff)
parentfd5a6a25f95fbcae256586943d6f89d562776c5a (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ColorTooltip.java57
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/TrueHexDisplay.java47
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Constants.java29
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");