Recipes 1.14.4 and 1.15.2 1.16.x - TeamPneumatic/pnc-repressurized GitHub Wiki

Custom PNC:R Recipes in 1.14.4 & 1.15.2 releases

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.


General Notes

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 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.


Adding Machine Recipes

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

  • 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 of pneumaticcraft:assembly_laser or pneumaticcraft:assembly_drill
  • All of the input, result and program tags must be present.
  • The input and result fields must contain an item OR tag field.
  • The input and result fields may contain a count tag; if omitted, the count will be one.
  • The program field must be one of laser or drill.

Explosion Crafting

  • 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 and loss_rate fields must be present.
  • The input field must contain an item OR tag field.
  • The outputs fields is an array of item objects.
  • The loss_rate field defines the average number of input items destroyed in the explosion, as a percentage.

Fluid Mixer

  • 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 and fluid2 fields must be present
  • At least one of the fluid_output and item_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

Heat Frame Cooling

  • 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 and max_temp fields must be present.
  • The input field must contain an item field OR fluid field. When a fluid field is used, you must also supply a type field with a value of pneumaticcraft:fluid; this custom ingredient matches fluids in an item container, such as a Bucket or PNC:R Liquid Hopper.
  • The result field must contain an item field, and may contain a count 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.

Pressure Chamber

  • 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 and pressure fields must be present.
  • The inputs and results fields are both JSON arrays containing one or more input or resulting items.
  • All inputs ingredients are items, but you can use the custom pneumaticcraft:stacked_item ingredient type if you want to require multiples of an input ingredient with the count field (the default minecraft:item ingredient type does not support this).
  • Each input ingredient must have an item OR tag field.
  • Each results field must have an item field and may have a count 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.

Refinery

  • 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 and results fields must both be present.
  • The input field must have a type: pneumaticcraft:fluid field, a fluid OR tag field, and an amount field.
  • The results field is a JSON array containing 2, 3, or 4 fluids
    • Each array element must contain fluid and amount fields.
  • 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.

Thermopneumatic Processing Plant

  • 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 and fluid_input must be present.
  • One or both of item_output and fluid_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 defined max_temp field.
⚠️ **GitHub.com Fallback** ⚠️