Modding:Recetas de Fabricación

From Vintage Story Wiki
This page is a translated version of the page Modding:Creating Recipes and the translation is 100% complete.
Other languages:

This page was last verified for Vintage Story version 1.16.


Antes de crear recetas, le sugerimos que lea primero Ítem Básico para entender este tutorial.

Lo básico

Vamos a crear una receta para nuestra varita, que añadimos en el tutorial objetos básicos. Puedes encontrar otras recetas en assets/survival/recipes/.

Patrón de ingredientes

Empecemos declarando el patrón o disposición de la receta, en nuestro ejemplo queremos que el jugador coloque un pico encima de 2 palos

Recipe Wand Pickaxe.png

que se vería así:

	ingredientPattern: "P,S,S",
	width: 1,
	height: 3,

P y S son identificadores que se definirán más adelante. Cada fila se separa con una coma o un tabulador (¡sin espacios!), mientras que una celda vacía se marca con un guión bajo _. El ancho de esta receta es 1 y tiene 3 filas de alto.

Ingredientes

Ahora sólo tenemos que definir los identificadores que hemos utilizado antes. In our example P representa un pico de cobre y S para un palo ordinario.

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick"}
	},

El Type es block o item dependiendo de si es un ítem o un bloque.

Cuando las recetas tienen objetos vanilla necesitan game: delante del nombre del objeto. Cuando son de tu propio mod puedes poner solo el nombre del item.

Para averiguar el code de cada elemento (o bloque), puede escribir .edi en la consola, lo que añadirá la propiedad de código a la descripción emergente:

Recipe Stick Tooltip.png


Además, podríamos añadir una cantidad requerida a nuestros ingredientes, por lo que en lugar de un palo por ranura podríamos hacer que requiriera más:

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick", quantity: 2}
	},

Otra cosa que podríamos hacer es, en lugar de consumir el pico, utilizarlo como herramienta:

	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper", isTool: true},
		"S": { type: "item", code: "game:stick"}
	},

Esto haría que el pico pierda uno de durabilidad durante la elaboración, en lugar de consumir todo el pico a la vez.

Salida

Todavía tenemos que definir la salida, que es bastante similar a la definición de los ingredientes:

	output: { type: "item", code: "wand-pickaxe"}

Teóricamente, también podríamos añadir aquí la propiedad quantity.

Distribución

Este es el aspecto de nuestra receta final:

{
	ingredientPattern: "P,S,S",
	width: 1,
	height: 3,
	ingredients: {
		"P": { type: "item", code: "game:pickaxe-copper"},
		"S": { type: "item", code: "game:stick"}
	},
	output: { type: "item", code: "wand-pickaxe"}
}

Para añadir esas recetas de fabricación a tu mod, tienes que crear otra carpeta en tu espacio de trabajo assets/mivaritaavanzada/recipes/grid/ y copiar los archivos ahí.

Puedes descargar el mod completo incluyendo los items (Pre 1.15)aquí.

Advanzado

Recetas basadas en tipos

Hay cosas más complicadas que se pueden hacer con las recetas. Esta es la receta de los tablones de madera que se fabrican con troncos:

{
	ingredientPattern: "L",
	ingredients: {
		"L": { type: "block", code: "game:log-*-ud", name: "wood" }
	},
	width: 1,
	height: 1,
	output: { type: "block", code: "planks-{wood}-hor", quantity: 4  }
}

En lugar de tener una receta para cada tipo de madera, puede asignar un nombre a un ingrediente (en este caso es name: "wood") y todo lo identificado por * será posteriormente sustituido para la salida. Es decir, {wood} se sustituirá por el tipo de leña que se dé.

Por ejemplo si tuviéramos un bloque de troncos de abedul, su código sería log-birch-ud, por lo que * significaría birch(abedul), por lo tanto la salida se convertirá de code: "planks-{wood}-hor" a code: "planks-birch-hor".

Convertir un ingrediente en otro objeto al fabricarlo

