aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-12-28 17:14:18 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-12-28 17:14:18 +0800
commit45a4e2eabc96555ea1b66c94490b90f25d18d7c8 (patch)
treead0d6bd2aa43a0f8c7bb4012b1961703c3b2d7dd /src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
parent92c2907f6cb486baa7659ecc24d846b39821e5be (diff)
downloadSkyblocker-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.java64
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=\"}]}}}}"));