Skip to content

Implement machine config simplifier + detect when out of date - #30

Draft
OrderedSet86 wants to merge 21 commits into
devfrom
auto-oc
Draft

Implement machine config simplifier + detect when out of date#30
OrderedSet86 wants to merge 21 commits into
devfrom
auto-oc

Conversation

@OrderedSet86

@OrderedSet86 OrderedSet86 commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Machine alternative selection dropdown

image

Example trimmed machine config
image

Per-chart minimums
image

Config knobs tuned per machine by code inspection. Lookup table generated with /plannh_machines in game on ./gradlew runClient -PgtnhRecipes:

PlanNH: what it knows about each GregTech multiblock

Columns

  • rows - what a node for this machine asks beyond the four every multiblock shows
    (Tier, Mach, Amp, Advanced). Blank means it asks nothing else, which is the goal.
  • override - why this machine is not read from GregTech. Only the override section has one.
  • knobs - the structure settings that change a number this machine reports.
    Blank means none do, so the node offers no structure rows at all. a -> b means the
    hand-written row claims a and the machine itself reports b, which is a row to fix.
  • modes - machines that are two machines behind one controller. {map=n} says which
    mode each recipemap selects, so the node derives it and asks nothing; asks means the
    recipe cannot say which mode is meant and the node still offers the row.

both (32)

Both a hand-written row and a probe reading. The row is what a chart uses; the probe is the check on it. Anything in the knobs column with an arrow, or any machine listed under a differing headline in the log, is a row that no longer matches GregTech.

machine rows override knobs modes class recipemaps
Boldarnator MTEIndustrialRockBreaker gtpp.recipe.multiblockrockbreaker
Dangote Distillus Width WIDTH, MODE 2 modes {gt.recipe.distillationtower=0, gt.recipe.distillery=1} MTEAdvDistillationTower gt.recipe.distillationtower, gt.recipe.distillery
Dimensionally Transcendent Plasma Forge MTEPlasmaForge gt.recipe.plasmaforge
ExxonMobil Chemical Plant Par, Coil, Pipe Casing COIL, PIPE_CASING MTEChemicalPlant gtpp.recipe.fluidchemicaleactor
Flotation Cell Regulator MTEFrothFlotationCell gtpp.recipe.flotationcell
Industrial Arc Furnace Par, Electrode, Mode ELECTRODE, MODE -> ELECTRODE MTEIndustrialArcFurnace gt.recipe.arcfurnace, gt.recipe.blastfurnace, gt.recipe.furnace
Industrial Centrifuge MTEIndustrialCentrifuge gtpp.recipe.multicentrifuge
Industrial Chemical Bath MTEIndustrialChemicalBath gt.recipe.chemicalbath
Industrial Coke Oven Par, Coil, Struct. Tier, Width COIL, STRUCTURE_TIER, WIDTH MTEIndustrialCokeOven gtpp.recipe.cokeoven
Industrial Cutting Factory Sawblade SAWBLADE MTEIndustrialCuttingMachine gt.recipe.cuttingsaw
Industrial Electrolyzer MTEIndustrialElectrolyzer gtpp.recipe.multielectro
Industrial Extrusion Machine MTEIndustrialExtruder gt.recipe.extruder
Industrial Forming Press MTEIndustrialFormingPress gt.recipe.press
Industrial Maceration Stack Par, Struct. Tier STRUCTURE_TIER MTEIndustrialMacerator gt.recipe.macerator
Industrial Mixing Machine Item Pipe ITEM_PIPE MTEIndustrialMixer gtpp.recipe.multimixer
Industrial Sledgehammer Solenoid SOLENOID MTEIndustrialForgeHammer gt.recipe.hammer
Industrial Wire Factory Item Pipe ITEM_PIPE MTEIndustrialWireMill gt.recipe.wiremill
IsaMill Grinding Machine MTEIsaMill gtpp.recipe.oremill
Large Chemical Reactor MTELargeChemicalReactor gt.recipe.largechemicalreactor
Large Scale Auto-Assembler v1.01 Par MTEAutoCrafter gt.recipe.assembler
Large Sifter MTEIndustrialSifter gt.recipe.sifter
Large Thermal Refinery Par, Coil, Solenoid COIL, SOLENOID MTEIndustrialThermalCentrifuge gt.recipe.thermalcentrifuge
Mega Chemical Reactor Par MTEMegaChemicalReactor gt.recipe.largechemicalreactor
Mega Distillation Tower Par, Width WIDTH, MODE 2 modes {gt.recipe.distillationtower=0, gt.recipe.distillery=1} MTEMegaDistillationTower gt.recipe.distillationtower, gt.recipe.distillery
Mega Oil Cracker Par, Coil COIL MTEMegaOilCracker gt.recipe.craker
Ore Washing Plant MODE -> 2 modes {gt.recipe.orewasher=0, gtpp.recipe.simplewasher=1} MTEOreWashingPlant gt.recipe.orewasher, gtpp.recipe.simplewasher
Pyrolyse Oven Coil COIL MTEPyrolyseOven gt.recipe.pyro
Thermic Heating Device MTEIndustrialFluidHeater gt.recipe.fluidheater
Utupu-Tanuri Par, Coil COIL, MODE -> COIL 2 modes {gtpp.recipe.multidehydrator=1, gtpp.recipe.vacfurnace=0} MTEIndustrialDehydrator gtpp.recipe.multidehydrator, gtpp.recipe.vacfurnace
Volcanus Par, Coil COIL MTEAdvEBF gt.recipe.blastfurnace
Zhuhai - Fishing Port Par, Mode MODE -> MTEIndustrialFishingPond gtpp.recipe.fishpond
Zyngen Coil COIL MTEIndustrialAlloySmelter gt.recipe.alloysmelter

