Skip to content
Max M edited this page May 12, 2025 · 3 revisions

All Alchemy reactions are defined by JSON recipes, and can be added, modified, or removed through datapacks.

The following JSON format is used for Alchemy Recipes: Anything prefaced by // is a comment, and should not be in a real JSON

{
	"type": "crossroads:alchemy", //Tells Minecraft this is an alchemy recipe
	"group": <group>, //Optional, same purpose as vanilla
	"category": <normal/precise/destructive/elemental/elemental_destructive>, //Optional, defaults to "normal". Destructive and elemental_destructive recipes explode (with strength controlled by data), and precise recipes break the chamber if the inputs weren't perfectly balanced. Elemental and elemental_destructive recipes require specifying an alignment with "beam_element" (new style) or "data" (old style), and will ignore reactants, occurring if the mix of phel., aeth., and adam. matches the alignment.
	"min_temp": <number>, //Optional, defaults to absolute zero. Sets a minimum temperature for this reaction (celsius)
	"max_temp": <number>, //Optional, defaults to an unreachable high value. Sets a maximum temperature for this reaction (celsius)
	"heat": <number>, //Optional, defaults to zero. Controls how much heat this reaction releases/absorbs. Negative numbers are exothermic, positive endothermic
	"catalyst": <string reagent ID or "NONE">, //Optional, defaults to "NONE". Sets a required catalyst to reagent ID if set to something other than NONE.
	"charged": <true or false>, //Optional, defaults to false. If true, the reaction chamber needs to be charged
	"data": <number/string alignment name>, //Optional, defaults to 0. Used by destructive type for controlling blast strength (see gunpowder for reference), expects a number
	"beam_element": <string alignment name>, //Optional, defaults to no_match. Used by elemental type reactions, which expect this to be the string name of an alignment.
	"active": <true or false>, //Optional, defaults to true. If false, this recipe will not be added! This is for making it easier to remove reactions through datapacks (to remove a reaction, override it with a version with active=false)
	
	//FOR ONE REAGENT
	"reagents": {
		"type": <string reagent ID>, //Sets a required reagent to the reagent ID
		"qty": <integer> //Optional, defaults to 1. Sets the amount of this reactant for one reaction
	}
	//OR
	//FOR MULTIPLE REAGENTS
	"reagents": [
		{	//Specifies the first reagent
			"type": <string reagent ID>, //Sets a required reagent to the reagent ID
			"qty": <integer> //Optional, defaults to 1. Sets the amount of this reactant for one reaction
		},
		//... As many reagents can be specified as desired
	]
	
	//FOR ONE PRODUCT
	"products": {
		"type": <string reagent ID>, //Sets a required reagent to the reagent ID
		"qty": <integer> //Optional, defaults to 1. Sets the amount of this product producted in one reaction
	}
	//OR
	//FOR MULTIPLE PRODUCTS (or zero)
	//If you want zero products, use this method and put nothing in the square brackets
	"products": [
		{	//Specifies the first product
			"type": <string reagent ID>, //Sets a required reagent to the reagent ID
			"qty": <integer> //Optional, defaults to 1. Sets the amount of this product producted in one reaction
		},
		//... As many reagents can be specified as desired
	]
}

Clone this wiki locally