Recipes 1.14.4 and 1.15.2 1.16.x - TeamPneumatic/pnc-repressurized GitHub Wiki
Note: the PNC:R 1.14.4 release is an interim release before 1.15.2 and will not be receiving any further new features (although much has already been added since 1.12.2). However, the intention is to make this release as stable as possible so it can be used in modpacks with confidence.
As of 1.14.4, PNC:R uses datapacks for all recipes, Amadron trades and block heat properties. If you're unfamiliar with datapacks, read this page.
As of 1.15.2 and onward, the recipe system is more closely integrated with Minecraft's vanilla recipe system. Machine recipes are now all loaded (and sync'd to clients) via the vanilla recipe handling code.
One noticeable effect of this is that on dedicated server on 1.14.4, machine recipes don't appear in JEI when the player first logs in (this can be worked around by pressing F3+T). On 1.15.2+, this problem doesn't exist. The 1.15.2+ system, which is more correct, won't be backported to 1.14.4 due to complexity of the changes required. The 1.14.4 system is flawed but workable.
To create or modify recipes for PNC:R machines, add JSON recipe files to the datapack, in the paths described in each machine-specific section below. You can overwrite existing recipes, or disable them by adding a false condition to the JSON: {"conditions":[{"type": "forge:false"}]}, or {"conditions":[{"type": "neoforge:false"}]} in 1.21+.
- For 1.14.4, see https://github.com/TeamPneumatic/pnc-repressurized/tree/1.14/src/main/resources/data/pneumaticcraft/pneumaticcraft/machine_recipes for all of the default machine recipes added by the mod.
- For 1.16.5, see https://github.com/TeamPneumatic/pnc-repressurized/tree/1.16.5/src/generated/resources/data/pneumaticcraft/recipes
For all recipe types, the type field is mandatory in 1.15.2+ and must contain the correct pneumaticcraft:<recipe_type> value. The correct value is shown in each example recipe below. The type field isn't needed in 1.14.4 (but it's not an error to have it).
All recipes support item and (sometimes) fluid tags; see https://minecraft.wiki/w/Tag and https://mcforge.readthedocs.io/en/latest/resources/server/tags/ for more information on the tag system, which effectively replaces the old Ore Dictionary used in 1.12.2.
- All vanilla tags: https://minecraft.wiki/w/Tag#List_of_tags
- All Forge-added tags: https://github.com/MinecraftForge/MinecraftForge/tree/1.18.x/src/generated/resources/data/forge/tags
Note: some example recipes below apply to 1.20 and older only; see https://github.com/TeamPneumatic/pnc-repressurized/tree/1.20.1/src/generated/resources/data/pneumaticcraft/recipes for recipe formats in 1.21. Some format changes were necessary due to pervasive use of codec and stream codecs.
- Assembly System
- Explosion Crafting
- Fluid Mixer
- Heat Frame Cooling
- Pressure Chamber
- Refinery
- Thermopneumatic Processing Plant
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/assembly/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/assembly/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:assembly_laser"
"input": {
"tag": "forge:storage_blocks/quartz"
},
"result": {
"item": "pneumaticcraft:aphorism_tile",
"count": 4
},
"program": "laser"
}- In 1.15.2+, the
typefield must be one ofpneumaticcraft:assembly_laserorpneumaticcraft:assembly_drill - All of the
input,resultandprogramtags must be present. - The
inputandresultfields must contain anitemORtagfield. - The
inputandresultfields may contain acounttag; if omitted, the count will be one. - The
programfield must be one oflaserordrill.
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/explosion_crafting/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/explosion_crafting/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:explosion_crafting",
"input": {
"tag": "forge:ingots/iron"
},
"loss_rate": 20,
"results": [
{
"item": "pneumaticcraft:ingot_iron_compressed"
}
]
}- All of the
input,resultandloss_ratefields must be present. - The
inputfield must contain anitemORtagfield. - The
outputsfields is an array ofitemobjects. - The
loss_ratefield defines the average number of input items destroyed in the explosion, as a percentage.
- 1.15.2+ path:
data/<MOD_ID>/recipes/fluid_mixer/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:fluid_mixer",
"input1": {
"type": "pneumaticcraft:fluid",
"tag": "forge:plantoil",
"amount": 25
},
"input2": {
"type": "pneumaticcraft:fluid",
"tag": "forge:ethanol",
"amount": 25
},
"fluid_output": {
"fluid": "pneumaticcraft:biodiesel",
"amount": 50
},
"item_output": {
"item": "pneumaticcraft:glycerol"
},
"pressure": 2.0,
"time": 300
}- The
fluid1andfluid2fields must be present - At least one of the
fluid_outputanditem_outputfields must be present - The
pressurefield must be present - The
timefield is the processing time in ticks, and defaults to 200 (10 seconds) if absent
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/heat_frame_cooling/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/heat_frame_cooling/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:heat_frame_cooling",
"input" : {
"type": "pneumaticcraft:fluid",
"fluid": "pneumaticcraft:plastic"
},
"result": {
"item": "pneumaticcraft:plastic"
},
"max_temp": 273,
"bonus_output": {
"multiplier": 0.01,
"limit": 0.75
}
}- All of the
input,resultandmax_tempfields must be present. - The
inputfield must contain anitemfield ORfluidfield. When afluidfield is used, you must also supply atypefield with a value ofpneumaticcraft:fluid; this custom ingredient matches fluids in an item container, such as a Bucket or PNC:R Liquid Hopper. - The
resultfield must contain anitemfield, and may contain acountfield. - The
max_tempfield defines the temperature in Kelvin below which the cooling process can happen. - The
bonus_outputfield is optional:- The
multiplierfield defines a chance for bonus output for every degree Kelvin that the actual temperature is below the threshold temperature. In the example above, at an actual temperature of 223K (50K below), there is a 50 x 0.01 = 0.5 = 50% chance for a second output item. - The
limitfield defines the maximum possible bonus; In the example above, it is never possible to get above a 75% chance for bonus output.
- The
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/pressure_chamber/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/pressure_chamber/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:pressure_chamber",
"inputs": [
{
"type": "pneumaticcraft:stacked_item",
"tag": "forge:nuggets/gold",
"count": 2
},
{
"tag": "forge:slimeballs"
},
{
"item": "pneumaticcraft:plastic"
}
],
"pressure": 1.0,
"results": [
{
"item": "pneumaticcraft:capacitor"
}
]
}- All of the
inputs,resultsandpressurefields must be present. - The
inputsandresultsfields are both JSON arrays containing one or more input or resulting items. - All
inputsingredients are items, but you can use the custompneumaticcraft:stacked_itemingredient type if you want to require multiples of an input ingredient with thecountfield (the defaultminecraft:itemingredient type does not support this). - Each input ingredient must have an
itemORtagfield. - Each
resultsfield must have anitemfield and may have acountfield (defaults to 1 if ommitted). - The
pressurefield defines the minimum pressure for the crafting operation to happen. If this is < 0, then the pressure chamber's pressure must be lower than the recipe's pressure; it is the absolute value that is considered.
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/refinery/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/refinery/<RECIPE_NAME>.json
Example recipe:
{
"type": "pneumaticcraft:refinery",
"input": {
"type": "pneumaticcraft:fluid",
"tag": "forge:oil",
"amount": 10
},
"results": [
{
"fluid": "pneumaticcraft:diesel",
"amount": 4
},
{
"fluid": "pneumaticcraft:lpg",
"amount": 2
}
]
}- The
inputandresultsfields must both be present. - The
inputfield must have atype: pneumaticcraft:fluidfield, afluidORtagfield, and anamountfield. - The
resultsfield is a JSON array containing 2, 3, or 4 fluids- Each array element must contain
fluidandamountfields.
- Each array element must contain
- Multiple Refinery recipes using the same input fluid are acceptable, as long as the number of output fluids differs; in this case, the recipe with the most output fluids (which can actually fit into the Refinery multiblock) takes precedence.
- 1.14.4 path:
data/<MOD_ID>/pneumaticcraft/machine_recipes/thermopneumatic_processing_plant/<RECIPE_NAME>.json - 1.15.2+ path:
data/<MOD_ID>/recipes/thermo_plant/<RECIPE_NAME>.json(yes, it was shortened in 1.15.2)
Note that the temperature field was introduced in 1.15.2; it's an optional field which (if present) must contain at least one of min_temp and max_temp. In 1.14.4, the min_temp and max_temp fields were optional fields directly inside the main recipe.
Example recipe (1.15.2+):
{
"type": "pneumaticcraft:thermo_plant",
"fluid_input": {
"type": "pneumaticcraft:fluid",
"tag": "pneumaticcraft:diesel",
"amount": 1000
},
"item_input": {
"tag": "forge:dusts/redstone"
},
"temperature": {
"min_temp": 373
}
"fluid_output": {
"fluid": "pneumaticcraft:lubricant",
"amount": 1000
}
}- One or both of
item_inputandfluid_inputmust be present. - One or both of
item_outputandfluid_outputmust be present. - Fluid inputs must have the
type: pneumaticcraft:fluidfield. - The
pressurefield may be present; if absent, the recipe does not care about the pressure of the Thermo Plant. - The
min_tempfield may be present; if absent, there's no minimum temperature for the recipe to work. - The
max_tempfield may be present; if absent, there's no maximum temperature for the recipe to work. - The
exothermicfield may be present; it's an optional boolean field (default:false) which defines whether the recipe uses (false) or produces (true) heat. An exothermic recipe would typically have a definedmax_tempfield.