From 95faf143b98d5d5edc3c711e4d22e5f2115119a7 Mon Sep 17 00:00:00 2001 From: alexia Date: Sat, 7 Oct 2023 00:59:15 +0200 Subject: Hook actual durability for Pickonimbus/Drills Instead of the previous DrawContext hack. Confirmed working with Durability Notifier on Fabric 1.20.2. --- .../me/xmrvizzy/skyblocker/utils/ItemUtils.java | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') 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 getTooltip(ItemStack item) { MinecraftClient client = MinecraftClient.getInstance(); return client.player == null || item == null ? Collections.emptyList() : item.getTooltip(client.player, TooltipContext.Default.BASIC); -- cgit From a7c361260a2a104261cf301125b4c81c615334f0 Mon Sep 17 00:00:00 2001 From: alexia Date: Sat, 7 Oct 2023 17:28:14 +0200 Subject: Apply suggestions from code review Co-authored-by: Kevin <92656833+kevinthegreat1@users.noreply.github.com> --- src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java | 6 +++--- src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java index b235956a..280c01ba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java @@ -34,7 +34,7 @@ public abstract class ItemStackMixin { } @ModifyReturnValue(method = "getDamage", at = @At("RETURN")) - private int skyblocker$handlePickoDrillDamage(int original) { + private int skyblocker$handleDamage(int original) { Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); if (dur != null) { return dur.max() - dur.current(); @@ -43,7 +43,7 @@ public abstract class ItemStackMixin { } @ModifyReturnValue(method = "getMaxDamage", at = @At("RETURN")) - private int skyblocker$handlePickoDrillMaxDamage(int original) { + private int skyblocker$handleMaxDamage(int original) { Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); if (dur != null) { return dur.max(); @@ -52,7 +52,7 @@ public abstract class ItemStackMixin { } @ModifyReturnValue(method = "isDamageable", at = @At("RETURN")) - private boolean skyblocker$handlePickoDrillDamageable(boolean original) { + private boolean skyblocker$handleDamageable(boolean original) { Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); if (dur != null) { return true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java index 0be4d403..0d227bc3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java @@ -40,7 +40,7 @@ public class ItemUtils { int current = 0; int max = 0; - String clearFormatting = ""; + String clearFormatting; for (String line : ItemUtils.getTooltipStrings(stack)) { clearFormatting = Formatting.strip(line); -- cgit From bc22e75e2eac6526cd7dc8ec99f32469ee4cc5d7 Mon Sep 17 00:00:00 2001 From: alexia Date: Sat, 7 Oct 2023 17:29:29 +0200 Subject: Address further review comments --- .../me/xmrvizzy/skyblocker/utils/ItemUtils.java | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java index 0d227bc3..30c20524 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java @@ -19,7 +19,22 @@ import java.util.regex.Pattern; public class ItemUtils { private final static Pattern WHITESPACES = Pattern.compile("^\\s*$"); - public record Durability(int current, int max) { + public static List getTooltip(ItemStack item) { + MinecraftClient client = MinecraftClient.getInstance(); + return client.player == null || item == null ? Collections.emptyList() : item.getTooltip(client.player, TooltipContext.Default.BASIC); + } + + public static List getTooltipStrings(ItemStack item) { + List lines = getTooltip(item); + List list = new ArrayList<>(); + + for (Text line : lines) { + String string = line.getString(); + if (!WHITESPACES.matcher(string).matches()) + list.add(string); + } + + return list; } @Nullable @@ -69,24 +84,6 @@ public class ItemUtils { return null; } - public static List getTooltip(ItemStack item) { - MinecraftClient client = MinecraftClient.getInstance(); - return client.player == null || item == null ? Collections.emptyList() : item.getTooltip(client.player, TooltipContext.Default.BASIC); - } - - public static List getTooltipStrings(ItemStack item) { - List lines = getTooltip(item); - List list = new ArrayList<>(); - - for (Text line : lines) { - String string = line.getString(); - if (!WHITESPACES.matcher(string).matches()) - list.add(string); - } - - return list; - } - public static ItemStack getSkyblockerStack() { try { return ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}")); @@ -94,4 +91,7 @@ public class ItemUtils { throw new RuntimeException(e); } } + + public record Durability(int current, int max) { + } } -- cgit