probe (99)

Read from the installed GregTech at runtime, with no hand-written row behind it. These are machines the table never covered, and they follow whatever GregTech the pack ships without anybody maintaining them.

machine rows override knobs modes class recipemaps
Accelerated Biological Coordinator MTEBiologicalCoordinationModule gt.recipe.nanochip.biologicalcoordinator
Algae Farm STRUCTURE_TIER MTEAlgaePond gtpp.recipe.algae_pond
Alloy Blast Smelter MTEAlloyBlastSmelter gtpp.recipe.alloyblastsmelter
Amazon Warehousing Depot 2 modes {gt.recipe.packager=0, gt.recipe.unpackager=1} MTEAmazonPackagerLegacy gt.recipe.packager, gt.recipe.unpackager
Amazon Warehousing Depot ITEM_PIPE 2 modes {gt.recipe.packager=0, gt.recipe.unpackager=1} MTEIndustrialPackager gt.recipe.packager, gt.recipe.unpackager
Bacterial Vat MTEBioVat bw.recipe.BacteriaVat
Big Barrel Brewery MTEIndustrialBrewery gt.recipe.brewer
Boldarnator MTEIndustrialRockBreakerLegacy gtpp.recipe.multiblockrockbreaker
COMET - Compact Cyclotron MTECyclotron gtpp.recipe.cyclotron
Component Assembly Line MTEComponentAssemblyLine gg.recipe.componentassemblyline
Cryogenic Freezer MTEIndustrialVacuumFreezerLegacy gt.recipe.vacuumfreezer
Cryogenic Freezer MTECryogenicFreezer gt.recipe.vacuumfreezer
Density^2 MTEAdvImplosionCompressorLegacy gt.recipe.implosioncompressor
Density^2 MTEAdvImplosionCompressor gt.recipe.implosioncompressor
Digester MTEDigester gtnhlanth.recipe.digester
Dissection Apparatus ITEM_PIPE MTEIndustrialExtractor gt.recipe.extractor
Dissolution Tank MTEDissolutionTank gtnhlanth.recipe.disstank
Distillation Tower MTEDistillationTower gt.recipe.distillationtower
Draconic Evolution Fusion Crafter MTEDEFusionCrafter kubatech.defusioncrafter
Electric Implosion Compressor MTEElectricImplosionCompressorLegacy gt.recipe.electricimplosioncompressor
Electric Implosion Compressor MTEElectricImplosionCompressor gt.recipe.electricimplosioncompressor
Elemental Duplicator MTEElementalDuplicator gt.recipe.replicator
Entropic Processor MTEEntropicProcessor gt.recipe.entropic-processing
Exo-Foundry MTEExoFoundry gt.recipe.fluidsolidifier, gt.recipe.foundry_modules
Flotation Cell Regulator MTEFrothFlotationCellLegacy gtpp.recipe.flotationcell
Fluid Shaper not offered WIDTH MTEFluidShaper gt.recipe.fluidsolidifier
Full-Board Immersion Device MTEBoardProcessorModule gt.recipe.nanochip.boardprocessor
Hot Isostatic Pressurization Unit MTEHIPCompressor gt.recipe.compressor
Implosion Compressor MTEImplosionCompressor gt.recipe.implosioncompressor
Industrial 3D Copying Machine MTEIndustrialChisel gt.recipe.industrialchisel
Industrial 3D Copying Machine MTEIndustrialChiselLegacy
Industrial Arc Furnace Par, Electrode, Mode MTEIndustrialArcFurnaceLegacy gt.recipe.arcfurnace
Industrial Autoclave ITEM_PIPE MTEMultiAutoclave gt.recipe.autoclave
Industrial Bending Machine MTEIndustrialBendingMachine gt.recipe.metalbender
Industrial Centrifuge MTEIndustrialCentrifugeLegacy gtpp.recipe.multicentrifuge
Industrial Coke Oven Par, Coil, Struct. Tier, Width STRUCTURE_TIER MTEIndustrialCokeOvenLegacy gtpp.recipe.cokeoven
Industrial Cutting Factory Sawblade MTEIndustrialCuttingMachineLegacy gt.recipe.cuttingsaw
Industrial Electrolyzer MTEIndustrialElectrolyzerLegacy gtpp.recipe.multielectro
Industrial Extrusion Machine MTEIndustrialExtruderLegacy gt.recipe.extruder
Industrial Maceration Stack Par, Struct. Tier MTEIndustrialMaceratorLegacy gt.recipe.macerator
Industrial Material Press not offered MTEIndustrialPlatePressLegacy gt.recipe.metalbender, gt.recipe.press
Industrial Mixing Machine Item Pipe MTEIndustrialMixerLegacy gtpp.recipe.multimixer
Industrial Precision Lathe MTEMultiLathe gt.recipe.lathe
Industrial Sledgehammer Solenoid MTEIndustrialForgeHammerLegacy gt.recipe.hammer
Industrial Wire Factory Item Pipe MTEIndustrialWireMillLegacy gt.recipe.wiremill
Integrated Ore Factory not offered MTEIntegratedOreFactory
L.A.T.E.X. MTELatex gt.recipe.cable
Large Electric Compressor MTEIndustrialCompressor gt.recipe.compressor
Large Fluid Extractor COIL, SOLENOID MTELargeFluidExtractor gt.recipe.fluidextractor
Large Sifter MTEIndustrialSifterLegacy gt.recipe.sifter
Large Thermal Refinery Par, Coil, Solenoid MTEIndustrialThermalCentrifugeLegacy gt.recipe.thermalcentrifuge
Magnetic Flux Exhibitor 2 modes {gt.recipe.electromagneticseparator=0, gt.recipe.polarizer=1} MTEIndustrialElectromagneticSeparator gt.recipe.electromagneticseparator, gt.recipe.polarizer
Mass Solidifier MTEMassSolidifier gt.recipe.fluidsolidifier
Matter Fabrication CPU MODE 2 modes {gtpp.recipe.matterfab2=0, ic.recipe.recycler=1} MTEMassFabricator gtpp.recipe.matterfab2, ic.recipe.recycler
Mega Alloy Blast Smelter COIL MTEMegaAlloyBlastSmelter gtpp.recipe.alloyblastsmelter
Mega Chemical Reactor not offered MTEMegaChemicalReactorLegacy gt.recipe.largechemicalreactor
Mega Distillation Tower not offered MTEMegaDistillTowerLegacy gt.recipe.distillationtower
Mega Electric Blast Furnace not offered COIL MTEMegaBlastFurnaceLegacy gt.recipe.blastfurnace
Mega Oil Cracker not offered COIL MTEMegaOilCrackerLegacy gt.recipe.craker
Mega Vacuum Freezer not offered MTEMegaVacuumFreezerLegacy gt.recipe.vacuumfreezer
Molecular Transformer MTEIndustrialMolecularTransformer gtpp.recipe.moleculartransformer
Molecular Transformer MTEIndustrialMolecularTransformerLegacy gtpp.recipe.moleculartransformer
Nano Forge MTENanoForge gt.recipe.nanoforge
Nanochip Assembly Matrix MTEAssemblyMatrixModule gt.recipe.nanochip.assemblymatrix
Nanometer Encasement Wrapper MTEEncasementWrapperModule gt.recipe.nanochip.encasementwrapper
Nanopart Splitter not offered MTESplitterModule
Nanoprecision Cutting Chamber MTECuttingChamberModule gt.recipe.nanochip.cuttingchamber
Nanoprecision Wire Tracer MTEWireTracerModule gt.recipe.nanochip.wiretracer
Naquadah Fuel Refinery STRUCTURE_TIER MTENaquadahFuelRefinery gg.recipe.naquadah_fuel_refine_factory
Naquadah Fuel Refinery MTEFuelRefineFactoryLegacy gg.recipe.naquadah_fuel_refine_factory
Neutron Activator WIDTH MTENeutronActivator gg.recipe.neutron_activator
Neutronium Compressor MTENeutroniumCompressor gt.recipe.neutroniumcompressor
Nuclear Salt Processing Plant MTENuclearSaltProcessingPlant gtpp.recipe.nuclearsaltprocessingplant
Observation Array Teleportation Node MTEBECIONode gt.recipe.assemble-condensate
Oil Cracking Unit COIL MTEOilCracker gt.recipe.craker
Optically Optimized Organizer MTEOpticalOrganizerModule gt.recipe.nanochip.opticalorganizer
Ore Washing Plant not offered MTEIndustrialWashPlantLegacy gt.recipe.chemicalbath, gt.recipe.orewasher, gtpp.recipe.simplewasher
PCB Factory MTEPCBFactory gt.recipe.pcbfactory
Part Preparation Apparatus MTESMDProcessorModule gt.recipe.nanochip.smdprocessor
Precise Auto-Assembler MT-3662 MODE 2 modes {gg.recipe.precise_assembler=0, gt.recipe.assembler=1} MTEPreciseAssembler gg.recipe.precise_assembler, gt.recipe.assembler
Pseudostable Black Hole Containment Field MTEBlackHoleCompressor gt.recipe.compressor, gt.recipe.neutroniumcompressor
Pyrolyse Oven Coil COIL MTEPyrolyseOvenLegacy gt.recipe.pyro
Quantum Force Transformer MTEQuantumForceTransformer gtpp.recipe.quantumforcesmelter
Reactor Fuel Processing Plant MTERefinery gtpp.recipe.fissionfuel
Solar Factory MTESolarFactory gt.recipe.solarfactory
Sparge Tower Controller MTESpargeTower gtpp.recipe.lftr.sparging
Spinmatron-2737 MTESpinmatron gtpp.recipe.multicentrifuge
Superconductive Strand Splitter MTESuperconductorSplitterModule gt.recipe.nanochip.superconductorsplitter
Thermal Boiler MTEThermalBoilerLegacy gtpp.recipe.thermalgeneratorfuel
Thermal Boiler MTEThermalBoiler gtpp.recipe.thermalgeneratorfuel
Thorium Reactor [LFTR] MTENuclearReactor gtpp.recipe.lftr
Transcendent Plasma Mixer MTETranscendentPlasmaMixer gt.recipe.transcendentplasmamixerrecipes
Tree Growth Simulator MTETreeFarmLegacy gtpp.recipe.treefarm
Tree Growth Simulator MTETreeFarm gtpp.recipe.treefarm
TurboCan Pro MTEMultiCanner gt.recipe.canner
Ultra-high Energy Etching Array MTEEtchingArrayModule gt.recipe.nanochip.etchingarray
Vacuum Freezer MTEVacuumFreezer gt.recipe.vacuumfreezer
Water Pump not offered MTESteamWaterPump
Zhuhai - Fishing Port Par, Mode MTEIndustrialFishingPondLegacy gtpp.recipe.fishpond

