Desarrolladores
9 TOP-LEVEL ITEMSRecipe API
La Recipe API de Croparia IF se construye alrededor de dos objetivos:
- usar una abstracción compartida para describir "recetas mostrables"
- reducir el código repetido entre JEI, REI y los modelos de entrada y salida de recetas
No sustituye a Recipe, RecipeSerializer ni RecipeType de vanilla. En su lugar, añade una capa por encima que resulta más fácil de reutilizar en varios sistemas de recetas personalizados dentro del mod.
Modelo mental
Conviene recordar primero estos papeles:
DisplayableRecipe- una receta que sigue siendo una receta vanilla, pero también sabe exponer datos de visualización
TypedSerializer- un objeto que combina
RecipeTypeyRecipeSerializer, más metadatos de consulta y estaciones de trabajo
- un objeto que combina
ItemInput/ItemOutput- estructuras compartidas para entradas y salidas basadas en objetos
BlockInput/BlockOutput- estructuras compartidas para entradas y salidas basadas en bloques
En otras palabras:
DisplayableReciperesponde "¿cómo es el objeto receta?"TypedSerializerresponde "¿cómo se registra, consulta y asocia a estaciones esta familia de recetas?"- los tipos predefinidos responden "¿cómo modelamos entradas y salidas complejas de manera estable?"
DisplayableRecipe
DisplayableRecipe<C extends RecipeInput> es la interfaz central de la Recipe API. Extiende Recipe<C> de vanilla y además exige que la receta proporcione varias piezas de información para mostrarse:
craftingStation()- la estación de trabajo asociada a esta receta
getTypedSerializer()- el
TypedSerializerdel tipo de receta actual
- el
getInputs()- las entradas usadas para mostrar la receta
getOutputs()- las salidas usadas para mostrar la receta
Su principal valor es que el objeto receta deja de responder solo "¿puedo encajar?" y "¿qué fabrico?" También puede exponer su modelo visual directamente a JEI y REI.
Comparado con Recipe vanilla, Croparia IF pone mucho más énfasis en que una clase de receta sepa cómo quiere mostrarse.
TypedSerializer
TypedSerializer<R> implementa a la vez:
RecipeType<R>RecipeSerializer<R>
De ahí viene el nombre Typed. Combina identidad de tipo y serialización en un único objeto de tiempo de ejecución, y además almacena:
- el ID del tipo de receta
- la clase de la receta
- el
MapCodec - el
StreamCodec - la lista de estaciones de trabajo
Sus métodos más prácticos son:
find()- consulta todas las recetas de este tipo
findHolders()- consulta todos los
RecipeHolderde este tipo
- consulta todos los
find(input, level)- busca una receta compatible para la entrada y el mundo dados
getStations()- obtiene las estaciones usadas en JEI y REI
Por eso, TypedSerializer no es solo una ayuda de registro. Es el centro de ejecución de la Recipe API.
Cuándo usar la Recipe API
Casos típicos:
- quieres añadir un nuevo tipo de receta al estilo Croparia IF
- quieres que una clase de receta funcione de forma natural tanto con el sistema vanilla como con JEI o REI
- quieres reutilizar las estructuras de entrada y salida ya existentes de Croparia IF en lugar de escribir nuevos codecs a mano cada vez
Si tu caso de uso es solo una estructura interna pequeña que nunca necesita JEI ni REI, esta API puede sentirse más pesada de lo necesario.