From 92c2907f6cb486baa7659ecc24d846b39821e5be Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:46:46 +0800 Subject: Add durability test --- src/main/java/de/hysky/skyblocker/utils/ItemUtils.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 6e80acea..5958ecb8 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -15,7 +15,6 @@ import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Predicate; @@ -39,7 +38,7 @@ public class ItemUtils { public static List getTooltips(ItemStack item) { MinecraftClient client = MinecraftClient.getInstance(); - return client.player == null || item == null ? Collections.emptyList() : item.getTooltip(client.player, TooltipContext.Default.BASIC); + return client == null ? item.getTooltip(null, TooltipContext.Default.BASIC) : item.getTooltip(client.player, TooltipContext.Default.BASIC); } @Nullable -- cgit From 45a4e2eabc96555ea1b66c94490b90f25d18d7c8 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 28 Dec 2023 17:14:18 +0800 Subject: Use nbt instead of item.getTooltip --- .../mixin/accessor/ItemStackAccessor.java | 14 +++++ .../java/de/hysky/skyblocker/utils/ItemUtils.java | 64 +++++++++++++++------- src/main/resources/skyblocker.mixins.json | 5 +- 3 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java new file mode 100644 index 00000000..e3bd69aa --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java @@ -0,0 +1,14 @@ +package de.hysky.skyblocker.mixin.accessor; + +import net.minecraft.item.ItemStack; +import net.minecraft.text.Style; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ItemStack.class) +public interface ItemStackAccessor { + @Accessor + static Style getLORE_STYLE() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 5958ecb8..41f0005e 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -3,19 +3,24 @@ package de.hysky.skyblocker.utils; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import de.hysky.skyblocker.mixin.accessor.ItemStackAccessor; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -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.NbtElement; +import net.minecraft.nbt.NbtList; import net.minecraft.nbt.StringNbtReader; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.text.Texts; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; import java.util.regex.Pattern; @@ -36,23 +41,6 @@ public class ItemUtils { }); } - public static List getTooltips(ItemStack item) { - MinecraftClient client = MinecraftClient.getInstance(); - return client == null ? item.getTooltip(null, TooltipContext.Default.BASIC) : item.getTooltip(client.player, TooltipContext.Default.BASIC); - } - - @Nullable - public static String getTooltip(ItemStack item, Predicate predicate) { - for (Text line : getTooltips(item)) { - String string = line.getString(); - if (predicate.test(string)) { - return string; - } - } - - return null; - } - /** * Gets the {@code ExtraAttributes} NBT tag from the item stack. * @@ -134,7 +122,7 @@ public class ItemUtils { return IntIntPair.of(pickonimbusDurability, 5000); } - String drillFuel = Formatting.strip(getTooltip(stack, FUEL_PREDICATE)); + String drillFuel = Formatting.strip(getNbtTooltip(stack, FUEL_PREDICATE)); if (drillFuel != null) { String[] drillFuelStrings = NOT_DURABILITY.matcher(drillFuel).replaceAll("").trim().split("/"); return IntIntPair.of(Integer.parseInt(drillFuelStrings[0]), Integer.parseInt(drillFuelStrings[1]) * 1000); @@ -143,6 +131,42 @@ public class ItemUtils { return null; } + @Nullable + public static String getNbtTooltip(ItemStack item, Predicate predicate) { + for (Text line : getNbtTooltips(item)) { + String string = line.getString(); + if (predicate.test(string)) { + return string; + } + } + + return null; + } + + public static List getNbtTooltips(ItemStack item) { + List tooltips = new ArrayList<>(); + + NbtCompound displayNbt = item.getSubNbt("display"); + if (displayNbt == null) { + return tooltips; + } + + if (displayNbt.contains("Lore", NbtElement.LIST_TYPE)) { + NbtList loreList = displayNbt.getList("Lore", NbtElement.STRING_TYPE); + + for (int i = 0; i < loreList.size(); i++) { + try { + MutableText loreText = Text.Serialization.fromJson(loreList.getString(i)); + if (loreText != null) { + tooltips.add(Texts.setStyleIfAbsent(loreText, ItemStackAccessor.getLORE_STYLE())); + } + } catch (Exception ignored) { + } + } + } + return tooltips; + } + 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=\"}]}}}}")); diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index b6308284..332d3f7b 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -44,5 +44,8 @@ ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + "accessor.ItemStackAccessor" + ] } -- cgit From dd0ae884f80fb74d9de680b7ea8339a33141e72f Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 30 Dec 2023 16:19:42 +0800 Subject: Use stream api --- .../java/de/hysky/skyblocker/utils/ItemUtils.java | 25 ++++------------------ 1 file changed, 4 insertions(+), 21 deletions(-) (limited to 'src/main/java/de/hysky') diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index 41f0005e..eed91ed8 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -9,16 +9,14 @@ import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; import net.minecraft.nbt.StringNbtReader; -import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.text.Texts; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -144,27 +142,12 @@ public class ItemUtils { } public static List getNbtTooltips(ItemStack item) { - List tooltips = new ArrayList<>(); - NbtCompound displayNbt = item.getSubNbt("display"); - if (displayNbt == null) { - return tooltips; + if (displayNbt == null || !displayNbt.contains("Lore", NbtElement.LIST_TYPE)) { + return Collections.emptyList(); } - if (displayNbt.contains("Lore", NbtElement.LIST_TYPE)) { - NbtList loreList = displayNbt.getList("Lore", NbtElement.STRING_TYPE); - - for (int i = 0; i < loreList.size(); i++) { - try { - MutableText loreText = Text.Serialization.fromJson(loreList.getString(i)); - if (loreText != null) { - tooltips.add(Texts.setStyleIfAbsent(loreText, ItemStackAccessor.getLORE_STYLE())); - } - } catch (Exception ignored) { - } - } - } - return tooltips; + return displayNbt.getList("Lore", NbtElement.STRING_TYPE).stream().map(NbtElement::asString).map(Text.Serialization::fromJson).filter(Objects::nonNull).map(text -> Texts.setStyleIfAbsent(text, ItemStackAccessor.getLORE_STYLE())).map(Text.class::cast).toList(); } public static ItemStack getSkyblockerStack() { -- cgit