Skip to content
k-mods.com

Mod Unlock Classes

Every mod FGUnlock subclass, with abstract state, Blueprint path, exact field types, accepted values, nested structs, examples, and caveats.

KDataForge uses mod unlocks in schematic and delivery-task unlocks: lists exactly like base-game classes. The mechanism is fully generic (resolve class:, NewObject it onto the schematic’s CDO, apply properties:, append to mUnlocks), so mod-provided classes need no special handling. Known native paths with Blueprint variants automatically remap; exact Blueprint paths also work. Catalog reflects mods loaded during Unreal scan.

Use these in a schematic’s instanced unlocks list or in a standalone type: unlock document. For base-game classes see Base-Game Unlock Classes.

Native classModuleAbstractBlueprint variant / concrete pathConfigurable fields and accepted types
KLGiveItemToAllPlayerUnlockKLibno/KLib/Unlocks/BP_GiveToPlayersUnlock.BP_GiveToPlayersUnlock_CbCanRepeat: bool
mAmounts: TArray<FItemAmount>
KLNetworkLevelUnlockKLibno/Script/KLib.KLNetworkLevelUnlock
KLUnlockExtractorScannerKLibno/Script/KLib.KLUnlockExtractorScannerinherited mResourcesToAddToScanner: TArray<TSubclassOf<UFGResourceDescriptor>> (legacy)
inherited mResourcePairsToAddToScanner: TArray<FScannableResourcePair>
KLUnlockMaxRepeatPurchasesKLibno/KLib/Unlocks/BP_GiveChallangeUnlock.BP_GiveChallangeUnlock_Cinherited bCanRepeat: bool
inherited mAmounts: TArray<FItemAmount>
mMaxPurchaseCount: int32
mCostMultiplierCurve: TObjectPtr<UCurveFloat>
mRewardMultiplierCurve: TObjectPtr<UCurveFloat>
mRewardItemsByLevel: TArray<FKLRepeatPurchaseRewardLevel>
UKLUnlockCleanerItemKLibno/KLib/Unlocks/BP_CleanerUnlock.BP_CleanerUnlock_CmItemDescriptor: TSubclassOf<UFGItemDescriptor>
KPCLDeliveryTaskInventorySlotUnlockKPrivateCodeLibno/KPrivateCodeLib/Unlocks/BP_DeliverInventorySlotUnlock.BP_DeliverInventorySlotUnlock_CmNumInventorySlotsToUnlock: int32 (min 1)
KPCLDeliveryTaskQueueSlotUnlockKPrivateCodeLibno/Script/KPrivateCodeLib.KPCLDeliveryTaskQueueSlotUnlockmAmount: int32 (min 1)
KPCLDeliveryTaskSlotUnlockBaseKPrivateCodeLibyesbase only
KPCLDeliveryTaskUnlockKPrivateCodeLibno/KPrivateCodeLib/Unlocks/BP_DeliveryTaskUnlock.BP_DeliveryTaskUnlock_C
KPCLFaxitCapacityUnlockKPrivateCodeLibno/KPrivateCodeLib/Unlocks/BP_FaxitCapaUnlock.BP_FaxitCapaUnlock_CmCapacityType: EKPCLFaxitCapacityType
mAmount: int32 (min 1)
bUseCapacityTypeDefaultAmount: bool
KPCLFaxitFeatureUnlockKPrivateCodeLibno/KPrivateCodeLib/Unlocks/BP_FaxitFeatureUnlock.BP_FaxitFeatureUnlock_CmFeature: EKPCLFaxitFeature
KPCLFaxitSpeedUnlockKPrivateCodeLibno/KPrivateCodeLib/Unlocks/BP_FaxitSpeedUnlock.BP_FaxitSpeedUnlock_CmAmount: int32 (min 1)
bIsFluid: bool
KPCLFaxitUnlockBaseKPrivateCodeLibyesbase only
AB_FluidExtrasno/AB_FluidExtras/Exhausts/Func/ABUnlock_UnsafeExhaust.ABUnlock_UnsafeExhaust_C (Blueprint-only; parent FGUnlock)Blueprint-defined reflected variables; no native field contract

Use Blueprint generated-class path where listed because it carries mod-configured defaults. Concrete classes without Blueprint use native /Script/<Module>.<Class> path.

YAML encoding follows base-game types: bool, int32, and enum values are scalars; TSubclassOf<T> and TObjectPtr<T> use Unreal paths; TArray<T> uses a sequence; reflected structs use mappings. Inherited fields keep the same type.

