From dc7613dd4669393a313b270b55cfaaa3ff8c94a3 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 13 Jan 2024 01:12:12 +0100 Subject: Toposort recipes so it's actually usably fast --- .../mc/eris_alchemy/utils/IngredientProvider.java | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/utils/IngredientProvider.java (limited to 'src/main/java/lv/enes/mc/eris_alchemy/utils/IngredientProvider.java') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/utils/IngredientProvider.java b/src/main/java/lv/enes/mc/eris_alchemy/utils/IngredientProvider.java new file mode 100644 index 0000000..e859114 --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/utils/IngredientProvider.java @@ -0,0 +1,44 @@ +package lv.enes.mc.eris_alchemy.utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.ShapedRecipe; + +import java.lang.reflect.Type; +import java.util.function.Supplier; + +public class IngredientProvider implements JsonDeserializer> { + public static Supplier deserialize(JsonElement el) { + if (el.isJsonObject()) { + return () -> Ingredient.of(ShapedRecipe.itemStackFromJson(el.getAsJsonObject())); + } else if (el.isJsonPrimitive() && el.getAsJsonPrimitive().isString()) { + return deserialize(el.getAsString().strip()); + } else { + throw new JsonParseException("Every ingredient should be an object or a string"); + } + } + + public static Supplier deserialize(String str) { + if (str.startsWith("#")) { + var tag = TagKey.create(Registries.ITEM, new ResourceLocation(str.substring(1).strip())); + return () -> Ingredient.of(tag); + } else { + return () -> Ingredient.of(ItemUtils.get(new ResourceLocation(str))); + } + } + + @Override + public Supplier deserialize( + JsonElement el, + Type t, + JsonDeserializationContext c + ) { + return IngredientProvider.deserialize(el); + } +} -- cgit v1.2.3