diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2024-06-10 12:12:29 +0800 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-10 12:12:29 +0800 | 
| commit | c29b55bc64fdf8717b42f1a5f7e0d18895007fb3 (patch) | |
| tree | 382a7d4f3fa4b40fcbfe2c752cf581c36382bc52 /src/main/java/de/hysky/skyblocker/utils | |
| parent | ec1c0104a17d9e3a5741efa38528d628b53d940d (diff) | |
| parent | 48430e36a87c09e033c0bd43e65b70bbac0e2664 (diff) | |
| download | Skyblocker-c29b55bc64fdf8717b42f1a5f7e0d18895007fb3.tar.gz Skyblocker-c29b55bc64fdf8717b42f1a5f7e0d18895007fb3.tar.bz2 Skyblocker-c29b55bc64fdf8717b42f1a5f7e0d18895007fb3.zip | |
Merge pull request #735 from Emirlol/tooltips-galore
Tooltip refactors
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils')
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/utils/ItemUtils.java | 23 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java | 54 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/utils/Utils.java | 3 | 
3 files changed, 57 insertions, 23 deletions
| diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 8a6127c7..b1708404 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -10,6 +10,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;  import com.mojang.serialization.Codec;  import com.mojang.serialization.JsonOps;  import com.mojang.serialization.codecs.RecordCodecBuilder; +import de.hysky.skyblocker.skyblock.item.tooltip.adders.ObtainedDateTooltip;  import de.hysky.skyblocker.SkyblockerMod;  import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType;  import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair; @@ -25,7 +26,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; @@ -34,13 +34,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; @@ -51,8 +45,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(); @@ -166,21 +158,12 @@ public class ItemUtils {       *       * @param stack the item under the pointer       * @return if the item have a "Timestamp" it will be shown formated on the tooltip +     * @deprecated use {@link ObtainedDateTooltip#getTimestamp(ItemStack)} instead       */      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 ""; +        return ObtainedDateTooltip.getTimestamp(stack);      }      public static boolean hasCustomDurability(@NotNull ItemStack stack) { diff --git a/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java new file mode 100644 index 00000000..007cb0b1 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/RomanNumerals.java @@ -0,0 +1,54 @@ +package de.hysky.skyblocker.utils; + +public class RomanNumerals { +	private RomanNumerals() { +	} +	private static int getDecimalValue(char romanChar) { +		return switch (romanChar) { +			case 'I' -> 1; +			case 'V' -> 5; +			case 'X' -> 10; +			case 'L' -> 50; +			case 'C' -> 100; +			case 'D' -> 500; +			case 'M' -> 1000; +			default -> 0; +		}; +	} + +	/** +	 * Checks if a string is a valid roman numeral. +	 * It's the caller's responsibility to clean up the string before calling this method (such as trimming it). +	 * @param romanNumeral The roman numeral to check. +	 * @return True if the string is a valid roman numeral, false otherwise. +	 * @implNote This will only check if the string contains valid roman numeral characters. It won't check if the numeral is well-formed. +	 */ +	public static boolean isValidRomanNumeral(String romanNumeral) { +		if (romanNumeral == null || romanNumeral.isEmpty()) return false; +		for (int i = 0; i < romanNumeral.length(); i++) { +			if (getDecimalValue(romanNumeral.charAt(i)) == 0) return false; +		} +		return true; +	} + +	/** +	 * Converts a roman numeral to a decimal number. +	 * +	 * @param romanNumeral The roman numeral to convert. +	 * @return The decimal number, or 0 if the roman numeral string has non-roman characters in it, or if the string is empty or null. +	 */ +	public static int romanToDecimal(String romanNumeral) { +		if (romanNumeral == null || romanNumeral.isEmpty()) return 0; +		romanNumeral = romanNumeral.trim().toUpperCase(); +		int decimal = 0; +		int lastNumber = 0; +		for (int i = romanNumeral.length() - 1; i >= 0; i--) { +			char ch = romanNumeral.charAt(i); +			int number = getDecimalValue(ch); +			if (number == 0) return 0; //Malformed roman numeral +			decimal = number >= lastNumber ? decimal + number : decimal - number; +			lastNumber = number; +		} +		return decimal; +	} +} diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 7c28294f..925879b8 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -5,11 +5,9 @@ import com.google.gson.JsonParser;  import de.hysky.skyblocker.events.SkyblockEvents;  import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor;  import de.hysky.skyblocker.skyblock.item.MuseumItemCache; -import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;  import de.hysky.skyblocker.utils.scheduler.MessageScheduler;  import de.hysky.skyblocker.utils.scheduler.Scheduler;  import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;  import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;  import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;  import net.fabricmc.fabric.api.networking.v1.PacketSender; @@ -235,7 +233,6 @@ public class Utils {                  if (!isOnSkyblock) {                      if (!isInjected) {                          isInjected = true; -                        ItemTooltipCallback.EVENT.register(ItemTooltip::getTooltip);                      }                      isOnSkyblock = true;                      SkyblockEvents.JOIN.invoker().onSkyblockJoin(); | 
