Skip to content
k-mods.com

Adding KAPI Data Assets

Real, copy-pasteable "type: dataasset" examples for every KAPI data asset type air collector, cleaner, modular miner, slug breeding, extractor/resource allow-lists, and delivery-task tree nodes.

This page is worked type: dataasset examples, creating brand-new instances, for every KAPI data asset type. Editing existing instances via type: cdo is already covered on Data Assets. Four of the five examples below use real property values from actual shipped Satisfactory Plus / KLib content, so the numbers are realistic, not placeholders. The fifth (extractor/resource allow-lists) is illustrative since no shipped instance of that type exists to read from.

UKAPIAirCollectorData: air collector production

Section titled “UKAPIAirCollectorData: air collector production”

Each Air Collector resource is its own UKAPIAirCollectorData instance the DataAsset registers a new gas/resource the Air Collector can extract, it does not patch an existing one. See the full property reference for every field; the example below mirrors Satisfactory Plus’s own shipped “Air Collector extract Toxic Air via Resource Nodes” asset. Note bUseHightBasesdProduction selects one of two mutually exclusive production models — here it’s false, so mMaxHit/mProductionPerHit are the active fields and mProduceItemCountMin/Max/Base (the other model) are omitted entirely, not just left at defaults.

air-collector-toxic-air.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: AirCollector_ToxicAirNode
class: /Script/KAPI.KAPIAirCollectorData
properties:
- path: mRecipePrio
value: 100
- path: mRangeToScan
value: 2500
- path: bCheckNodes
value: true
- path: mTraceChannel
value:
- ObjectTypeQuery1
- ObjectTypeQuery2
- ObjectTypeQuery9
- ObjectTypeQuery6
- path: mItemClass
value: /KLib/Assets/Ressources/Raw/Gas/Desc_ToxicAir.Desc_ToxicAir_C
- path: mProductionTime
value: 6
- path: bUseHightBasesdProduction
value: false
- path: mMaxHit
value: 2
- path: mProductionPerHit
value: 6000

UKAPICleanerItemDescription: Filtrator (Cleaner) recipes

Section titled “UKAPICleanerItemDescription: Filtrator (Cleaner) recipes”

A dataasset document targeting KAPICleanerItemDescription creates a brand-new Filtrator recipe: which input fluid it consumes, what it outputs, and any bonus items produced alongside the main conversion. See the full property reference for every field, including FKAPICleanerInfo. The example below reproduces Satisfactory Plus’s own “Filtrator filter Wastewater” recipe: 6000 wastewater in, 4000 clean water out over 6 seconds, plus two bypass products (crushed zinc and crushed caterium) that come out independent of the main fluid conversion. mCleanerItemInfo is left out entirely here, it’s optional, and this real recipe ships with no extra cleaner item required (mCleanerItemInfo.mProduceItem is None in the shipped asset).

filtrator-wastewater.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: CleanerItem_WasteWater
class: /Script/KAPI.KAPICleanerItemDescription
properties:
- path: bSkipUnlockCheck
value: false
- path: mProductionTime
value: 6
- path: mInFluid
value:
ItemClass: /KLib/Assets/Ressources/Raw/Fluids/Desc_Wastewater.Desc_Wastewater_C
Amount: 6000
- path: mOutFluid
value:
ItemClass: /Game/FactoryGame/Resource/RawResources/Water/Desc_Water.Desc_Water_C
Amount: 4000
- path: mBypassProducts
value:
- mProduceItem: /KLib/Assets/Parts/Production/Crushed/Desc_CrushedZinc.Desc_CrushedZinc_C
mProductionTime: 12
mProduceAmount: 6
- mProduceItem: /KLib/Assets/Parts/Production/Crushed/Desc_CrushedCaterium.Desc_CrushedCaterium_C
mProductionTime: 12
mProduceAmount: 6

UKAPIModularMinerDescription: modular miner ore entries

Section titled “UKAPIModularMinerDescription: modular miner ore entries”

Full property reference. Each UKAPIModularMinerDescription instance registers one raw-resource entry the KAPI modular miner can extract, its rarity/found flavor text, node screenshot, which attachment modules are required or blocked, and the minimum drill tier needed. The example below mirrors a real shipped Cryolite raw-ore entry:

