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
type
field must be one ofpneumaticcraft:assembly_laser
orpneumaticcraft:assembly_drill
- All of the
input
,result
andprogram
tags must be present. - The
input
andresult
fields must contain anitem
ORtag
field. - The
input
andresult
fields may contain acount
tag; if omitted, the count will be one. - The
program
field must be one oflaser
ordrill
.
- 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
,result
andloss_rate
fields must be present. - The
input
field must contain anitem
ORtag
field. - The
outputs
fields is an array ofitem
objects. - The
loss_rate
field 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
fluid1
andfluid2
fields must be present - At least one of the
fluid_output
anditem_output
fields must be present - The
pressure
field must be present - The
time
field 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
,result
andmax_temp
fields must be present. - The
input
field must contain anitem
field ORfluid
field. When afluid
field is used, you must also supply atype
field with a value ofpneumaticcraft:fluid
; this custom ingredient matches fluids in an item container, such as a Bucket or PNC:R Liquid Hopper. - The
result
field must contain anitem
field, and may contain acount
field. - The
max_temp
field defines the temperature in Kelvin below which the cooling process can happen. - The
bonus_output
field is optional:- The
multiplier
field 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
limit
field 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
,results
andpressure
fields must be present. - The
inputs
andresults
fields are both JSON arrays containing one or more input or resulting items. - All
inputs
ingredients are items, but you can use the custompneumaticcraft:stacked_item
ingredient type if you want to require multiples of an input ingredient with thecount
field (the defaultminecraft:item
ingredient type does not support this). - Each input ingredient must have an
item
ORtag
field. - Each
results
field must have anitem
field and may have acount
field (defaults to 1 if ommitted). - The
pressure
field 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
input
andresults
fields must both be present. - The
input
field must have atype: pneumaticcraft:fluid
field, afluid
ORtag
field, and anamount
field. - The
results
field is a JSON array containing 2, 3, or 4 fluids- Each array element must contain
fluid
andamount
fields.
- 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_input
andfluid_input
must be present. - One or both of
item_output
andfluid_output
must be present. - Fluid inputs must have the
type: pneumaticcraft:fluid
field. - The
pressure
field may be present; if absent, the recipe does not care about the pressure of the Thermo Plant. - The
min_temp
field may be present; if absent, there's no minimum temperature for the recipe to work. - The
max_temp
field may be present; if absent, there's no maximum temperature for the recipe to work. - The
exothermic
field 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_temp
field.