diff options
author | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2023-12-28 17:14:18 +0800 |
---|---|---|
committer | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2023-12-28 17:14:18 +0800 |
commit | 45a4e2eabc96555ea1b66c94490b90f25d18d7c8 (patch) | |
tree | ad0d6bd2aa43a0f8c7bb4012b1961703c3b2d7dd /src/main/java/de/hysky/skyblocker/utils/ItemUtils.java | |
parent | 92c2907f6cb486baa7659ecc24d846b39821e5be (diff) | |
download | Skyblocker-45a4e2eabc96555ea1b66c94490b90f25d18d7c8.tar.gz Skyblocker-45a4e2eabc96555ea1b66c94490b90f25d18d7c8.tar.bz2 Skyblocker-45a4e2eabc96555ea1b66c94490b90f25d18d7c8.zip |
Use nbt instead of item.getTooltip
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils/ItemUtils.java')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/utils/ItemUtils.java | 64 |
1 files changed, 44 insertions, 20 deletions
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<Text> 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<String> 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<String> predicate) { + for (Text line : getNbtTooltips(item)) { + String string = line.getString(); + if (predicate.test(string)) { + return string; + } + } + + return null; + } + + public static List<Text> getNbtTooltips(ItemStack item) { + List<Text> 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=\"}]}}}}")); |