modular-miner-cryolite.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: MM_Cryolite
class: /Script/KAPI.KAPIModularMinerDescription
properties:
- path: mRarityText
value: 'Common'
- path: mFoundText
value: 'Can be found in every biome.'
- path: mNodeScreenshot
value: /SatisfactoryPlus/AssetDatas/Miner/UI/TXUI_Wiki_ResourceNode_Cryolite.TXUI_Wiki_ResourceNode_Cryolite
- path: mIsFallbackDescriptor
value: false
- path: mNeededModules
value:
- /KAPI/Attachments/ModularMiner/Attachment_MM_MiningHead.Attachment_MM_MiningHead_C
- path: mPreventModules
value:
- /KLib/Assets/Buildings/ModularExtractor/Modules/Smelter/Build_SmelterModule.Build_SmelterModule_C
- path: mResourceClass
value: /Game/FactoryGame/Resource/RawResources/RawQuartz/Desc_RawQuartz.Desc_RawQuartz_C
- path: mDrillTier
value: 1

mFluidInfo and mModuleInformation are optional TMap fields (keyed by an item class and a waste-producer module class respectively) for entries that feed fluid or waste-producer modules, see the property reference for their map-key/value shapes. A resource entry that doesn’t use either module type, like this one, works fine without them. mScannerTier is unused and left out entirely.

UKAPISugHatchingData: slug breeding & incubation

Section titled “UKAPISugHatchingData: slug breeding & incubation”

Defines a slug species end to end: what it hatches from, how the incubator raises it, and its breeding-cycle behavior. See the full property reference for every field, including the fluid-incubator properties (mTankTier, mFluidConsume, mFluidClass, mFluidConsumeTime) left out below since bRequireFluid is false here. The example reproduces the shipped Red Slug breeder, trimmed to two mPossibleSlugs entries for readability.

kapi-slug-red.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: RedSlugBreeder
class: /Script/KAPI.KAPISugHatchingData
properties:
- path: mSlug
value: /KLib/Assets/Buildings/SlugHatching/Desc/Slugs/SlugDesc_Red.SlugDesc_Red_C
- path: mEgg
value: /KLib/Assets/Buildings/SlugHatching/Desc/Eggs/EggDesc_Red.EggDesc_Red_C
- path: mEggColor
value:
R: 1
G: 1
B: 1
A: 1
- path: mSlugTier
value: -1
- path: mHatchDuration
value: 10
- path: mPowerConsume
value: 0.1
- path: mIncubatorTier
value: 1
- path: bRequireFluid
value: false
- path: mPossibleSlugs
value:
- mSlug: /KLib/Assets/Buildings/SlugHatching/Desc/Slugs/SlugDesc_Red.SlugDesc_Red_C
mProductionCount: 1
mProbability: 100
mFixedChanceMultiplier: 0.1
bShouldUseFixedChance: true
- mSlug: /KLib/Assets/Buildings/SlugHatching/Desc/Slugs/SlugDesc_Orange.SlugDesc_Orange_C
mProductionCount: 1
mProbability: 0.38
mFixedChanceMultiplier: 1
bShouldUseFixedChance: true
- path: mProductionCountEggs
value: 1
- path: mBreedingTime
value: 40
- path: mDieTime
value: 100
- path: mRequiredFood
value: /KLib/Assets/Parts/Production/Food/Desc_SnailFood_Tier_20.Desc_SnailFood_Tier_20_C
- path: mFoodConsumePerCycle
value: 2
- path: mFoodDuration
value: 20
- path: mComfortableWith
value:
- /KLib/Assets/Buildings/SlugHatching/Desc/Slugs/SlugDesc_Orange.SlugDesc_Orange_C
- path: mMinHumidity
value: 0.8
- path: mMaxHumidity
value: 0.85
- path: mMinHeat
value: 80
- path: mMaxHeat
value: 100
- path: mDayTime
value: Any # EKAPISlugTime enum name (Any/Day/Night), not a raw number; Any is also the default

UKAPIExtractorAllowList: Registering new Extractors and Resources

Section titled “UKAPIExtractorAllowList: Registering new Extractors and Resources”

Unlike the other examples on this page, no shipped instance of this asset exists to read from the wiki data export has zero UKAPIExtractorAllowList entries. SF+ ships its own default allow-list as an existing default asset that mods normally type: cdo patch instead (see Data Assets); creating a brand new instance from scratch, as below, is mainly useful for a self-contained mod that wants its own allow-list rather than editing SF+‘s. The values below are illustrative adjust the class paths to your own mod’s classes. See Extractors → Properties for the full property reference.

This is the same “hooking up a new resource type” scenario described on that reference page: a new custom extractor building needs to go in mAllowedExtractors before SF+ will treat it as a valid extractor, and a new resource descriptor needs to go in mAllowedResources before any extractor will recognize it as extractable:

my-extractor-allowlist.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: MyModExtractorAllowList
class: /Script/KAPI.KAPIExtractorAllowList
properties:
- path: mAllowedExtractors
value:
- /Game/YourMod/Buildable/Build_YourExtractor.Build_YourExtractor_C
- path: mAllowedResources
value:
- /Game/YourMod/Resource/Desc_YourResource.Desc_YourResource_C
# mDisallowExtractors and mDisallowResources omitted no exclusions.
- path: mPriority
value: 0

mPriority defaults to 0; raise it only if another mod’s allow/disallow list needs to be overridden for this class (see the priority note on the reference page).

UKAPIDeliveryTask: research-tree / delivery-task nodes

Section titled “UKAPIDeliveryTask: research-tree / delivery-task nodes”

UKAPIDeliveryTask places one node on a 2D coordinate grid and links it to a parent node (or several, at once) via mParentTask a bitmask property (EKAPIDeliveryTaskParent: Above/Left/Right/Bottom/AboveLeft/AboveRight/BelowLeft/BelowRight). Like UKAPIExtractorAllowList above, there’s no shipped instance to read real values from this feature isn’t part of Satisfactory Plus, it only needs KAPI + KPrivateCodeLib so the example below is illustrative.

The interesting part is mParentTask accepting more than one flag at once. Use one scalar name for one parent or a YAML sequence for several; KDataForge resolves and ORs names automatically. Scalar names, sequences, and |-joined strings ("Above|Left") are Shipping-safe. Raw integer masks such as 3 remain accepted. bRequireAllParents then switches between AND (true, every flagged parent required; default) and OR (false, any one is enough) semantics. mRequiredParentCompletions defaults to 1 and requires that many completed runs from each marked parent. Values above 1 are intended for branches behind endless tasks and count completed runs, not queued repeats. See Value Forms for the full grammar.

Every flag on mParentTask must resolve to a real sibling node at the matching coordinate offset (Above → the node directly above, Left → directly left, etc.) or the node is rejected at load time, so a small tree needs coordinates laid out to match:

showcase-delivery-task.dataasset.yml
type: dataasset
conditions:
hasMod: KAPI
assets:
- id: DeliveryTask_Root
class: /Script/KAPI.KAPIDeliveryTask
properties:
- path: mCoordinate
value:
X: 0
Y: 0
- path: mName
value: "Root Task"
- id: DeliveryTask_Child_Above
class: /Script/KAPI.KAPIDeliveryTask
properties:
- path: mCoordinate
value:
X: 0
Y: 1
- path: mName
value: "Single-Parent Child"
- path: mParentTask
value: Above
- path: bRequireAllParents
value: true
- id: DeliveryTask_Child_Right
class: /Script/KAPI.KAPIDeliveryTask
properties:
- path: mCoordinate
value:
X: 1
Y: 0
- path: mName
value: "Sibling Child"
- path: mParentTask
value: Left # points back at (0, 0): the root
- path: bRequireAllParents
value: true
- id: DeliveryTask_Child_AboveAndLeft
class: /Script/KAPI.KAPIDeliveryTask
properties:
- path: mCoordinate
value:
X: 1
Y: 1
- path: mName
value: "Two-Parent Child"
- path: mParentTask # multiple flags set in parallel
value:
- Above # points to (1, 0)
- Left # points to (0, 1); both nodes must exist in the tree
- path: bRequireAllParents
value: true # AND: both parents must be completed

A one-time task (bIsEndless: false, the default) can also force-unlock a schematic and grant rewards on completion, via mSchematics/mRewards/mCosts:

- id: DeliveryTask_UnlockSuperIngot
class: /Script/KAPI.KAPIDeliveryTask
properties:
- path: mCoordinate
value:
X: 1
Y: 2
- path: mName
value: "Unlock: Pure Super Ingot"
- path: mParentTask
value: Above
- path: bRequireAllParents
value: true
- path: mSchematics # force-unlocked on completion
value:
- /Game/YourMod/Schematics/Schematic_PureSuperIngot.Schematic_PureSuperIngot_C
- path: mRewards
value:
- ItemClass: /Game/FactoryGame/Resource/Parts/IronIngot/Desc_IronIngot.Desc_IronIngot_C
Amount: 500
- path: mCosts
value:
- ItemClass: /Game/FactoryGame/Resource/Parts/IronPlate/Desc_IronPlate.Desc_IronPlate_C
Amount: 100

The full property set (including the Endless-only fields mPoolElements/mTaskRewards/mMaxTasks/ mAmountMultiplierCurve/mAbsolutMaxItemAmount) is demonstrated in KDataForge’s own reference sample pack, showcase-delivery-task.dataasset.yml.