My Thermopneumatic Processing Plant won't craft or won't take fluid

The short answer

  1. A plant does nothing for one of six reasons, listed here in the order the code checks them. No matching recipe, not enough fluid, too hot, too cold, redstone or air pressure, then output blocked. Go to The order the plant checks.

  2. A stray item or leftover fluid can give "no recipe". The recipes for kerosene, gasoline and LPG need the item slot empty. A recipe with no fluid input needs the tank empty. Go to A stray item or leftover fluid.

  3. The input tank refuses a fluid that no plant recipe lists. Recipes name a fluid by tag. Modded diesel is accepted for the kerosene recipe. Modded kerosene, gasoline and LPG are refused, because those three tags hold only PneumaticCraft's own fluid in this pack. Go to Which fluids the tank takes.

None of this was tested in a world. The limits are in What was not read.

Checked against: PneumaticCraft 8.2.23.

On this page

Applies to PneumaticCraft 8.2.23, jar pneumaticcraft-repressurized-8.2.23+mc1.21.1.jar from the All the Mods 10 8.2 server files, Minecraft 1.21.1, NeoForge. The jar's mod metadata says modId="pneumaticcraft" and version="8.2.23". The class files are the authority. In the research, "the plant" is ThermoPlantBlockEntity.

The order the plant checks

The research lists these six reasons in the order the code checks them (ThermoPlantBlockEntity.tickServer, source lines 154 to 194).

  1. No recipe matches the fluid and the item inside right now. The problem is NO_RECIPE.

  2. The input tank holds less fluid than the recipe's input amount. The problem is NOT_ENOUGH_FLUID.

  3. The heat exchanger is above the recipe's maximum temperature. The problem is TOO_HOT.

  4. It is below the recipe's minimum temperature. The problem is TOO_COLD.

  5. The redstone controller says do not run, or the air pressure is not enough. No problem is set for either. The problem stays OK and the machine does not run.

  6. The output has no room when progress reaches 6000. The problem is OUTPUT_BLOCKED.

Pressure: a recipe that needs 0 always passes. A positive requirement passes when the pressure is at least that number. A negative one passes when the pressure is at or below it. Temperatures are in Kelvin.

What the recipes in the jar need (24 recipes under thermo_plant):

RecipePressureTemperature
kerosene, gasoline, lpg2.0minimum 573
plastic_from_*not listed in the researchminimum 373
salmon_tempura, chipsnot listed in the researchminimum 423
compressed_iron_drill_bit4.0minimum 573
diamond_drill_bit7.5minimum 773
lubricant_*not listed in the researchminimum 373
ethanol and yeast recipesnot listed in the research303 to 333, so a maximum of 333 and they can go TOO_HOT

The research also lists these pressures: vegetable_oil_from_seeds and _from_crops 2.0, reinforced_pressure_tube 1.5, spawner_core 3.0, iron_drill_bit 3.0, upgrade_matrix 2.0.

The pack's config/pneumaticcraft-common.toml has no key, among the ones the research searched for (thermo, plant, recipe, pressure, heat, fluid and plastic), that changes plant recipes, pressure or tank checks. pressurized_spawner_min_pressure = 10.0 is the Pressurized Spawner, not this machine. No KubeJS file or defaultconfigs file in the pack mentions thermo_plant or thermopneumatic.

Sources: verified file, "Answer", "Crafting", "Recipe requirements in the jar", "Pack overrides".

A stray item or leftover fluid

A recipe matches only when both halves match. The item half and the fluid half both have to be true.

  • A recipe with no item input matches only when the item slot is empty. kerosene, gasoline and lpg are written with "item": []. That parses into an empty ingredient. An empty ingredient accepts only an empty item stack. So these three need an empty item slot.

  • A recipe with no fluid input matches only when the tank is empty. The two vegetable_oil_* recipes have no fluid input.

  • Only the fluid type is tested, not the amount. A tank with the right fluid but too little of it still matches a recipe. It then fails the amount check as NOT_ENOUGH_FLUID.

When two recipes could match, the first one found wins. The order it searches in was not read.

Whenever the tank contents change in a way that matters, the plant looks for a recipe again.

Sources: verified file, "Recipe matching", "New finding", "Fluid intake" (the search again when the tank contents change); addendum, "(2) How the serializer parses" (the empty item ingredient) and "(1)", "Two notes" (the vegetable oil recipes and the amount not being tested).

Which fluids the tank takes

The tank accepts an empty stack. For any other fluid it asks whether any plant recipe takes it. The answer is stored per fluid, so it is asked once for each fluid.

A recipe lists its input fluid as a tag, such as c:diesel. A tag input accepts any fluid in that tag at runtime, from any mod. These are the tags the plant recipes use, with what each holds in All the Mods 10 8.2:

RecipeInput tagFluids in the tag
kerosene, lubricant_from_dieselc:dieselpneumaticcraft:diesel, modern_industrialization:diesel, oritech:still_diesel
gasolinec:kerosenepneumaticcraft:kerosene only
lpgc:gasolinepneumaticcraft:gasoline only
plastic_from_lpgc:lpgpneumaticcraft:lpg only
plastic_from_biodiesel, lubricant_from_biodieselc:biodieselpneumaticcraft:biodiesel, immersiveengineering:biodiesel, modern_industrialization:biodiesel, oritech:still_biofuel
three drill bitsc:lubricantpneumaticcraft:lubricant, modern_industrialization:lubricant
salmon_tempura, chipsc:plantoilpneumaticcraft:vegetable_oil, immersiveengineering:plantoil, createaddition:seed_oil and createaddition:flowing_seed_oil
reinforced_pressure_tubepneumaticcraft:plasticpneumaticcraft:plastic only
ethanol recipespneumaticcraft:yeast_culturepneumaticcraft:yeast_culture only
spawner_corec:experiencemany mods' experience fluids, and create_enchantment_industry:experience, which the pack's KubeJS adds
yeast_culture, upgrade_matrixminecraft:water, named and not a tagnot applicable

So a modded diesel from Modern Industrialization or Oritech is accepted for the kerosene recipe. A modded kerosene, gasoline or LPG is not, because c:kerosene, c:gasoline and c:lpg contain only PneumaticCraft's own fluids in this pack.

Every side of the plant exposes the same fluid handler. Fill goes to the input tank and drain reads only the output tank. The side you connect to does not change that.

Resolved from every data/*/tags/fluid file in all 464 jars at both nesting levels, and from kubejs/data. No tag file has "replace": true. The pack's KubeJS fluid-tag edits add create_enchantment_industry:experience to c:experience, which is a plant input tag. The other edits it makes are not plant input tags.

Sources: verified file, "Fluid intake"; addendum, "(1) How a fluid-by-tag input is tested", "Pack KubeJS fluid-tag edits".

What was not read