describer (24)

GregTech supplies its own overclock behaviour for these, and it outranks every preset - GTPresetApplier uses the describer in preference to any row or probe reading. So a row here would change nothing.

machine rows override knobs modes class recipemaps
Compact Fusion Computer MK-I Prototype MTELargeFusionComputer1 gt.recipe.fusionreactor
Compact Fusion Computer MK-II MTELargeFusionComputer2 gt.recipe.fusionreactor
Compact Fusion Computer MK-III MTELargeFusionComputer3 gt.recipe.fusionreactor
Compact Fusion Computer MK-IV Prototype MTELargeFusionComputer4 gt.recipe.fusionreactor
Compact Fusion Computer MK-V MTELargeFusionComputer5 gt.recipe.fusionreactor
Fusion Control Computer Mark I MTEFusionComputer1 gt.recipe.fusionreactor
Fusion Control Computer Mark II MTEFusionComputer2 gt.recipe.fusionreactor
Fusion Control Computer Mark III MTEFusionComputer3 gt.recipe.fusionreactor
FusionTech MK IV MTEAdvFusionMk4 gt.recipe.fusionreactor
FusionTech MK V MTEAdvFusionMk5 gt.recipe.fusionreactor
Space Assembler Module MK-I TileEntityModuleAssemblerT1 gt.recipe.spaceAssembler
Space Assembler Module MK-II TileEntityModuleAssemblerT2 gt.recipe.spaceAssembler
Space Assembler Module MK-III TileEntityModuleAssemblerT3 gt.recipe.spaceAssembler
Space Mining Module MK-I TileEntityModuleMinerT1 gt.recipe.spaceMining
Space Mining Module MK-II TileEntityModuleMinerT2 gt.recipe.spaceMining
Space Mining Module MK-III TileEntityModuleMinerT3 gt.recipe.spaceMining
Steam Blender MTESteamMixer gtpp.recipe.multimixer
Steam Fuser MTESteamAlloySmelter gt.recipe.alloysmelter
Steam Grinder MTESteamMacerator gt.recipe.macerator
Steam Hearth MODE MTESteamFurnaceMulti gt.recipe.furnace
Steam Presser MTESteamForgeHammer gt.recipe.hammer
Steam Purifier 2 modes {gt.recipe.orewasher=0, gtpp.recipe.simplewasher=1} MTESteamWasher gt.recipe.orewasher, gtpp.recipe.simplewasher
Steam Separator MTESteamCentrifuge gt.recipe.centrifuge
Steam Squasher MTESteamCompressor gt.recipe.compressor

