Skip to content
k-mods.com

Adding new Ore to Modular Miner

How to add new Ore DataAssets to the Modular Miner in Satisfactory Plus through KAPI. To allow them in SF+ gameplay.

For adding new Ore to the Modular Miner in Satisfactory Plus, you need to create a new DataAsset of type KAPIModularMinerDescription the header can be found HERE.

KAPIModularMinerDescription DataAsset properties in the editor

PropertyTypeDescription
mRarityTextFTextThe UI text shown for the rarity of the ore.
mFoundTextFTextThe UI text shown when the ore is found.
mNodeScreenshotTObjectPtr<UTexture2D>The UI screenshot of the ore node.
mIsFallbackDescriptorboolMarks this entry as the fallback descriptor.
mFluidInfoTMap<TSubclassOf<UFGItemDescriptor>, FKAPIMinerInfoFluids>Per-item fluid production settings for fluid modules, see FKAPIMinerInfoFluids below.
mNeededModulesTArray<TSubclassOf<UKAPIModularAttachmentDescriptor>>The attachment modules that must be installed for this ore to be minable.
mPreventModulesTArray<TSubclassOf<AFGBuildable>>The buildable modules that, if installed, prevent this ore from being minable.
mModuleInformationTMap<TSubclassOf<UKAPIWasteProducerType>, FKAPIModuleItems>Maps a waste-producer module type to the items it produces for this ore, see FKAPIModuleItems below.
mResourceClassTSubclassOf<UFGResourceDescriptor>The ore resource this entry applies to.
mDrillTierintThe minimum drill tier required to mine this ore.

Every KAPI DataAsset also carries these:

PropertyTypeDescription
mNameFTextDisplay name of the asset.
mDescriptionFTextDescription of the asset.
mIconTObjectPtr<UTexture2D>Icon of the asset.
mIsDisabledboolWhen true the asset is ignored entirely. The KMods.Disabled gameplay tag does the same.
mPriorityintRank used to resolve duplicates. Defaults to -MAX_int32, i.e. the lowest possible ranking.
mTagsFGameplayTagContainerGameplay tags of the asset.
PropertyTypeDescription
mProductionItemTSubclassOf<UFGItemDescriptor>The item produced by this module.
mTrashItemTSubclassOf<UFGItemDescriptor>The item produced as waste by this module.
PropertyTypeDescription
mNormalFluidCountPerSecondintFluid consumed per second while the miner runs, in internal units (1000 = 1 m³).
ProductionTimeMultifloatSpeed bonus this fluid grants. Added to the production buff, so a higher value mines faster.

The miner buffers the fluid in its input slot and drains mNormalFluidCountPerSecond * <node purity multiplier> every second. If the buffer cannot cover a cycle the extraction stops until it refills, so the fluid is an input, never an output.

ProductionTimeMulti feeds the same buff sum as the module bonuses:

cycle time = 2s / (purity multiplier + ProductionTimeMulti + module bonuses - module maluses)

At normal purity and with no other modules that is 2 / (1 + ProductionTimeMulti) seconds per cycle.

Listing a fluid in mFluidInfo only makes it accepted. Whether the fluid module is mandatory is decided solely by mNeededModules:

mNeededModules contains the fluid attachmentBehaviour
NoThe ore mines dry; every fluid in mFluidInfo is an optional speed boost.
YesThe ore cannot be mined at all without a fluid module and one of its fluids.

AKLMMBuildableMiner::HasAllNeededModules enforces this at runtime: the miner refuses to produce until every entry of mNeededModules is attached. The wiki export follows the same rule — a fluid-gated ore has no plain “extract <ore>” recipe, only its per-fluid recipes.

In the shipped SF+ data, Coal accepts water as an optional boost, while Sulfur, Time Crystal and Uranium are fluid-gated.

  • The drill/mining head attachment belongs in mNeededModules for every ore. It is the one entry that does not gate the ore, because no ore can be mined without it anyway.
  • mScannerTier and FKAPIModuleItems.mTryProductionDynamic have no usage yet and may be removed in the future.