package lv.enes.mc.eris_alchemy.recipe; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import lv.enes.mc.eris_alchemy.utils.IngredientProvider; import net.minecraft.world.item.crafting.Ingredient; import java.lang.reflect.Type; import java.util.function.Supplier; public record BannedRecipe(Supplier input, Supplier output) { public static BannedRecipe deserialize(JsonElement el) { if (el.isJsonPrimitive() && el.getAsJsonPrimitive().isString()) { return deserialize(el.getAsString()); } else { // TODO: Verbose object representation throw new JsonParseException("Banned recipes should all be strings"); } } public static BannedRecipe deserialize(String str) { var split = str.indexOf("->"); var input = IngredientProvider.deserialize(str.substring(0, split).trim()); var output = IngredientProvider.deserialize(str.substring(split + 2).trim()); return new BannedRecipe(input, output); } public static class Deserializer implements JsonDeserializer { @Override public BannedRecipe deserialize( JsonElement el, Type t, JsonDeserializationContext ctx ) throws JsonParseException { return BannedRecipe.deserialize(el); } } }