aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-28 20:06:50 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-06-08 04:13:47 +0300
commit4015ba2f5d79ece643a97c457d2c663f8ef519e7 (patch)
tree0b0fd73dd9d4bb3595882267a80d3ffcb44f1a18 /src
parenta0bc7dc00f47cf1986120b47ccb23f6116660dda (diff)
downloadSkyblocker-4015ba2f5d79ece643a97c457d2c663f8ef519e7.tar.gz
Skyblocker-4015ba2f5d79ece643a97c457d2c663f8ef519e7.tar.bz2
Skyblocker-4015ba2f5d79ece643a97c457d2c663f8ef519e7.zip
Refactor obtained date tooltip
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java41
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/ObtainedTooltip.java71
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java3
-rw-r--r--src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java9
5 files changed, 78 insertions, 55 deletions
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 5183e901..a008fcf9 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
@@ -135,15 +135,6 @@ public class ItemTooltip {
.append(getMotesMessage(TooltipInfoType.MOTES.getData().get(internalID).getAsInt(), count)));
}
- if (TooltipInfoType.OBTAINED.isTooltipEnabled()) {
- String timestamp = ItemUtils.getTimestamp(stack);
-
- if (!timestamp.isEmpty()) {
- lines.add(Text.literal(String.format("%-21s", "Obtained: "))
- .formatted(Formatting.LIGHT_PURPLE)
- .append(Text.literal(timestamp).formatted(Formatting.RED)));
- }
- }
if (TooltipInfoType.MUSEUM.isTooltipEnabledAndHasOrNullWarning(internalID) && !bazaarOpened) {
String itemCategory = TooltipInfoType.MUSEUM.getData().get(internalID).getAsString();
diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
index 13b28808..fbc9bddc 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
@@ -20,7 +20,6 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
-import net.minecraft.nbt.NbtElement;
import net.minecraft.registry.Registries;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.text.Text;
@@ -29,13 +28,7 @@ import net.minecraft.util.dynamic.Codecs;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.TemporalAccessor;
-import java.util.Iterator;
import java.util.List;
-import java.util.Locale;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.regex.Matcher;
@@ -46,8 +39,6 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit
public class ItemUtils {
public static final String ID = "id";
public static final String UUID = "uuid";
- 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 static final Pattern NOT_DURABILITY = Pattern.compile("[^0-9 /]");
public static final Predicate<String> FUEL_PREDICATE = line -> line.contains("Fuel: ");
private static final Codec<RegistryEntry<Item>> EMPTY_ALLOWING_ITEM_CODEC = Registries.ITEM.getEntryCodec();
@@ -111,38 +102,6 @@ public class ItemUtils {
return getCustomData(stack).getString(UUID);
}
- /**
- * 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.
- * <p>
- * 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 = 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 "";
- }
-
public static boolean hasCustomDurability(@NotNull ItemStack stack) {
NbtCompound customData = getCustomData(stack);
return customData != null && (customData.contains("drill_fuel") || customData.getString(ID).equals("PICKONIMBUS"));
diff --git a/src/main/java/de/hysky/skyblocker/utils/tooltip/ObtainedTooltip.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/ObtainedTooltip.java
new file mode 100644
index 00000000..f6bcd2f2
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/ObtainedTooltip.java
@@ -0,0 +1,71 @@
+package de.hysky.skyblocker.utils.tooltip;
+
+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);
+
+ protected ObtainedTooltip(int priority) {
+ super(priority);
+ }
+
+ @Override
+ public void addToTooltip(List<Text> 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.
+ * <p>
+ * 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/utils/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
index 82f02445..e71ec115 100644
--- a/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/tooltip/TooltipManager.java
@@ -13,7 +13,8 @@ import java.util.List;
public class TooltipManager {
private static final TooltipAdder[] adders = new TooltipAdder[]{
new LineSmoothener(),
- new DungeonQualityTooltip(0)
+ new DungeonQualityTooltip(0),
+ new ObtainedTooltip(1),
};
private static final ArrayList<TooltipAdder> currentScreenAdders = new ArrayList<>();
diff --git a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java
index 0f9f0e56..92419624 100644
--- a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java
+++ b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java
@@ -2,6 +2,7 @@ package de.hysky.skyblocker.utils;
import com.google.gson.JsonParser;
import com.mojang.serialization.JsonOps;
+import de.hysky.skyblocker.utils.tooltip.ObtainedTooltip;
import it.unimi.dsi.fastutil.ints.IntIntPair;
import net.minecraft.Bootstrap;
import net.minecraft.SharedConstants;
@@ -48,10 +49,10 @@ public class ItemUtilsTest {
@Test
void testGetTimestamp() {
- Assertions.assertEquals("February 5, 2022", ItemUtils.getTimestamp(DARK_CLAYMORE_OLD));
- Assertions.assertEquals("December 16, 2022", ItemUtils.getTimestamp(DARK_CLAYMORE)); // The timestamp is 1671157200000 which is December 16, 2022 in UTC
- Assertions.assertEquals("April 12, 2024", ItemUtils.getTimestamp(TITANIUM_DRILL_DR_X655));
- Assertions.assertEquals("March 1, 2021", ItemUtils.getTimestamp(ASTRAEA));
+ 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));
}
@Test