unlocks:
- class: /KLib/Unlocks/BP_GiveToPlayersUnlock.BP_GiveToPlayersUnlock_C
properties:
- path: mAmounts
value:
- ItemClass: /KDataForge/Gen/MyPack.Gen_MyPack_MySuperIngot
Amount: 10
ClassFields and accepted typesPurpose
KLGiveItemToAllPlayerUnlockmAmounts: TArray<FItemAmount>, bCanRepeat: boolGives listed items to every player
KLUnlockMaxRepeatPurchasesmMaxPurchaseCount: int32, mCostMultiplierCurve: TObjectPtr<UCurveFloat>, mRewardMultiplierCurve: TObjectPtr<UCurveFloat>, mRewardItemsByLevel: TArray<FKLRepeatPurchaseRewardLevel>, inherited mAmounts: TArray<FItemAmount> and bCanRepeat: boolLevel-dependent repeat purchases and rewards, deposited once into Trading Post storage (overflow spawns in a crate beside it)
UKLUnlockCleanerItemmItemDescriptor: TSubclassOf<UFGItemDescriptor>Info-only cleaner item entry; extends FGUnlockInfoOnly, so it grants nothing by itself
KLNetworkLevelUnlockDeprecated Faxit tier recompute hook
KLUnlockExtractorScannerinherited mResourcesToAddToScanner: TArray<TSubclassOf<UFGResourceDescriptor>> (legacy), mResourcePairsToAddToScanner: TArray<FScannableResourcePair>Deprecated; use FGUnlockScannableResource

KLUnlockMaxRepeatPurchases.mMaxPurchaseCount <= 0 means unlimited. Cost/reward curve X is number of completed purchases, so X=0 controls first purchase and X=1 the second. A null curve property uses multiplier 1, leaving the configured value unchanged. Full worked pack: Repeat-Purchase Schematic (KLIB).

Struct fieldAccepted typeConstraint / meaning
FKLRepeatPurchaseRewardLevel.mPurchaseLevelint32Minimum 1. First purchase is level 1; highest configured level not above current purchase wins.
FKLRepeatPurchaseRewardLevel.mItemsToGiveTArray<FItemAmount>Reward items for this level. See base struct shapes.
FKLRepeatPurchaseRewardLevel.bOverrideCostsboolWhen true, replaces normal costs with mCosts.
FKLRepeatPurchaseRewardLevel.mCostsTArray<FItemAmount>Replacement costs when bOverrideCosts is true.
FKLRepeatPurchaseRewardLevel.mAdditionalCostsTArray<FItemAmount>Costs added only at this exact level.

mItemsToGive replaces the complete reward list from its level onward. bOverrideCosts: true replaces the complete raw cost list from that level onward; mAdditionalCosts applies only when mPurchaseLevel matches the current purchase exactly and does not carry forward. Both cost lists are raw values, combined before mCostMultiplierCurve is applied.

Runtime-only mCached* and bHasCached* members are transient caches, not KDataForge configuration fields, so they are intentionally excluded.

KLNetworkLevelUnlock carries no data of its own and only forces a Faxit tier recompute; use the KPCLFaxit*Unlock classes below instead. KLUnlockExtractorScanner is superseded by the base-game FGUnlockScannableResource. Both still exist because shipped schematic assets instance them, so do not use either in a new pack.

unlocks:
- class: /KPrivateCodeLib/Unlocks/BP_FaxitCapaUnlock.BP_FaxitCapaUnlock_C
properties:
- path: mCapacityType
value: Drive
- path: mAmount
value: 1
- class: /KPrivateCodeLib/Unlocks/BP_FaxitSpeedUnlock.BP_FaxitSpeedUnlock_C
properties:
- path: mAmount
value: 15000 # fluid units per minute, 1000 units = 1 m³
- path: bIsFluid
value: true
ClassFields and accepted typesPurpose
KPCLDeliveryTaskUnlockEnables delivery tasks, the research queue, and manual delivery
KPCLDeliveryTaskInventorySlotUnlockmNumInventorySlotsToUnlock: int32 (min 1)Adds slots to the shared delivery-task manual-input inventory
KPCLDeliveryTaskQueueSlotUnlockmAmount: int32 (min 1)Raises how many delivery tasks queue at once (limit starts at one)
KPCLFaxitCapacityUnlockmCapacityType: EKPCLFaxitCapacityType, mAmount: int32 (min 1), bUseCapacityTypeDefaultAmount: boolRaises machine-network, network, drive, or network-building buffer inventory capacity
KPCLFaxitFeatureUnlockmFeature: EKPCLFaxitFeatureEnables RemoteAccess, Sink, or Depot
KPCLFaxitSpeedUnlockmAmount: int32 (min 1, default 15), bIsFluid: boolRaises solid/fluid transfer rate
KPCLDeliveryTaskSlotUnlockBaseAbstract delivery-slot base; never instance directly
KPCLFaxitUnlockBaseAbstract Faxit base; never instance directly

Slot/capacity amounts clamp to minimum 1. BufferInventory capacity uses an authored default helper: when bUseCapacityTypeDefaultAmount is true and raw mAmount is 1, the effective amount is 3 buffer slots; writing a custom mAmount disables that default in editor-authored assets. Faxit speed uses items/min for solids (mAmount: 15 adds 15 items/min) and fluid units/min for fluids (1000 units = 1 m³, so mAmount: 15000 adds 15 m³/min). Faxit unlock values accumulate: every purchase recomputes from base values and reapplies each purchased unlock, so there are no tiers and no curves two capacity unlocks of 1 give the same result as one unlock of 2.

Enum typeAccepted YAML valuesMeaning
EKPCLFaxitCapacityTypeMachineNetwork, Network, Drive, BufferInventoryMachine-network limit, network building limit, drive slots, buffer slots
EKPCLFaxitFeatureRemoteAccess, Sink, DepotFaxit feature gate enabled by the unlock

See Base-Game Unlock Classes for FactoryGame classes and Availability Dependency Classes for gating classes.