A veces querrás conservar uno o varios ingredientes, pero convertirlos en un objeto diferente después de fabricarlo. Por ejemplo, para fabricar una cataplasma de miel y azufre, el jugador necesita un cuenco lleno de miel, pero el cuenco no se consume para fabricarla. El cuenco de miel se convierte en un cuenco vacío. Esto se consigue añadiendo la propiedad returnedStack al ingrediente. El valor de esta propiedad debe contener un type y un code, al igual que las propiedades estándar de los ingredientes. Esto le indica a la receta qué elemento debe devolver al jugador.

Siguiendo con el ejemplo de la cataplasma de miel y azufre, un cuenco de miel como ingrediente tiene el siguiente aspecto "B": { type: "block", code: "bowl-honey" }, pero el jugador perdería el cuenco si la receta estuviera escrita así. Tenemos que añadir returnedStack a las propiedades del ingrediente e indicar con qué elemento reemplazarlo. En este caso, el jugador debería recibir un cuenco vacío en lugar del cuenco de miel returnedStack: { type: "block", code: "bowl-burned" }. Esta propiedad se coloca junto a las propiedades type y code de un ingrediente. Poniéndolo todo junto:

{
	ingredientPattern: "SBS,_L_",
	ingredients: {
		"L": { type: "block", code: "linen-*" },
		"S": { type: "item", code: "powderedsulfur" },
		"B": {
			type: "block", 
			code: "bowl-honey",
			returnedStack: { type: "block", code: "bowl-burned" }
		}
	},
	width: 3,
	height: 2,
	output: { type: "item", code: "poultice-linen-honey-sulfur", quantity: 4  }
}

Consumir más durabilidad por herramienta

Para equilibrar la durabilidad que consume, se puede hacer mediante la adición de toolDurabilityCost y isTool. Esta es la receta para el mazo de pulverizador:

{
	ingredientPattern: "HL_,CL_,_L_",
	ingredients: {
		"H": { type: "item", code: "hammer-*", isTool: true, toolDurabilityCost: 10 },
		"C": { type: "item", code: "chisel-*", isTool: true, toolDurabilityCost: 10 },
		"L": { type: "block", code: "log-placed-*-ud", name: "wood" }
	},
	width: 3,
	height: 3,
	output: { type: "item", code: "pounder-oak", quantity: 1 }
}

Separar recetas en la misma página del manual

A veces la cantidad de recetas para un artículo puede llegar a ser abrumadora, para separar las importantes, se puede hacer mediante la adición de recipeGroup. Estas son las recetas para la escalera de madera:

{
	ingredientPattern: "S_S,SSS,S_S",
	ingredients: {
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 3,
	recipeGroup: 1,
	output: { type: "block", code: "ladder-wood-north", quantity: 3  }
},
{
	ingredientPattern: "P_P,PSP,P_P",
	ingredients: {
		"P": { type: "item", code: "plank-*" },
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 3,
	output: { type: "block", code: "ladder-wood-north", quantity: 3  }
}

Restringir a una clase específica

La receta puede limitarse a una clase específica. Esto se puede hacer añadiendo requiresTrait. Esta es la receta para el kit de costura:

{
	ingredientPattern: "FFS,FF_",
	requiresTrait: "clothier",
	ingredients: {
		"F": { type: "item", code: "flaxtwine" },
		"S": { type: "item", code: "stick" }
	},
	width: 3,
	height: 2,
	output: { type: "item", code: "sewingkit"  }
}

Copia de atributos

Algunas recetas pueden requerir copiar atributos. Esto se puede hacer añadiendo copyAttributesFrom. Esta es la receta para la caja etiquetada:

{
	ingredientPattern: "S,C",
	ingredients: {
		"S": { type: "item", code: "paper-parchment" },
		"C": { type: "block", code: "crate" }
	},
	shapeless: true,
	copyAttributesFrom: 'C',
	width: 1,
	height: 2,
	output: { type: "block", code: "crate", attributes: { label: "paper-empty" }  }
}
Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.

Modding
Modding Introduction Getting Started Pack Temático
Content Modding Content Mods Developing a Content Mod Basic Tutorials Intermediate Tutorials Advanced Tutorials Content Mod Concepts
Code Modding Code Mods Setting up your Development Environment
Property Overview ItemEntityBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository