My Thermopneumatic Processing Plant won't craft or won't take fluid
The short answer
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.
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.
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).
No recipe matches the fluid and the item inside right now. The problem is
NO_RECIPE.The input tank holds less fluid than the recipe's input amount. The problem is
NOT_ENOUGH_FLUID.The heat exchanger is above the recipe's maximum temperature. The problem is
TOO_HOT.It is below the recipe's minimum temperature. The problem is
TOO_COLD.The redstone controller says do not run, or the air pressure is not enough. No problem is set for either. The problem stays
OKand the machine does not run.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):
| Recipe | Pressure | Temperature |
|---|---|---|
kerosene, gasoline, lpg | 2.0 | minimum 573 |
plastic_from_* | not listed in the research | minimum 373 |
salmon_tempura, chips | not listed in the research | minimum 423 |
compressed_iron_drill_bit | 4.0 | minimum 573 |
diamond_drill_bit | 7.5 | minimum 773 |
lubricant_* | not listed in the research | minimum 373 |
| ethanol and yeast recipes | not listed in the research | 303 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,gasolineandlpgare 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:
| Recipe | Input tag | Fluids in the tag |
|---|---|---|
kerosene, lubricant_from_diesel | c:diesel | pneumaticcraft:diesel, modern_industrialization:diesel, oritech:still_diesel |
gasoline | c:kerosene | pneumaticcraft:kerosene only |
lpg | c:gasoline | pneumaticcraft:gasoline only |
plastic_from_lpg | c:lpg | pneumaticcraft:lpg only |
plastic_from_biodiesel, lubricant_from_biodiesel | c:biodiesel | pneumaticcraft:biodiesel, immersiveengineering:biodiesel, modern_industrialization:biodiesel, oritech:still_biofuel |
| three drill bits | c:lubricant | pneumaticcraft:lubricant, modern_industrialization:lubricant |
salmon_tempura, chips | c:plantoil | pneumaticcraft:vegetable_oil, immersiveengineering:plantoil, createaddition:seed_oil and createaddition:flowing_seed_oil |
reinforced_pressure_tube | pneumaticcraft:plastic | pneumaticcraft:plastic only |
| ethanol recipes | pneumaticcraft:yeast_culture | pneumaticcraft:yeast_culture only |
spawner_core | c:experience | many mods' experience fluids, and create_enchantment_industry:experience, which the pack's KubeJS adds |
yeast_culture, upgrade_matrix | minecraft:water, named and not a tag | not 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".