Actualmente, parece que la única forma de definir un resultado personalizado es crear un archivo para cada opción y poner condiciones de exclusión en cada una, o crear su propia fábrica de recetas. El problema con la fábrica de recetas es que las fábricas existentes se definen como lambdas o métodos y, por lo tanto, no son extensibles (lo que significa que tendría que duplicar todo el código incluso si lo único que quisiera cambiar es cómo se analiza el resultado).
Una solución fácil sería moverlos a una clase extensible con protected parseResult(JsonObject json, JsonContext context)
que los modders pueden anular en una subclase. Una solución posiblemente más limpia sería proporcionar un IResultFactory
que funcione de manera similar a todas las demás fábricas.
En cuanto a mi caso de uso: mi mod Ex Compressum admite múltiples variantes de Ex Nihilo al mismo tiempo, lo que significa que algunas de las recetas deben ajustarse automáticamente según la variante que se esté utilizando. Varios archivos con forge:mod_loaded
cada uno funcionarían, pero no serían muy elegantes y excluirían la posibilidad de que un mod agregue soporte de su lado. Otro caso de uso serían las recetas que se ajustan según las configuraciones u otros factores externos.
public class NihiloRecipeFactory extends ShapelessOreRecipe {
<strong i="12">@Override</strong>
public ItemStack parseResult(JsonObject json, JsonContext context) {
return ExNihiloProvider.getNihiloItem(json.get("value").getAsString());
}
}
{
"type": "forge:ore_shapeless",
"result": {
"type": "excompressum:nihilo_result_item",
"value": "DUST",
"count": 9
},
"ingredients": [
{
"item": "excompressum:compressed_block",
"data": 0
}
],
"conditions": [
{
"type": "excompressum:has_nihilo_item",
"value": "DUST"
}
]
}
Puedo PR cualquier solución una vez que sepa cuál sería la preferida.
yo voto por el IResultFactory
Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad en mucho tiempo. Si este problema sigue siendo relevante y debe permanecer abierto, responda con una breve explicación (p. ej., "Revisé el código y este problema sigue siendo relevante porque ___" o "Aquí hay una captura de pantalla de este problema en la última versión"). ¡Gracias por sus aportaciones!
Este problema se ha cerrado automáticamente porque no ha tenido actividad en mucho tiempo. Siéntase libre de reabrirlo o crear un nuevo problema.
Comentario más útil
yo voto por el IResultFactory