override (3)

A hand-written row kept deliberately, because the probe cannot answer or answers wrongly. The reason is on each line and in GTMachineOverrides. These are the only machines where PlanNH still asserts a number against the machine that owns it.

machine rows override knobs modes class recipemaps
Circuit Assembly Line reaches for world state while setting up, so a probe clone cannot be asked MODE 2 modes {bw.recipe.cal=0, gt.recipe.circuitassembler=1} MTECircuitAssemblyLine bw.recipe.cal, gt.recipe.circuitassembler
Electric Blast Furnace Coil the probe reads 100K per voltage tier low: checkMachine adds a voltage term it cannot run COIL MTEElectricBlastFurnace gt.recipe.blastfurnace
Multi Smelter Par, Coil no ProcessingLogic at all - the machine computes its own recipes, so there is nothing to read COIL MTEMultiFurnace gt.recipe.furnace

unmodelled (138)

Nothing models these. They plan as a plain single-speed machine with no parallels and no overclock behaviour, which for a generator or a bespoke endgame multiblock may be the honest answer, and for the rest is the work queue.

machine rows override knobs modes class recipemaps
Absolute Baryonic Perfection Purification Unit MTEPurificationUnitBaryonicPerfection gt.recipe.purificationplantquarkextractor
Active Transformer not offered MTEActiveTransformer
Advanced Assembly Line MTEAdvAssLine gt.recipe.fakeAssemblylineProcess
Advanced Concrete Backfiller not offered MTEConcreteBackfiller2
Algae Farm MTEAlgaePondBaseLegacy gtpp.recipe.algae_pond
Assembly Line MTEAssemblyLine gt.recipe.fakeAssemblylineProcess
Beam Crafter MTEBeamCrafter gt.recipe.beamcrafter
Beam Mirror not offered MTEBeamMirror
Beam Splitter not offered MTEBeamSplitter
Beam Stabilizer not offered MTEBeamStabilizer
Bio Chamber not offered MTEPCBBioChamber
Bose-Einstein Condensate Containment Field not offered MTEBECStorage
Bose-Einstein Condensate Entanglement Apparatus MTEBECGenerator gt.recipe.create-condensate
Bose-Einstein Condensate Maxwell Gate not offered MTEBECDiode
Bose-Einstein Condensate Observation Array MTEBECAssembler gt.recipe.assemble-condensate
Charcoal Pile Igniter not offered MTECharcoalPit
Clarifier Purification Unit MTEPurificationUnitClarifier gt.recipe.purificationplantclarifier
Cleanroom Controller not offered MTECleanroom
Coke Oven MTECokeOven gt.recipe.cokeoven
Concrete Backfiller not offered MTEConcreteBackfiller1
Coolant Tower not offered MTECoolantTower
Cooling Tower not offered MTEPCBCoolingTower
Data Bank not offered MTEDataBank
Decay Warehouse 2 modes, asks MTEDecayWarehouse gt.recipe.isotope-decay
Deep Earth Heating Pump not offered MTEDeepEarthHeatingPump
Drone Centre not offered MTEDroneCentre
Drone Centre not offered MTEDroneCentre
Dyson Swarm Ground Unit not offered TileEntityDysonSwarm
Electric Air Filter T1 not offered MTEAirFilter1
Electric Air Filter T2 not offered MTEAirFilter2
Electric Air Filter T3 not offered MTEAirFilter3
Endothermic Fridge MTEEndothermicFridge gt.recipe.vacuumfreezer
Energy Infuser not offered MTEEnergyInfuser
Exothermic Hearth MTEExothermicHearth gt.recipe.blastfurnace
Extreme Combustion Engine MTEExtremeDieselEngineLegacy gt.recipe.extremedieselgeneratorfuel
Extreme Combustion Engine MTEExtremeCombustionEngine gt.recipe.extremedieselgeneratorfuel
Extreme Heat Exchanger MTEExtremeHeatExchanger gg.recipe.extreme_heat_exchanger
Extreme Industrial Greenhouse not offered MTEExtremeIndustrialGreenhouse
Extreme Temperature Fluctuation Purification Unit MTEPurificationUnitPlasmaHeater gt.recipe.purificationplantplasmaheating
Eye of Harmony Astral Arrays MTEEyeOfHarmony gt.recipe.eyeofharmony
Flocculation Purification Unit MTEPurificationUnitFlocculation gt.recipe.purificationplantflocculation
Fluid Drilling Rig not offered MTEOilDrill1
Fluid Drilling Rig II not offered MTEOilDrill2
Fluid Drilling Rig III not offered MTEOilDrill3
Fluid Drilling Rig IV not offered MTEOilDrill4
Forge of the Gods MTEForgeOfGods gt.recipe.upgrade_costs
Helioflare Power Forge MTESmeltingModule gt.recipe.blastfurnace, gt.recipe.furnace
Helioflux Melting Core MTEMoltenModule gt.recipe.fog_molten
Heliofusion Exoticizer MTEExoticModule gt.recipe.fog_exotic
Heliothermal Plasma Fabricator MTEPlasmaModule gt.recipe.fog_plasma
High Energy Laser Purification Unit MTEPurificationUnitUVTreatment gt.recipe.purificationplantuvtreatment
High Temperature Gas-cooled Reactor MTEHighTempGasCooledReactor kubatech.htgrrecipes
Hyper-Intensity Laser Engraver MTEIndustrialLaserEngraver gt.recipe.laserengraver
Infinite Fluid Drilling Rig not offered MTEOilDrillInfiniteLegacy
Infinite Fluid Drilling Rig not offered MTEOilDrillInfinite
Integrated Ore Factory not offered MTEIntegratedOreFactoryLegacy
Lapotronic Supercapacitor not offered MTELapotronicSuperCapacitor
Large Bronze Boiler MTELargeBoilerBronzeLegacy gt.recipe.largeboilerfakefuels
Large Bronze Boiler MTELargeBoilerBronze gt.recipe.largeboilerfakefuels
Large Combustion Engine MTEDieselEngineLegacy gt.recipe.dieselgeneratorfuel
Large Combustion Engine MTELargeCombustionEngine gt.recipe.dieselgeneratorfuel
Large Gas Turbine MTELargeTurbineGasLegacy gt.recipe.gasturbinefuel
Large Gas Turbine MTELargeTurbineGas gt.recipe.gasturbinefuel
Large HP Steam Turbine not offered MTELargeTurbineHPSteamLegacy
Large HP Steam Turbine not offered MTELargeTurbineHPSteam
Large Hadron Collider 2 modes, asks MTELargeHadronCollider gt.recipe.large_hadron_collider
Large Heat Exchanger not offered MTEHeatExchanger
Large Molecular Assembler not offered MTELargeMolecularAssembler
Large Naquadah Reactor MTEMultiNqGeneratorLegacy gg.recipe.naquadah_reactor
Large Naquadah Reactor MTELargeNaquadahReactor gg.recipe.naquadah_reactor
Large Neutralization Engine MTELargeNeutralizationEngine bw.fuels.acidgens
Large Plasma Turbine MTELargeTurbinePlasmaLegacy gt.recipe.plasmageneratorfuels
Large Plasma Turbine MTELargeTurbinePlasma gt.recipe.plasmageneratorfuels
Large Semifluid Burner not offered MTELargeSemifluidGenerator
Large Steam Turbine not offered MTELargeTurbineSteamLegacy
Large Steam Turbine not offered MTELargeTurbineSteam
Large Steel Boiler MTELargeBoilerSteelLegacy gt.recipe.largeboilerfakefuels
Large Steel Boiler MTELargeBoilerSteel gt.recipe.largeboilerfakefuels
Large Supercritical Steam Turbine not offered MTELargeTurbineSCSteam
Large Supercritical Steam Turbine not offered MTESupercriticalFluidTurbineLegacy
Large Titanium Boiler MTELargeBoilerTitaniumLegacy gt.recipe.largeboilerfakefuels
Large Titanium Boiler MTELargeBoilerTitanium gt.recipe.largeboilerfakefuels
Large Tungstensteel Boiler MTELargeBoilerTungstenSteelLegacy gt.recipe.largeboilerfakefuels
Large Tungstensteel Boiler MTELargeBoilerTungstenSteel gt.recipe.largeboilerfakefuels
Linear Accelerator not offered MTELINAC
Microwave Grinder not offered MTEMicrowave
Miniature Wormhole Generator not offered MTEWormholeGenerator
Nanochip Assembly Complex MTENanochipAssemblyComplex gt.recipe.nanochip.conversion
Ore Drilling Plant not offered MTEOreDrillingPlant1
Ore Drilling Plant II not offered MTEOreDrillingPlant2
Ore Drilling Plant III not offered MTEOreDrillingPlant3
Ore Drilling Plant IV not offered MTEOreDrillingPlant4
Ozonation Purification Unit MTEPurificationUnitOzonation gt.recipe.purificationplantozonation
Planetary Gas Siphon not offered TileEntityPlanetaryGasSiphonLegacy
Planetary Gas Siphon not offered MTEPlanetaryGasSiphon
Power Station Control Node not offered MTEPowerSubStation
Quantum Computer MTEQuantumComputer gt.recipe.quantumcomputer
Research Station 2 modes, asks MTEResearchStation gt.recipe.researchStation, gt.recipe.scanner
Residual Decontaminant Degasser Purification Unit MTEPurificationUnitDegasser gt.recipe.purificationplantdegasifier
Rocketdyne F-1A Engine MTELargeRocketEngine gtpp.recipe.rocketenginefuel
Semi-Stable Antimatter Stabilization Sequencer not offered AntimatterForge
Shielded Lagrangian Annihilation Matrix not offered AntimatterGenerator
Solar Tower MTESolarTower gtpp.recipe.solartower
Solid-Oxide Fuel Cell Mk I not offered MTESOFuelCellMK1
Solid-Oxide Fuel Cell Mk II not offered MTESOFuelCellMK2
Source Chamber MTESourceChamber gtnhlanth.recipe.sc
Space Elevator not offered TileEntitySpaceElevator
Space Project Manager TileEntityModuleManager gt.recipe.fakespaceprojects
Space Pumping Module MK-I not offered TileEntityModulePumpT1
Space Pumping Module MK-II not offered TileEntityModulePumpT2
Space Pumping Module MK-III not offered TileEntityModulePumpT3
Space Research Module TileEntityModuleResearch gt.recipe.spaceResearch
Static Network Switch With QoS not offered MTENetworkSwitchAdv
Synchrotron not offered MTESynchrotron
TFFT not offered MTETankTFFT
Target Chamber MTETargetChamber gtnhlanth.recipe.tc
Tesla Tower not offered MTETeslaTower
Thorium High Temperature Reactor not offered MTEThoriumHighTempReactor
Universal Chemical Fuel Engine MTEUniversalChemicalFuelEngine gt.recipe.dieselgeneratorfuel, gt.recipe.gasturbinefuel, gtpp.recipe.rocketenginefuel
Universal Chemical Fuel Engine MTEUniversalChemicalFuelEngineLegacy gt.recipe.dieselgeneratorfuel, gt.recipe.gasturbinefuel, gtpp.recipe.rocketenginefuel
Void Miner I not offered VMLUV
Void Miner II not offered VMZPM
Void Miner III not offered VMUV
Water Purification Plant not offered MTEPurificationPlant
Weighted Network Switch With QoS not offered MTENetworkSwitch
Whakawhiti Wera XL not offered MTEAdvHeatExchanger
XL Turbo Gas Turbine MTEXLTurbineGas gt.recipe.gasturbinefuel
XL Turbo Gas Turbine MTELargerTurbineGasLegacy gt.recipe.gasturbinefuel
XL Turbo HP Steam Turbine not offered MTELargerTurbineHPSteamLegacy
XL Turbo HP Steam Turbine not offered MTEXLTurbineHPSteam
XL Turbo Plasma Turbine MTEXLTurbinePlasma gt.recipe.plasmageneratorfuels
XL Turbo Plasma Turbine MTELargerTurbinePlasmaLegacy gt.recipe.plasmageneratorfuels
XL Turbo SC Steam Turbine not offered MTEXLTurbineSCSteam
XL Turbo SC Steam Turbine not offered MTELargerTurbineSCSteamLegacy
XL Turbo Steam Turbine not offered MTELargerTurbineSteamLegacy
XL Turbo Steam Turbine not offered MTEXLTurbineSteam
YOTTank not offered MTEYottaFluidTank
pH Neutralization Purification Unit MTEPurificationUnitPhAdjustment gt.recipe.purificationplantphadjustment

Base automatically changed from balancer-solver to balancer August 11, 2026 13:57
Base automatically changed from balancer to dev August 11, 2026 21:51
@OrderedSet86 OrderedSet86 reopened this Aug 15, 2026
@OrderedSet86 OrderedSet86 changed the title [WIP] implement machine config simplifier / auto oc Implement machine config simplifier + auto oc + detect when out of date Aug 16, 2026
@OrderedSet86 OrderedSet86 changed the title Implement machine config simplifier + auto oc + detect when out of date Implement machine config simplifier + detect when out of date Aug 16, 2026
@sbancuz

sbancuz commented Aug 16, 2026

Copy link
Copy Markdown
Owner

First of all, I want to say that I really appreciate the amount of work you are putting in and I know you have not marked it for review, but here are my thoughts about it:

Let's start simple, the gui has to be made properly, no clickzones or random stuff, it was originally my mistake to think that we could make a temporary setup and rework it later, I now know it takes more effort to rework it.

Now the hard part: this is not really the direction I want the mod to go, I do want defaults yes, but not like this. Though this mod is made for gtnh, it's not designed to only have gt specific features. To my understanding this pr is just for GT. I would prefer to have a presets file where a mod or modpack can put all the default configs for each machine, this way is less of maintenance burden on us and can easily be generalized to other mods. This is the structure I was thinking:

