aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
diff options
context:
space:
mode:
authoralexia <me@alexia.lol>2023-10-07 00:59:15 +0200
committeralexia <me@alexia.lol>2023-10-07 10:51:45 +0200
commit95faf143b98d5d5edc3c711e4d22e5f2115119a7 (patch)
tree73b70275ab99747adbc8b03f3042d1f7ab5215f2 /src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
parent7e2e9cf55f61e2b687eff0164483430d290da666 (diff)
downloadSkyblocker-95faf143b98d5d5edc3c711e4d22e5f2115119a7.tar.gz
Skyblocker-95faf143b98d5d5edc3c711e4d22e5f2115119a7.tar.bz2
Skyblocker-95faf143b98d5d5edc3c711e4d22e5f2115119a7.zip
Hook actual durability for Pickonimbus/Drills
Instead of the previous DrawContext hack. Confirmed working with Durability Notifier on Fabric 1.20.2.
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
index 5c12b777..0be4d403 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
@@ -1,11 +1,15 @@
package me.xmrvizzy.skyblocker.utils;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.StringNbtReader;
import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
@@ -15,6 +19,56 @@ import java.util.regex.Pattern;
public class ItemUtils {
private final static Pattern WHITESPACES = Pattern.compile("^\\s*$");
+ public record Durability(int current, int max) {
+ }
+
+ @Nullable
+ public static Durability getDurability(ItemStack stack) {
+ if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) {
+ return null;
+ }
+
+ NbtCompound tag = stack.getNbt();
+ if (tag == null || !tag.contains("ExtraAttributes")) {
+ return null;
+ }
+
+ NbtCompound extraAttributes = tag.getCompound("ExtraAttributes");
+ if (!extraAttributes.contains("drill_fuel") && !extraAttributes.getString("id").equals("PICKONIMBUS")) {
+ return null;
+ }
+
+ int current = 0;
+ int max = 0;
+ String clearFormatting = "";
+
+ for (String line : ItemUtils.getTooltipStrings(stack)) {
+ clearFormatting = Formatting.strip(line);
+ if (line.contains("Fuel: ")) {
+ if (clearFormatting != null) {
+ String clear = Pattern.compile("[^0-9 /]").matcher(clearFormatting).replaceAll("").trim();
+ String[] split = clear.split("/");
+ current = Integer.parseInt(split[0]);
+ max = Integer.parseInt(split[1]) * 1000;
+ return new Durability(current, max);
+ }
+ } else if (line.contains("uses.")) {
+ if (clearFormatting != null) {
+ int startIndex = clearFormatting.lastIndexOf("after") + 6;
+ int endIndex = clearFormatting.indexOf("uses", startIndex);
+ if (startIndex >= 0 && endIndex > startIndex) {
+ String usesString = clearFormatting.substring(startIndex, endIndex).trim();
+ current = Integer.parseInt(usesString);
+ max = 5000;
+ }
+ return new Durability(current, max);
+ }
+ }
+ }
+
+ return null;
+ }
+
public static List<Text> getTooltip(ItemStack item) {
MinecraftClient client = MinecraftClient.getInstance();
return client.player == null || item == null ? Collections.emptyList() : item.getTooltip(client.player, TooltipContext.Default.BASIC);