Reflection Dependency
Reflection Dependency Manifest
GameCreator2 Networking Layer
Purpose: track all runtime/editor reflection dependencies in this package so GC2/Abilities updates can be validated quickly.
Scope:
Assets/Plugins/GameCreator2NetworkingLayer/(current codebase).
Risk Summary (Current)
High
13
Private/internal GC2 member access or patched-field injection points that can break on upstream rename/signature drift
Medium
3
Dynamic shape-based member lookups and reflective invocation by string names
Low
1
Editor-only dynamic dispatch
Scope Note
This manifest includes two reflection categories:
Always-on runtime dependencies (active in interception/fallback mode).
Optional patched-mode dependencies (only relevant when GC2 patchers are applied and patch hooks are enabled).
Why Optional Patched Mode Uses Reflection
Patched mode intentionally uses reflective binding instead of hard compile-time references to patched members for these reasons:
Keep GC2 source edits minimal: patchers inject a narrow hook surface instead of large structural rewrites.
Preserve compatibility: projects still compile and run in interception/fallback mode when patches are not applied.
Reduce upgrade friction: GC2 updates are more likely to need patch-rule updates than full networking-layer recompilation against changed patched signatures.
Enable graceful degradation: hook installers can probe for patched members at runtime and disable patched mode safely when signatures drift.
High-Risk Reflection Hotspots
1) Core patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Core/NetworkCorePatchHooks.csAccess:
GetField,GetProperty,GetMethod,Invoke,SetValueExact targets:
Invincibility.NetworkSetValidator,Invincibility.NetworkInvincibilitySet,Invincibility.IsNetworkingActive,Invincibility.SetDirect(...)Poise.NetworkDamageValidator,Poise.NetworkSetValidator,Poise.NetworkResetValidator,Poise.NetworkPoiseDamaged,Poise.IsNetworkingActive,Poise.DamageDirect(...),Poise.SetDirect(...),Poise.ResetDirect(...)Jump.NetworkJumpValidator,Jump.NetworkJumpForceValidator,Jump.NetworkJumpExecuted,Jump.IsNetworkingActive,Jump.DoDirect(...)Dash.NetworkDashValidator,Dash.NetworkDashStarted,Dash.NetworkDashFinished,Dash.IsNetworkingActive,Dash.ExecuteDirect(...)Character.NetworkIsDeadValidator,Character.NetworkDeathStateChanged,Character.IsNetworkingActive,Character.SetIsDeadDirect(...)
2) Abilities patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Abilities/NetworkAbilitiesPatchHooks.csAccess:
GetField,GetProperty,GetMethod,Invoke,SetValue,GetValueExact targets:
Caster.NetworkCastValidatorCaster.NetworkLearnValidatorCaster.NetworkUnLearnValidatorCaster.NetworkCastCompletedCaster.IsNetworkingActiveCaster.LearnDirect(...)Caster.UnLearnDirect(...)
3) Inventory patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Inventory/NetworkInventoryPatchHooks.csAccess:
GetField,GetProperty,GetMethod,SetValueExact targets:
TBagContent.NetworkAddValidatorTBagContent.NetworkRemoveValidatorTBagContent.NetworkMoveValidatorTBagContent.NetworkDropValidatorTBagContent.NetworkUseValidatorTBagContent.IsNetworkingActiveTBagContent.UseDirect(...)TBagContent.DropDirect(...)BagWealth.NetworkAddValidatorBagWealth.NetworkSetValidatorBagWealth.IsNetworkingActiveBagWealth.SetDirect(...)BagWealth.AddDirect(...)
4) Stats patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Stats/NetworkStatsPatchHooks.csAccess:
GetField,GetProperty,GetMethod,SetValueExact targets:
RuntimeStatData.NetworkBaseValidatorRuntimeStatData.NetworkAddModifierValidatorRuntimeStatData.NetworkRemoveModifierValidatorRuntimeStatData.NetworkClearModifiersValidatorRuntimeStatData.IsNetworkingActiveRuntimeStatData.SetBaseDirect(...)RuntimeStatData.AddModifierDirect(...)RuntimeStatData.RemoveModifierDirect(...)RuntimeStatData.ClearModifiersDirect(...)RuntimeAttributeData.NetworkValueValidatorRuntimeAttributeData.IsNetworkingActiveRuntimeAttributeData.SetValueDirect(...)
5) Shooter patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Shooter/NetworkShooterPatchHooks.csAccess:
GetField,GetProperty,GetMethod,SetValueExact targets:
ShooterStance.NetworkPullTriggerValidatorShooterStance.NetworkReleaseTriggerValidatorShooterStance.NetworkReloadValidatorShooterStance.IsNetworkingActiveShooterStance.PullTriggerDirect(...)ShooterStance.ReleaseTriggerDirect(...)ShooterStance.ReloadDirect(...)WeaponData.NetworkShootValidatorWeaponData.NetworkShotFiredWeaponData.IsNetworkingActiveWeaponData.ShootDirect(...)
6) Melee patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Melee/NetworkMeleePatchHooks.csAccess:
GetField,GetProperty,GetMethod,SetValueExact targets:
MeleeStance.NetworkInputChargeValidatorMeleeStance.NetworkInputExecuteValidatorMeleeStance.NetworkPlaySkillValidatorMeleeStance.NetworkPlayReactionValidatorMeleeStance.IsNetworkingActiveMeleeStance.InputChargeDirect(...)MeleeStance.InputExecuteDirect(...)MeleeStance.PlaySkillDirect(...)MeleeStance.PlayReactionDirect(...)Skill.NetworkOnHitValidatorSkill.IsNetworkingActiveSkill.OnHit(...)
7) Quests patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Quests/NetworkQuestsPatchHooks.csAccess:
GetField,SetValueExact targets (
Journalstatic validators):NetworkActivateQuestValidatorNetworkDeactivateQuestValidatorNetworkActivateTaskValidatorNetworkDeactivateTaskValidatorNetworkCompleteTaskValidatorNetworkAbandonTaskValidatorNetworkFailTaskValidatorNetworkSetTaskValueValidatorNetworkTrackQuestValidatorNetworkUntrackQuestValidatorNetworkUntrackAllValidator
8) Dialogue patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Dialogue/NetworkDialoguePatchHooks.csAccess:
GetField,SetValueExact targets:
Dialogue.NetworkPlayValidatorDialogue.NetworkStopValidatorStory.NetworkContinueValidatorNodeTypeChoice.NetworkChooseValidator
9) Traversal patched hook contract (optional patched mode)
File:
Assets/Plugins/GameCreator2NetworkingLayer/Traversal/NetworkTraversalPatchHooks.csAccess:
GetField,SetValueExact targets:
TraverseLink.NetworkRunValidatorTraverseInteractive.NetworkEnterValidatorTraversalStance.NetworkTryCancelValidatorTraversalStance.NetworkForceCancelValidatorTraversalStance.NetworkTryJumpValidatorTraversalStance.NetworkTryActionValidatorTraversalStance.NetworkTryStateEnterValidatorTraversalStance.NetworkTryStateExitValidator
10) Quests runtime private member access
File:
Assets/Plugins/GameCreator2NetworkingLayer/Quests/NetworkQuestsController.csAccess:
GetField,GetMethod,GetValue,InvokeExact targets:
TaskKey.m_QuestHash(private field)Journal.OnRemember(...)(non-public method)Journal.EventQuestChange(non-public delegate field)Journal.EventTaskChange(non-public delegate field)Journal.EventTaskValueChange(non-public delegate field)
11) Inventory runtime private member access
Files:
Assets/Plugins/GameCreator2NetworkingLayer/Inventory/NetworkInventoryController.Server.csAssets/Plugins/GameCreator2NetworkingLayer/Inventory/NetworkInventoryController.Server.SyncAndHelpers.cs
Access:
GetField,SetValueExact targets:
RuntimeSocket.m_AttachmentRuntimeItem(private field, written during socket broadcast apply and runtime reconstruction)RuntimeItem.m_RuntimeID(private field, written during runtime reconstruction and stack identity restore)
12) Melee runtime private member access
Files:
Assets/Plugins/GameCreator2NetworkingLayer/Melee/NetworkMeleeController.csAssets/Plugins/GameCreator2NetworkingLayer/Melee/VisualScripting/ConditionNetworkMeleeHit.cs
Access:
GetField,GetValueExact target:
MeleeStance.m_Attacks(private field)
13) Variables runtime private member access
File:
Assets/Plugins/GameCreator2NetworkingLayer/Variables/NetworkVariableSync.csAccess:
GetField,GetValueExact targets:
LocalNameVariables.m_Runtime(private)Name entries are enumerated via public
NameVariableRuntimeiterator (foreach (NameVariable ...))
Risk:
If
LocalNameVariables.m_Runtimeis renamed/removed, name snapshot enumeration will fail.
Medium-Risk Reflection Hotspots
1) Dynamic combat member probing
File:
Assets/Plugins/GameCreator2NetworkingLayer/Combat/NetworkCombatInterceptor.csAccess: dynamic
GetProperty/GetFieldby string + fallback conversionExact probed member names:
Id,Hash,Weapon,Target,Point,Direction
Risk:
Upstream shape changes in hit payload objects can degrade interception without compile errors.
2) Core reflective direct invocation path
File:
Assets/Plugins/GameCreator2NetworkingLayer/Core/NetworkCorePatchHooks.csAccess:
GetMethod+Invoke(TryCallMethod,TryCallMethod<TResult>) by method name stringsExact invoked names:
SetDirect,DamageDirect,SetIsDeadDirect
Risk:
Method rename/signature drift degrades patched-mode direct execution path.
3) Abilities reflective direct invocation path
File:
Assets/Plugins/GameCreator2NetworkingLayer/Abilities/NetworkAbilitiesPatchHooks.csAccess:
GetMethod+InvokeExact invoked names:
LearnDirect,UnLearnDirect
Risk:
Rename/signature drift causes fallback-only behavior.
Low-Risk Reflection Hotspots
1) Editor-only patch UI dispatch
File:
Assets/Plugins/GameCreator2NetworkingLayer/Editor/Patches/GC2PatchManager.csAccess:
typeof(GC2PatchManager).GetMethod(methodName)?.Invoke(...)Exact target pattern:
Patch{Module}/Unpatch{Module}
Risk:
Affects patch window UX only; runtime networking unaffected.
Quick Validation Checklist After GC2 / Module Updates
Re-run patch status checks in the patch manager for all installed modules.
Verify all
Network*PatchHooks.Is*Patched()checks still pass.Smoke-test runtime flows that depend on private members:
Melee (
m_Attacks)Quests snapshot/apply (
TaskKey,Journalinternals)Variables runtime map (
m_Runtime)Inventory socket attachment reconstruction (
m_AttachmentRuntimeItem)
If a hook fails, update the corresponding patcher and this manifest together.
Last updated