"nei_handler" : [
    "preset1" : {
           "setting1" : 8,
           "setting2" : false,
           "setting3" : 33%,
     },
     ....
],
"nei_handler2" : [
    "preset1" : {
           "setting1" : 8,
           "setting2" : false,
           "setting3" : 33%,
     },
     ....
],

Then, since you have already done the work, we can have a separate command (or a separate mod/tool) that can generate these presents automatically. This way we are basically never forced to update/change stuff whenever GT balances stuff.

I do see the advantages of having everything in one place, I do. But I don't want to keep changing this mod because something changes in the pack.

EDIT: After thinking it over I realized that the pack changes rarely, and needing the presents file will probably be overkill, but I would probably still want to have it since a pack may want to define some mixins or something. But this can be done later I would say.

One general critique is still valid, don't focus too much on GT, there are also other mods and I would like a system that can be extended easily per mod, also look at the versioned annotation, maybe they could be expanded to query different parameters/values depending on the mod version to keep compatibility with older versions of mods

MAX_REGULAR_OC("max_regular_oc", 0, 0, 64, (v, c) -> "Rg" + v),
MAX_TIER_SKIPS("max_tier_skips", 0, 0, 10, (v, c) -> "Sk" + v),

FUEL_EFFICIENCY("fuel_efficiency", 100, 1, 1000),

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leave all these settings there (ok you can remove FORESTRY_RF_PER_TICK, I thought it was already gone). I want machine presets to change the values of settings/knobs, not replace them

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

