From 52439fc922bba0832e05a3faaa7fc4762808a0ff Mon Sep 17 00:00:00 2001 From: Mrbysco Date: Sun, 9 Jun 2024 14:10:04 +0200 Subject: [PATCH] Feed registry access where possible --- .../java/vazkii/patchouli/api/IVariable.java | 42 ++++++++++--------- .../patchouli/api/IVariableProvider.java | 4 +- .../patchouli/api/IVariableSerializer.java | 6 ++- .../vazkii/patchouli/api/VariableHelper.java | 6 ++- .../book/template/JsonVariableWrapper.java | 6 ++- .../book/template/TemplateInclusion.java | 11 +++-- .../book/template/VariableAssigner.java | 6 ++- .../template/test/EntityTestProcessor.java | 2 +- .../template/test/RecipeTestProcessor.java | 4 +- .../GenericArrayVariableSerializer.java | 10 +++-- .../IngredientVariableSerializer.java | 7 ++-- .../ItemStackArrayVariableSerializer.java | 15 ++++--- .../variable/ItemStackVariableSerializer.java | 12 +++--- .../TextComponentVariableSerializer.java | 10 ++--- .../book/template/variable/Variable.java | 8 +++- .../template/variable/VariableHelperImpl.java | 13 +++--- .../patchouli/common/util/ItemStackUtil.java | 4 +- 17 files changed, 95 insertions(+), 71 deletions(-) diff --git a/Xplat/src/main/java/vazkii/patchouli/api/IVariable.java b/Xplat/src/main/java/vazkii/patchouli/api/IVariable.java index ebf61a0c3..b8f4f9de9 100644 --- a/Xplat/src/main/java/vazkii/patchouli/api/IVariable.java +++ b/Xplat/src/main/java/vazkii/patchouli/api/IVariable.java @@ -7,6 +7,10 @@ import com.google.gson.JsonNull; import com.google.gson.JsonPrimitive; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; + import org.jetbrains.annotations.Nullable; import java.lang.reflect.Type; @@ -87,77 +91,77 @@ default boolean asBoolean(boolean def) { /** * Get this IVariable as a {@code Stream}, assuming it's backed by a JsonArray. */ - default Stream asStream() { + default Stream asStream(HolderLookup.Provider registries) { return StreamSupport.stream(unwrap().getAsJsonArray().spliterator(), false) - .map(IVariable::wrap); + .map((json) -> IVariable.wrap(json, registries)); } /** * Get this IVariable as a {@code List}, returning as singleton if it's not a JsonArray. */ - default Stream asStreamOrSingleton() { - return unwrap().isJsonArray() ? asStream() : Stream.of(this); + default Stream asStreamOrSingleton(HolderLookup.Provider registries) { + return unwrap().isJsonArray() ? asStream(registries) : Stream.of(this); } /** * Get this IVariable as a {@code List}, assuming it's backed by a JsonArray. */ - default List asList() { - return asStream().collect(Collectors.toList()); + default List asList(HolderLookup.Provider registries) { + return asStream(registries).collect(Collectors.toList()); } /** * Get this IVariable as a {@code List}, returning as singleton if it's not a JsonArray. */ - default List asListOrSingleton() { - return asStreamOrSingleton().collect(Collectors.toList()); + default List asListOrSingleton(HolderLookup.Provider registries) { + return asStreamOrSingleton(registries).collect(Collectors.toList()); } /** * Convenience method to create an IVariable from {@link VariableHelper#createFromObject}. */ - static IVariable from(@Nullable T object) { - return object != null ? VariableHelper.instance().createFromObject(object) : empty(); + static IVariable from(@Nullable T object, HolderLookup.Provider registries) { + return object != null ? VariableHelper.instance().createFromObject(object, registries) : empty(); } /** * Convenience method to create an IVariable from a JsonElement with {@link VariableHelper#createFromJson}. */ - static IVariable wrap(@Nullable JsonElement elem) { - return elem != null ? VariableHelper.instance().createFromJson(elem) : empty(); + static IVariable wrap(@Nullable JsonElement elem, HolderLookup.Provider registries) { + return elem != null ? VariableHelper.instance().createFromJson(elem, registries) : empty(); } /** * Convenience method to create an IVariable from a list of IVariables. */ - static IVariable wrapList(Iterable elems) { + static IVariable wrapList(Iterable elems, HolderLookup.Provider registries) { JsonArray arr = new JsonArray(); for (IVariable v : elems) { arr.add(v.unwrap()); } - return wrap(arr); + return wrap(arr, registries); } static IVariable wrap(@Nullable Number n) { - return n != null ? wrap(new JsonPrimitive(n)) : empty(); + return n != null ? wrap(new JsonPrimitive(n), RegistryAccess.EMPTY) : empty(); } static IVariable wrap(@Nullable Boolean b) { - return b != null ? wrap(new JsonPrimitive(b)) : empty(); + return b != null ? wrap(new JsonPrimitive(b), RegistryAccess.EMPTY) : empty(); } static IVariable wrap(@Nullable String s) { - return s != null ? wrap(new JsonPrimitive(s)) : empty(); + return s != null ? wrap(new JsonPrimitive(s), RegistryAccess.EMPTY) : empty(); } static IVariable empty() { - return wrap(JsonNull.INSTANCE); + return wrap(JsonNull.INSTANCE, RegistryAccess.EMPTY); } class Serializer implements JsonDeserializer { @Override public IVariable deserialize(JsonElement elem, Type t, JsonDeserializationContext c) { - return IVariable.wrap(elem); + return IVariable.wrap(elem, RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)); } } } diff --git a/Xplat/src/main/java/vazkii/patchouli/api/IVariableProvider.java b/Xplat/src/main/java/vazkii/patchouli/api/IVariableProvider.java index 932a41e87..af23dd2c4 100644 --- a/Xplat/src/main/java/vazkii/patchouli/api/IVariableProvider.java +++ b/Xplat/src/main/java/vazkii/patchouli/api/IVariableProvider.java @@ -1,5 +1,7 @@ package vazkii.patchouli.api; +import net.minecraft.core.HolderLookup; + /** * A provider of variables to a template. Probably a JSON. */ @@ -9,7 +11,7 @@ public interface IVariableProvider { * Gets the value assigned to the variable passed in. * May throw an exception if it doesn't exist. */ - IVariable get(String key); + IVariable get(String key, HolderLookup.Provider registries); /** * Returns if a variable exists or not. diff --git a/Xplat/src/main/java/vazkii/patchouli/api/IVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/api/IVariableSerializer.java index cbfe3b2e7..cbb9ffcf2 100644 --- a/Xplat/src/main/java/vazkii/patchouli/api/IVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/api/IVariableSerializer.java @@ -2,6 +2,8 @@ import com.google.gson.JsonElement; +import net.minecraft.core.HolderLookup; + /** * An instance of a class implementing this interface * provides conversions for the given type to/from {@link JsonElement}. @@ -12,10 +14,10 @@ public interface IVariableSerializer { /** * Deserialize an object of type T from JSON. */ - T fromJson(JsonElement json); + T fromJson(JsonElement json, HolderLookup.Provider registries); /** * Serialize an object of type T to JSON. */ - JsonElement toJson(T object); + JsonElement toJson(T object, HolderLookup.Provider registries); } diff --git a/Xplat/src/main/java/vazkii/patchouli/api/VariableHelper.java b/Xplat/src/main/java/vazkii/patchouli/api/VariableHelper.java index 0320aa2e5..7798036b9 100644 --- a/Xplat/src/main/java/vazkii/patchouli/api/VariableHelper.java +++ b/Xplat/src/main/java/vazkii/patchouli/api/VariableHelper.java @@ -3,6 +3,8 @@ import com.google.common.base.Suppliers; import com.google.gson.JsonElement; +import net.minecraft.core.HolderLookup; + import org.jetbrains.annotations.Nullable; import java.util.function.Supplier; @@ -30,14 +32,14 @@ static VariableHelper instance() { /** * Create an {@link IVariable} from a given object. */ - default IVariable createFromObject(T object) { + default IVariable createFromObject(T object, HolderLookup.Provider registries) { return null; } /** * Create an {@link IVariable} backed by the given {@link JsonElement}. */ - default IVariable createFromJson(JsonElement elem) { + default IVariable createFromJson(JsonElement elem, HolderLookup.Provider registries) { return null; } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/JsonVariableWrapper.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/JsonVariableWrapper.java index 6201aee08..fb1422dc6 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/JsonVariableWrapper.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/JsonVariableWrapper.java @@ -3,6 +3,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.minecraft.core.HolderLookup; + import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariableProvider; @@ -15,13 +17,13 @@ public JsonVariableWrapper(JsonObject source) { } @Override - public IVariable get(String key) { + public IVariable get(String key, HolderLookup.Provider registries) { JsonElement prim = source.get(key); if (prim == null) { throw new IllegalArgumentException("Attempted to get variable " + key + " when it's not present"); } - return IVariable.wrap(prim); + return IVariable.wrap(prim, registries); } @Override diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/TemplateInclusion.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/TemplateInclusion.java index 15a2b87ca..9939b5248 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/TemplateInclusion.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/TemplateInclusion.java @@ -4,6 +4,9 @@ import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.Level; import vazkii.patchouli.api.IComponentProcessor; @@ -87,7 +90,7 @@ public String qualifyName(String name) { String query = prefixed ? name.substring(1) : name; // if it's an upreference, return the upreference - String result = IVariable.wrap(localBindings.get(query)).asString(); + String result = IVariable.wrap(localBindings.get(query), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)).asString(); if (result.startsWith("#")) { return result.substring(1); } @@ -102,7 +105,7 @@ public IVariable attemptVariableLookup(String key) { if (key.startsWith("#")) { key = key.substring(1); } - IVariable result = IVariable.wrap(localBindings.get(key)); + IVariable result = IVariable.wrap(localBindings.get(key), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)); return result.asString().isEmpty() || isUpreference(result) ? null : result; } @@ -121,9 +124,9 @@ public boolean has(String key) { } @Override - public IVariable get(String key) { + public IVariable get(String key, HolderLookup.Provider registries) { IVariable vari = attemptVariableLookup(key); - return vari == null ? provider.get(qualifyName(key)) : vari; + return vari == null ? provider.get(qualifyName(key), registries) : vari; } }; } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/VariableAssigner.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/VariableAssigner.java index 1b98be9fc..cdd61ed82 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/VariableAssigner.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/VariableAssigner.java @@ -1,6 +1,8 @@ package vazkii.patchouli.client.book.template; import net.minecraft.client.resources.language.I18n; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; @@ -133,7 +135,7 @@ private static IVariable resolveStringVar(Level level, String original, Context } if (val == null && c.variables.has(key)) { - val = c.variables.get(key); + val = c.variables.get(key, level.registryAccess()); } return val == null ? IVariable.empty() : val; @@ -169,7 +171,7 @@ private static IVariable inv(IVariable arg) { } private static IVariable stacks(IVariable arg) { - return IVariable.from(arg.as(Ingredient.class).getItems()); + return IVariable.from(arg.as(Ingredient.class).getItems(), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)); } private static String ename(String arg) { diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/EntityTestProcessor.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/EntityTestProcessor.java index ecaf75cb7..e8e3c144a 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/EntityTestProcessor.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/EntityTestProcessor.java @@ -16,7 +16,7 @@ public class EntityTestProcessor implements IComponentProcessor { @Override public void setup(Level level, IVariableProvider variables) { - String entityType = variables.get("entity").unwrap().getAsString(); + String entityType = variables.get("entity", level.registryAccess()).unwrap().getAsString(); if (entityType.contains("{")) { entityType = entityType.substring(0, entityType.indexOf("{")); } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/RecipeTestProcessor.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/RecipeTestProcessor.java index 100c8b792..9da52d1ca 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/RecipeTestProcessor.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/test/RecipeTestProcessor.java @@ -18,7 +18,7 @@ public class RecipeTestProcessor implements IComponentProcessor { @Override public void setup(Level level, IVariableProvider variables) { // TODO probably add a recipe serializer? - String recipeId = variables.get("recipe").asString(); + String recipeId = variables.get("recipe", level.registryAccess()).asString(); RecipeManager manager = level.getRecipeManager(); recipe = manager.byKey(new ResourceLocation(recipeId)).orElseThrow(IllegalArgumentException::new).value(); } @@ -31,7 +31,7 @@ public IVariable process(Level level, String key) { ItemStack[] stacks = ingredient.getItems(); ItemStack stack = stacks.length == 0 ? ItemStack.EMPTY : stacks[0]; - return IVariable.from(stack); + return IVariable.from(stack, level.registryAccess()); } else if (key.equals("text")) { ItemStack out = recipe.getResultItem(level.registryAccess()); return IVariable.wrap(out.getCount() + "x$(br)" + out.getHoverName()); diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/GenericArrayVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/GenericArrayVariableSerializer.java index 59d4e122a..217b05b16 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/GenericArrayVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/GenericArrayVariableSerializer.java @@ -3,6 +3,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import net.minecraft.core.HolderLookup; + import vazkii.patchouli.api.IVariableSerializer; import java.lang.reflect.Array; @@ -20,12 +22,12 @@ public GenericArrayVariableSerializer(IVariableSerializer inner, Class typ } @Override - public T[] fromJson(JsonElement json) { + public T[] fromJson(JsonElement json, HolderLookup.Provider registries) { if (json.isJsonArray()) { JsonArray array = json.getAsJsonArray(); List stacks = new ArrayList<>(); for (JsonElement e : array) { - stacks.add(inner.fromJson(e)); + stacks.add(inner.fromJson(e, registries)); } return stacks.toArray(empty); } @@ -33,10 +35,10 @@ public T[] fromJson(JsonElement json) { } @Override - public JsonArray toJson(T[] array) { + public JsonArray toJson(T[] array, HolderLookup.Provider registries) { JsonArray result = new JsonArray(); for (T elem : array) { - result.add(inner.toJson(elem)); + result.add(inner.toJson(elem, registries)); } return result; } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/IngredientVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/IngredientVariableSerializer.java index ce4218f12..38607a7bd 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/IngredientVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/IngredientVariableSerializer.java @@ -3,6 +3,7 @@ import com.google.gson.JsonElement; import com.mojang.serialization.JsonOps; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.crafting.Ingredient; @@ -12,12 +13,12 @@ public class IngredientVariableSerializer implements IVariableSerializer { @Override - public Ingredient fromJson(JsonElement json) { + public Ingredient fromJson(JsonElement json, HolderLookup.Provider registries) { return (json.isJsonPrimitive()) ? ItemStackUtil.loadIngredientFromString(json.getAsString(), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)) : Ingredient.CODEC.parse(RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY).createSerializationContext(JsonOps.INSTANCE), json).result().orElseThrow(); } @Override - public JsonElement toJson(Ingredient stack) { - return Ingredient.CODEC.encodeStart(JsonOps.INSTANCE, stack).result().orElseThrow(); + public JsonElement toJson(Ingredient stack, HolderLookup.Provider registries) { + return Ingredient.CODEC.encodeStart(registries.createSerializationContext(JsonOps.INSTANCE), stack).result().orElseThrow(); } } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackArrayVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackArrayVariableSerializer.java index 9994f12c8..efd1e31bd 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackArrayVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackArrayVariableSerializer.java @@ -3,8 +3,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.HolderLookup; import net.minecraft.world.item.ItemStack; import vazkii.patchouli.common.util.ItemStackUtil; @@ -19,27 +18,27 @@ public ItemStackArrayVariableSerializer() { } @Override - public ItemStack[] fromJson(JsonElement json) { + public ItemStack[] fromJson(JsonElement json, HolderLookup.Provider registries) { if (json.isJsonArray()) { JsonArray array = json.getAsJsonArray(); List stacks = new ArrayList<>(); for (JsonElement e : array) { - stacks.addAll(Arrays.asList(fromNonArray(e))); + stacks.addAll(Arrays.asList(fromNonArray(e, registries))); } return stacks.toArray(empty); } - return fromNonArray(json); + return fromNonArray(json, registries); } - public ItemStack[] fromNonArray(JsonElement json) { + public ItemStack[] fromNonArray(JsonElement json, HolderLookup.Provider registries) { if (json.isJsonNull()) { return empty; } if (json.isJsonPrimitive()) { - return ItemStackUtil.loadStackListFromString(json.getAsString(), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)).toArray(empty); + return ItemStackUtil.loadStackListFromString(json.getAsString(), registries).toArray(empty); } if (json.isJsonObject()) { - return new ItemStack[] { ItemStackUtil.loadStackFromJson(json.getAsJsonObject()) }; + return new ItemStack[] { ItemStackUtil.loadStackFromJson(json.getAsJsonObject(), registries) }; } throw new IllegalArgumentException("Can't make an ItemStack from an array!"); } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackVariableSerializer.java index 4c183f8ca..f33ebd1ef 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/ItemStackVariableSerializer.java @@ -4,7 +4,7 @@ import com.google.gson.JsonObject; import com.mojang.serialization.JsonOps; -import net.minecraft.core.RegistryAccess; +import net.minecraft.core.HolderLookup; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.ItemStack; @@ -14,21 +14,21 @@ public class ItemStackVariableSerializer implements IVariableSerializer { @Override - public ItemStack fromJson(JsonElement json) { + public ItemStack fromJson(JsonElement json, HolderLookup.Provider registries) { if (json.isJsonNull()) { return ItemStack.EMPTY; } if (json.isJsonPrimitive()) { - return ItemStackUtil.loadStackFromString(json.getAsString(), RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY)); + return ItemStackUtil.loadStackFromString(json.getAsString(), registries); } if (json.isJsonObject()) { - return ItemStackUtil.loadStackFromJson(json.getAsJsonObject()); + return ItemStackUtil.loadStackFromJson(json.getAsJsonObject(), registries); } throw new IllegalArgumentException("Can't make an ItemStack from an array!"); } @Override - public JsonElement toJson(ItemStack stack) { + public JsonElement toJson(ItemStack stack, HolderLookup.Provider registries) { // Adapted from net.minecraftforge.common.crafting.StackList::toJson JsonObject ret = new JsonObject(); ret.addProperty("item", BuiltInRegistries.ITEM.getKey(stack.getItem()).toString()); @@ -37,7 +37,7 @@ public JsonElement toJson(ItemStack stack) { } if (!stack.getComponents().isEmpty()) { DataComponentMap data = stack.getComponents(); - DataComponentMap.CODEC.encodeStart(JsonOps.INSTANCE, data).result().ifPresent(e -> ret.add("nbt", e)); //TODO: Do we want to change the "nbt" key to "components"? + DataComponentMap.CODEC.encodeStart(registries.createSerializationContext(JsonOps.INSTANCE), data).result().ifPresent(e -> ret.add("nbt", e)); //TODO: Do we want to change the "nbt" key to "components"? } return ret; } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/TextComponentVariableSerializer.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/TextComponentVariableSerializer.java index fa2ab383e..419b91e6a 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/TextComponentVariableSerializer.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/TextComponentVariableSerializer.java @@ -4,7 +4,7 @@ import com.google.gson.JsonParseException; import com.mojang.serialization.JsonOps; -import net.minecraft.core.RegistryAccess; +import net.minecraft.core.HolderLookup; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component.Serializer; import net.minecraft.network.chat.ComponentSerialization; @@ -13,18 +13,18 @@ public class TextComponentVariableSerializer implements IVariableSerializer { @Override - public Component fromJson(JsonElement json) { + public Component fromJson(JsonElement json, HolderLookup.Provider registries) { if (json.isJsonNull()) { return Component.literal(""); } if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) { return Component.literal(json.getAsString()); } - return Serializer.fromJson(json, RegistryAccess.EMPTY); + return Serializer.fromJson(json, registries); } @Override - public JsonElement toJson(Component stack) { - return ComponentSerialization.CODEC.encodeStart(RegistryAccess.EMPTY.createSerializationContext(JsonOps.INSTANCE), stack).getOrThrow(JsonParseException::new); + public JsonElement toJson(Component stack, HolderLookup.Provider registries) { + return ComponentSerialization.CODEC.encodeStart(registries.createSerializationContext(JsonOps.INSTANCE), stack).getOrThrow(JsonParseException::new); } } diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/Variable.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/Variable.java index a7fdd21b4..ca67b6cf6 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/Variable.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/Variable.java @@ -2,6 +2,8 @@ import com.google.gson.JsonElement; +import net.minecraft.core.HolderLookup; + import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariableSerializer; import vazkii.patchouli.api.VariableHelper; @@ -14,10 +16,12 @@ public class Variable implements IVariable { private final JsonElement value; @Nullable private final Class sourceClass; + private final HolderLookup.Provider registries; - public Variable(JsonElement elem, Class c) { + public Variable(JsonElement elem, Class c, HolderLookup.Provider provider) { value = Objects.requireNonNull(elem); sourceClass = c; + registries = provider; } @Override @@ -28,7 +32,7 @@ public T as(Class clazz) { throw new IllegalArgumentException(String.format("Can't deserialize object of class %s from IVariable", clazz)); } - return serializer.fromJson(value); + return serializer.fromJson(value, registries); } @Override diff --git a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/VariableHelperImpl.java b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/VariableHelperImpl.java index e125e58cb..19d80e512 100644 --- a/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/VariableHelperImpl.java +++ b/Xplat/src/main/java/vazkii/patchouli/client/book/template/variable/VariableHelperImpl.java @@ -2,6 +2,7 @@ import com.google.gson.JsonElement; +import net.minecraft.core.HolderLookup; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -44,11 +45,11 @@ public IVariableSerializer serializerForClass(Class clazz) { @Override @SuppressWarnings("unchecked") - public IVariable createFromObject(T object) { + public IVariable createFromObject(T object, HolderLookup.Provider registries) { Class clazz = object.getClass(); for (Entry, IVariableSerializer> e : serializers.entrySet()) { if (e.getKey().isAssignableFrom(clazz)) { - return create(((IVariableSerializer) e.getValue()).toJson(object), clazz); + return create(((IVariableSerializer) e.getValue()).toJson(object, registries), clazz, registries); } } @@ -56,12 +57,12 @@ public IVariable createFromObject(T object) { } @Override - public IVariable createFromJson(JsonElement elem) { - return create(elem, null); + public IVariable createFromJson(JsonElement elem, HolderLookup.Provider registries) { + return create(elem, null, registries); } - private IVariable create(JsonElement elem, Class originator) { - return new Variable(elem, originator); + private IVariable create(JsonElement elem, Class originator, HolderLookup.Provider registries) { + return new Variable(elem, originator, registries); } @Override diff --git a/Xplat/src/main/java/vazkii/patchouli/common/util/ItemStackUtil.java b/Xplat/src/main/java/vazkii/patchouli/common/util/ItemStackUtil.java index 6ba38c585..aa002abc8 100644 --- a/Xplat/src/main/java/vazkii/patchouli/common/util/ItemStackUtil.java +++ b/Xplat/src/main/java/vazkii/patchouli/common/util/ItemStackUtil.java @@ -171,7 +171,7 @@ private static String[] splitStacksFromSerializedIngredient(String ingredientSer return result.toArray(new String[0]); } - public static ItemStack loadStackFromJson(JsonObject json) { - return ItemStack.CODEC.parse(JsonOps.INSTANCE, json).getOrThrow(); + public static ItemStack loadStackFromJson(JsonObject json, HolderLookup.Provider registries) { + return ItemStack.CODEC.parse(registries.createSerializationContext(JsonOps.INSTANCE), json).getOrThrow(); } }