aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/ItemStackAccessor.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ItemUtils.java46
2 files changed, 40 insertions, 20 deletions
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 6e80acea..eed91ed8 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java
@@ -3,20 +3,22 @@ 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.StringNbtReader;
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.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.regex.Pattern;
@@ -37,23 +39,6 @@ public class ItemUtils {
});
}
- public static List<Text> getTooltips(ItemStack item) {
- MinecraftClient client = MinecraftClient.getInstance();
- return client.player == null || item == null ? Collections.emptyList() : 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.
*
@@ -135,7 +120,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);
@@ -144,6 +129,27 @@ 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) {
+ NbtCompound displayNbt = item.getSubNbt("display");
+ if (displayNbt == null || !displayNbt.contains("Lore", NbtElement.LIST_TYPE)) {
+ return Collections.emptyList();
+ }
+
+ 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() {
try {
return ItemStack.fromNbt(StringNbtReader.parse("{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}"));