aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ExoticTooltip.java94
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/ColorTooltip.java135
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java1
4 files changed, 136 insertions, 129 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ExoticTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ExoticTooltip.java
index 46babc8b..ac028918 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ExoticTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ExoticTooltip.java
@@ -1,96 +1,2 @@
package de.hysky.skyblocker.skyblock.item.tooltip;
-import de.hysky.skyblocker.utils.Constants;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.text.MutableText;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-import net.minecraft.util.StringIdentifiable;
-
-public class ExoticTooltip {
- public static String getExpectedHex(String id) {
- String color = TooltipInfoType.COLOR.getData().get(id).getAsString();
- if (color != null) {
- String[] RGBValues = color.split(",");
- return String.format("%02X%02X%02X", Integer.parseInt(RGBValues[0]), Integer.parseInt(RGBValues[1]), Integer.parseInt(RGBValues[2]));
- } else {
- ItemTooltip.LOGGER.warn("[Skyblocker Exotics] No expected color data found for id {}", id);
- return null;
- }
- }
-
- public static boolean isException(String id, String hex) {
- if (id.startsWith("LEATHER") || id.equals("GHOST_BOOTS") || Constants.SEYMOUR_IDS.contains(id)) {
- return true;
- }
- if (id.startsWith("RANCHER")) {
- return Constants.RANCHERS.contains(hex);
- }
- if (id.contains("ADAPTIVE_CHESTPLATE")) {
- return Constants.ADAPTIVE_CHEST.contains(hex);
- } else if (id.contains("ADAPTIVE")) {
- return Constants.ADAPTIVE.contains(hex);
- }
- if (id.startsWith("REAPER")) {
- return Constants.REAPER.contains(hex);
- }
- if (id.startsWith("FAIRY")) {
- return Constants.FAIRY_HEXES.contains(hex);
- }
- if (id.startsWith("CRYSTAL")) {
- return Constants.CRYSTAL_HEXES.contains(hex);
- }
- if (id.contains("SPOOK")) {
- return Constants.SPOOK.contains(hex);
- }
- return false;
- }
-
- public static DyeType checkDyeType(String hex) {
- if (Constants.CRYSTAL_HEXES.contains(hex)) {
- return DyeType.CRYSTAL;
- }
- if (Constants.FAIRY_HEXES.contains(hex)) {
- return DyeType.FAIRY;
- }
- if (Constants.OG_FAIRY_HEXES.contains(hex)) {
- return DyeType.OG_FAIRY;
- }
- if (Constants.SPOOK.contains(hex)) {
- return DyeType.SPOOK;
- }
- if (Constants.GLITCHED.contains(hex)) {
- return DyeType.GLITCHED;
- }
- return DyeType.EXOTIC;
- }
-
- public static boolean intendedDyed(NbtCompound customData) {
- return customData.contains("dye_item");
- }
-
- public 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;
-
- DyeType(String name, Formatting formatting) {
- this.name = name;
- this.formatting = formatting;
- }
-
- @Override
- public String asString() {
- return name;
- }
-
- public MutableText getTranslatedText() {
- return Text.translatable("skyblocker.exotic." + name).formatted(formatting);
- }
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
index 1f1412d4..041e9762 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
@@ -12,8 +12,6 @@ import de.hysky.skyblocker.utils.scheduler.Scheduler;
import it.unimi.dsi.fastutil.Pair;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipType;
-import net.minecraft.component.DataComponentTypes;
-import net.minecraft.component.type.DyedColorComponent;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
@@ -123,34 +121,7 @@ public class ItemTooltip {
- if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && stack.contains(DataComponentTypes.DYED_COLOR)) {
- String uuid = ItemUtils.getItemUuid(stack);
- boolean hasCustomDye = SkyblockerConfigManager.get().general.customDyeColors.containsKey(uuid) || SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(uuid);
- //DyedColorComponent#getColor returns ARGB so we mask out the alpha bits
- int dyeColor = DyedColorComponent.getColor(stack, 0);
- // dyeColor will have alpha = 255 if it's dyed, and alpha = 0 if it's not dyed,
- if (!hasCustomDye && dyeColor != 0) {
- dyeColor = dyeColor & 0x00FFFFFF;
- String colorHex = String.format("%06X", dyeColor);
- String expectedHex = ExoticTooltip.getExpectedHex(internalID);
-
- boolean correctLine = false;
- for (Text text : lines) {
- String existingTooltip = text.getString() + " ";
- if (existingTooltip.startsWith("Color: ")) {
- correctLine = true;
-
- addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, existingTooltip);
- break;
- }
- }
-
- if (!correctLine) {
- addExoticTooltip(lines, internalID, ItemUtils.getCustomData(stack), colorHex, expectedHex, "");
- }
- }
- }
if (TooltipInfoType.ACCESSORIES.isTooltipEnabledAndHasOrNullWarning(internalID)) {
Pair<AccessoryReport, String> report = AccessoriesHelper.calculateReport4Accessory(internalID);
@@ -200,12 +171,6 @@ public class ItemTooltip {
return neuName;
}
- private static void addExoticTooltip(List<Text> lines, String internalID, NbtCompound customData, String colorHex, String expectedHex, String existingTooltip) {
- if (expectedHex != null && !colorHex.equalsIgnoreCase(expectedHex) && !ExoticTooltip.isException(internalID, colorHex) && !ExoticTooltip.intendedDyed(customData)) {
- final ExoticTooltip.DyeType type = ExoticTooltip.checkDyeType(colorHex);
- lines.add(1, Text.literal(existingTooltip + Formatting.DARK_GRAY + "(").append(type.getTranslatedText()).append(Formatting.DARK_GRAY + ")"));
- }
- }
public static void nullWarning() {
if (!sentNullWarning && client.player != null) {
diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/ColorTooltip.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/ColorTooltip.java
new file mode 100644
index 00000000..5908f4e8
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/ColorTooltip.java
@@ -0,0 +1,135 @@
+package de.hysky.skyblocker.utils.tooltip;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
+import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;
+import de.hysky.skyblocker.utils.Constants;
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.DyedColorComponent;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NbtCompound;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.StringIdentifiable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class ColorTooltip extends TooltipAdder {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ColorTooltip.class);
+
+ public ColorTooltip(int priority) {
+ super(priority);
+ }
+
+ @Override
+ public void addToTooltip(List<Text> lore, Slot focusedSlot) {
+ final ItemStack itemStack = focusedSlot.getStack();
+ final String internalID = ItemTooltip.getInternalNameFromNBT(itemStack, true);
+ if (TooltipInfoType.COLOR.isTooltipEnabledAndHasOrNullWarning(internalID) && itemStack.contains(DataComponentTypes.DYED_COLOR)) {
+ String uuid = ItemUtils.getItemUuid(itemStack);
+ boolean hasCustomDye = SkyblockerConfigManager.get().general.customDyeColors.containsKey(uuid) || SkyblockerConfigManager.get().general.customAnimatedDyes.containsKey(uuid);
+ //DyedColorComponent#getColor returns ARGB so we mask out the alpha bits
+ int dyeColor = DyedColorComponent.getColor(itemStack, 0);
+
+ // dyeColor will have alpha = 255 if it's dyed, and alpha = 0 if it's not dyed,
+ if (!hasCustomDye && dyeColor != 0) {
+ dyeColor = dyeColor & 0x00FFFFFF;
+ String colorHex = String.format("%06X", dyeColor);
+ String expectedHex = getExpectedHex(internalID);
+
+ boolean correctLine = false;
+ for (Text text : lore) {
+ String existingTooltip = text.getString() + " ";
+ if (existingTooltip.startsWith("Color: ")) {
+ correctLine = true;
+
+ addExoticTooltip(lore, internalID, ItemUtils.getCustomData(itemStack), colorHex, expectedHex, existingTooltip);
+ break;
+ }
+ }
+
+ if (!correctLine) {
+ addExoticTooltip(lore, internalID, ItemUtils.getCustomData(itemStack), 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 + ")"));
+ }
+ }
+
+ public static String getExpectedHex(String id) {
+ String color = TooltipInfoType.COLOR.getData().get(id).getAsString();
+ if (color != null) {
+ String[] RGBValues = color.split(",");
+ return String.format("%02X%02X%02X", Integer.parseInt(RGBValues[0]), Integer.parseInt(RGBValues[1]), Integer.parseInt(RGBValues[2]));
+ } else {
+ LOGGER.warn("[Skyblocker Exotics] No expected color data found for id {}", id);
+ return null;
+ }
+ }
+
+ public 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);
+ case String it when it.contains("ADAPTIVE_CHESTPLATE") -> Constants.ADAPTIVE_CHEST.contains(hex);
+ case String it when it.contains("ADAPTIVE") -> Constants.ADAPTIVE.contains(hex);
+ case String it when it.contains("REAPER") -> Constants.REAPER.contains(hex);
+ case String it when it.contains("FAIRY") -> Constants.FAIRY_HEXES.contains(hex);
+ case String it when it.contains("CRYSTAL") -> Constants.CRYSTAL_HEXES.contains(hex);
+ case String it when it.contains("SPOOK") -> Constants.SPOOK.contains(hex);
+ default -> false;
+ };
+ }
+
+ public static DyeType checkDyeType(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;
+ default -> DyeType.EXOTIC;
+ };
+ }
+
+ public static boolean intendedDyed(NbtCompound customData) {
+ return customData.contains("dye_item");
+ }
+
+ public 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;
+
+ DyeType(String name, Formatting formatting) {
+ this.name = name;
+ this.formatting = formatting;
+ }
+
+ @Override
+ public String asString() {
+ return name;
+ }
+
+ public MutableText getTranslatedText() {
+ return Text.translatable("skyblocker.exotic." + name).formatted(formatting);
+ }
+ }
+
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
index dcad236f..b5f44405 100644
--- a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
@@ -17,6 +17,7 @@ public class TooltipManager {
new DungeonQualityTooltip(0),
new ObtainedTooltip(3),
new MuseumTooltip(4),
+ new ColorTooltip(5),
new MotesTooltip(0),
new NpcPriceTooltip(1)
};