aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-07-11 01:50:27 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-07-26 00:59:48 -0400
commit9ddc3fe9a52efcbd32e7671a4070ea0a371b5570 (patch)
tree67b417f178443fd48b8df1eaa82b3b33e6974784 /src/main/java
parentbc8864eeb2c4ba5a5f3d3709dc488089d77e4c98 (diff)
downloadSkyblocker-9ddc3fe9a52efcbd32e7671a4070ea0a371b5570.tar.gz
Skyblocker-9ddc3fe9a52efcbd32e7671a4070ea0a371b5570.tar.bz2
Skyblocker-9ddc3fe9a52efcbd32e7671a4070ea0a371b5570.zip
Exotic Tooltip Enhancements/Fixes
Diffstat (limited to 'src/main/java')
-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.java18
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Constants.java29
3 files changed, 89 insertions, 15 deletions
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..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<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");