From b8682b30ba5d4cd4efdbef74681f6f4fb9c207d7 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Wed, 29 May 2024 13:46:13 +0300 Subject: Rename ObtainedTooltip to ObtainedDateTooltip --- .../skyblock/item/tooltip/TooltipManager.java | 2 +- .../item/tooltip/adders/ObtainedDateTooltip.java | 71 ++++++++++++++++++++++ .../item/tooltip/adders/ObtainedTooltip.java | 71 ---------------------- .../de/hysky/skyblocker/utils/ItemUtilsTest.java | 10 +-- 4 files changed, 77 insertions(+), 77 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedTooltip.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 90dc48d6..6108dbf8 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 @@ -20,7 +20,7 @@ public class TooltipManager { new AvgBinTooltip(4), //Has to come after lbin price new DungeonQualityTooltip(5), new MotesTooltip(6), - new ObtainedTooltip(7), + new ObtainedDateTooltip(7), new MuseumTooltip(8), new ColorTooltip(9), new AccessoryTooltip(10), 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 new file mode 100644 index 00000000..03254225 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedDateTooltip.java @@ -0,0 +1,71 @@ +package de.hysky.skyblocker.skyblock.item.tooltip.adders; + +import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAccessor; +import java.util.List; +import java.util.Locale; + +public class ObtainedDateTooltip extends TooltipAdder { + private static final DateTimeFormatter OBTAINED_DATE_FORMATTER = DateTimeFormatter.ofPattern("MMMM d, yyyy").withZone(ZoneId.systemDefault()).localizedBy(Locale.ENGLISH); + private static final DateTimeFormatter OLD_OBTAINED_DATE_FORMAT = DateTimeFormatter.ofPattern("M/d/yy h:m a").withZone(ZoneId.of("UTC")).localizedBy(Locale.ENGLISH); + + public ObtainedDateTooltip(int priority) { + super(priority); + } + + @Override + public void addToTooltip(List lore, Slot focusedSlot) { + if (TooltipInfoType.OBTAINED.isTooltipEnabled()) { + String timestamp = getTimestamp(focusedSlot.getStack()); + + if (!timestamp.isEmpty()) { + lore.add(Text.empty() + .append(Text.literal(String.format("%-21s", "Obtained: ")).formatted(Formatting.LIGHT_PURPLE)) + .append(Text.literal(timestamp).formatted(Formatting.RED))); + } + } + } + + /** + * 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 + * "dd/MM/yy hh:mm" ("25/04/20 16:38") and the current which is built like this + * "MM/dd/yy hh:mm aa" ("12/24/20 11:08 PM"). Since Hypixel transforms the two formats into one format without + * taking into account of their formats, we do the same. The final result looks like this + * "MMMM dd, yyyy" (December 24, 2020). + * Since the legacy format has a 25 as "month" SimpleDateFormat converts the 25 into 2 years and 1 month and makes + * "25/04/20 16:38" -> "January 04, 2022" instead of "April 25, 2020". + * This causes the museum rank to be much worse than it should be. + *

+ * This also handles the long timestamp format introduced in January 2024 where the timestamp is in epoch milliseconds. + * + * @param stack the item under the pointer + * @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); + } + + 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 ""; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedTooltip.java deleted file mode 100644 index 24a31211..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/ObtainedTooltip.java +++ /dev/null @@ -1,71 +0,0 @@ -package de.hysky.skyblocker.skyblock.item.tooltip.adders; - -import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; -import de.hysky.skyblocker.utils.ItemUtils; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -import java.time.Instant; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.time.temporal.TemporalAccessor; -import java.util.List; -import java.util.Locale; - -public class ObtainedTooltip extends TooltipAdder { - private static final DateTimeFormatter OBTAINED_DATE_FORMATTER = DateTimeFormatter.ofPattern("MMMM d, yyyy").withZone(ZoneId.systemDefault()).localizedBy(Locale.ENGLISH); - private static final DateTimeFormatter OLD_OBTAINED_DATE_FORMAT = DateTimeFormatter.ofPattern("M/d/yy h:m a").withZone(ZoneId.of("UTC")).localizedBy(Locale.ENGLISH); - - public ObtainedTooltip(int priority) { - super(priority); - } - - @Override - public void addToTooltip(List lore, Slot focusedSlot) { - if (TooltipInfoType.OBTAINED.isTooltipEnabled()) { - String timestamp = getTimestamp(focusedSlot.getStack()); - - if (!timestamp.isEmpty()) { - lore.add(Text.empty() - .append(Text.literal(String.format("%-21s", "Obtained: ")).formatted(Formatting.LIGHT_PURPLE)) - .append(Text.literal(timestamp).formatted(Formatting.RED))); - } - } - } - - /** - * 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 - * "dd/MM/yy hh:mm" ("25/04/20 16:38") and the current which is built like this - * "MM/dd/yy hh:mm aa" ("12/24/20 11:08 PM"). Since Hypixel transforms the two formats into one format without - * taking into account of their formats, we do the same. The final result looks like this - * "MMMM dd, yyyy" (December 24, 2020). - * Since the legacy format has a 25 as "month" SimpleDateFormat converts the 25 into 2 years and 1 month and makes - * "25/04/20 16:38" -> "January 04, 2022" instead of "April 25, 2020". - * This causes the museum rank to be much worse than it should be. - *

- * This also handles the long timestamp format introduced in January 2024 where the timestamp is in epoch milliseconds. - * - * @param stack the item under the pointer - * @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); - } - - 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 ""; - } -} diff --git a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java index 9bc8c268..944df116 100644 --- a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java +++ b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java @@ -2,7 +2,7 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonParser; import com.mojang.serialization.JsonOps; -import de.hysky.skyblocker.skyblock.item.tooltip.adders.ObtainedTooltip; +import de.hysky.skyblocker.skyblock.item.tooltip.adders.ObtainedDateTooltip; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; @@ -49,10 +49,10 @@ public class ItemUtilsTest { @Test void testGetTimestamp() { - Assertions.assertEquals("February 5, 2022", ObtainedTooltip.getTimestamp(DARK_CLAYMORE_OLD)); - Assertions.assertEquals("December 16, 2022", ObtainedTooltip.getTimestamp(DARK_CLAYMORE)); // The timestamp is 1671157200000 which is December 16, 2022 in UTC - Assertions.assertEquals("April 12, 2024", ObtainedTooltip.getTimestamp(TITANIUM_DRILL_DR_X655)); - Assertions.assertEquals("March 1, 2021", ObtainedTooltip.getTimestamp(ASTRAEA)); + Assertions.assertEquals("February 5, 2022", ObtainedDateTooltip.getTimestamp(DARK_CLAYMORE_OLD)); + Assertions.assertEquals("December 16, 2022", ObtainedDateTooltip.getTimestamp(DARK_CLAYMORE)); // The timestamp is 1671157200000 which is December 16, 2022 in UTC + Assertions.assertEquals("April 12, 2024", ObtainedDateTooltip.getTimestamp(TITANIUM_DRILL_DR_X655)); + Assertions.assertEquals("March 1, 2021", ObtainedDateTooltip.getTimestamp(ASTRAEA)); } @Test -- cgit