int maxTierSkips, boolean unlimitedTierSkips, @Nullable RecipeOverride recipeOverride, EnumSet<Knob> knobs) {

/** Structure inputs a preset reads; the UI shows exactly the rows named here. */
public enum Knob {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make them settings

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this requires me to hardcode values into PlanNH, such as Coils: ["Cupronickel", "Kanthal", "Nichrome", ...]. Is this your preference? I want to avoid doing this for maintenance reasons

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nevermind, found a way to make it work

@sbancuz sbancuz left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that GT still has a lot of custom internal structures that could be extracted, and some could be duplicated.

Did not look at all the tests, but I assume most are not needed, only keep the ones that actually test behaviors, not implementation details.

Skim off a bit of comments, I know clankers do love them

* What a chart persists. Must be stable across game versions and independent of locale, because a
* chart saved today has to resolve to the same machine on a pack updated tomorrow.
*/
@Nonnull

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are not needed if you put the package-info everywhere

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you mean @nonnull, apparently @ParametersAreNonnullByDefault covers parameters only — not return types


/** The settings this machine reads, which are exactly the rows a node offers for it. */
@Nonnull
Set<Settings> knobs();

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I like the term knobs, it may a bit confusing since they are just settings. Don't like having 2 names for the same exact thing

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replaced by this rule:

image

* recipe list's tab title.
*/
@Nonnull
default String label() {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just use the display name directly?

@OrderedSet86 OrderedSet86 Aug 29, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is because singleblocks are constructed as "[display name] (single)"

* cached instance until its answer actually changes.
*/
@Nullable
private static List<? extends MachineVariant> lastCandidates;

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these saved?

return TIERS.size();
}

public static int highestTier() {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this, rename count to numTiers or something

* rename fails the build rather than a player's chart. It counts these members too, so a field added
* here without a row there fails as well.
*/
final class ProbeFields {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There already is FieldInjector, why another class that uses reflection to get some values?

* Two readings are compared whole, because {@link ProbeReading} is a record. Any difference in
* parallel count, speed, power, overclock behaviour or heat counts as the knob mattering.
*/
public final class SensitivityScan {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This class seems useless, it's only used in the SensitivityScanTest (I think)

private static final String DEPRECATED_LINE = "GT5U.MBTT.Deprecated.NEI";

/** How a machine is built, which is what decides whether voltage and parallels are editable. */
public enum Kind {

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't you use the already computed setting for this? Or is that calculated from here?

* node then selected out of this list is memoized once, in MachineVariants.
*/
@Nullable
private static RecipeMap<?> lastMap;

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Weird memoization

if (entry.preset() == null) return 0;
return entry.preset()
.maxParallel()
.applyAsInt(new StructureState(5, 5, 4, 4, 2, 0, 0, 1, 0, 0));

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What? Where do these numbers come from?

@OrderedSet86 OrderedSet86 Aug 29, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This functionality is poorly named/documented, this is part of machinery to probe the parallel count of the machines so it knows how to order the variant dropdown by "complexity." I will make the function clearer

image

@OrderedSet86

Copy link
Copy Markdown
Collaborator Author

To minimize the scope of this PR, I am going to avoid adding new machines until later PRs. Most of the common ones are covered by the current inclusion set. The infrastructure/framework will still be generalized, but this avoids having to hand check 138 more GT machines before merge

@sbancuz

sbancuz commented Aug 24, 2026

Copy link
Copy Markdown
Owner

To minimize the scope of this PR, I am going to avoid adding new machines until later PRs. Most of the common ones are covered by the current inclusion set. The infrastructure/framework will still be generalized, but this avoids having to hand check 138 more GT machines before merge

Do you plan to reopen multiple new stacked prs or do you have another idea?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants