Skip to content

Commit

Permalink
Use the DFU to convert item nbt to components
Browse files Browse the repository at this point in the history
  • Loading branch information
UnlikePaladin committed Apr 4, 2024
1 parent 104221c commit bdf5a91
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
23 changes: 23 additions & 0 deletions common/src/main/java/org/figuramc/figura/utils/LuaUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,18 @@
import com.google.gson.*;
import com.mojang.brigadier.StringReader;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.commands.arguments.SlotArgument;
import net.minecraft.commands.arguments.blocks.BlockStateArgument;
import net.minecraft.commands.arguments.item.ItemArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.nbt.TagParser;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.datafix.fixes.ItemStackComponentizationFix;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
Expand All @@ -19,6 +25,7 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;

import org.figuramc.figura.lua.api.json.FiguraJsonSerializer;
import org.figuramc.figura.lua.api.world.BlockStateAPI;
Expand Down Expand Up @@ -222,6 +229,22 @@ else if (item instanceof ItemStackAPI wrapper)
else if (item instanceof String string) {
try {
Level level = WorldAPI.getCurrentWorld();
// Use the DFU only if necessary to convert item nbt -> components
if (string.contains("{")) {
String tagStr = string.substring(string.indexOf("{"));
CompoundTag nbtItem = new TagParser(new StringReader(tagStr)).readStruct();
CompoundTag tag = new CompoundTag();
tag.putString("id", ResourceLocation.read(new StringReader(string)).toString());
tag.putInt("Count", 1);
tag.put("tag", nbtItem);
Dynamic<Tag> ops = new Dynamic<>(NbtOps.INSTANCE, tag);
Optional<ItemStackComponentizationFix.ItemStackData> optionalItemStackData = ItemStackComponentizationFix.ItemStackData.read(ops);
if (optionalItemStackData.isPresent()) {
ItemStackComponentizationFix.ItemStackData data = optionalItemStackData.get();
ItemStackComponentizationFix.fixItemStack(data, data.tag);
return ItemStack.parse(level.registryAccess(), data.write().cast(NbtOps.INSTANCE)).orElse(ItemArgument.item(CommandBuildContext.simple(level.registryAccess(), level.enabledFeatures())).parse(new StringReader(string)).createItemStack(1, false));
}
}
return ItemArgument.item(CommandBuildContext.simple(level.registryAccess(), level.enabledFeatures())).parse(new StringReader(string)).createItemStack(1, false);
} catch (Exception e) {
throw new LuaError("Could not parse item stack from string: " + string);
Expand Down
4 changes: 4 additions & 0 deletions common/src/main/resources/figura.accesswidener
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ accessible method net/minecraft/client/gui/components/AbstractScrollWidget getSc

accessible method net/minecraft/client/gui/Font renderText (Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F
extendable method net/minecraft/client/gui/Font renderText (Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F

accessible class net/minecraft/util/datafix/fixes/ItemStackComponentizationFix$ItemStackData
accessible method net/minecraft/util/datafix/fixes/ItemStackComponentizationFix fixItemStack (Lnet/minecraft/util/datafix/fixes/ItemStackComponentizationFix$ItemStackData;Lcom/mojang/serialization/Dynamic;)V
accessible field net/minecraft/util/datafix/fixes/ItemStackComponentizationFix$ItemStackData tag Lcom/mojang/serialization/Dynamic;

0 comments on commit bdf5a91

Please sign in to comment.