Files
gregWiki/docs/reference/fmf-hook-naming.md
Marvin e2839584f4 Merge Docusaurus site: all content under docs/, align with gregFramework split layout
- Move markdown and wiki-import tree into docs/; keep app shell at repo root
- Point docusaurus docs path to docs/; edit links to mleem97/gregWiki
- Sync and i18n scripts use gregWiki root and ../.wiki under gregFramework
- Sidebars: workspace layout from root docs ids; plugins under mods/extensions
- Fix redirects, module catalog URLs, release note paths, and wiki-import category keys
- Update repo inventory for split repos; Dockerfile for single-repo context

Made-with: Cursor
2026-04-09 23:39:32 +02:00

2.8 KiB

id, title, slug, description
id title slug description
fmf-hook-naming FMF hook and event naming /reference/fmf-hook-naming Canonical naming for hooks, events, and cross-language documentation stubs.

FMF hook and event naming

Target format

All new public hook and event identifiers should follow:

FMF.<Domain>.<EventOrHook>
  • FMF — Fixed prefix (Frika Mod Framework).
  • <Domain> — Uppercase domain from the approved domain list. Describes where the signal belongs in the game (player, rack, server, economy, …).
  • <EventOrHook>PascalCase segment(s), usually OnSomething for events or a verb phrase for commands.

Examples (illustrative): FMF.RACK.CableSpinnerColorResolved, FMF.PLAYER.InputPoll, FMF.NETWORK.Cable.OnConnected.

Approved domain segments

Domains are closed by default. Add a new domain only via changelog + maintainer review.

Domain Scope
GAMEPLAY Rules, scoring, simulation beats not covered elsewhere
PLAYER Local player input, camera, UI focus
EMPLOYEE NPC staff, hiring, schedules
CUSTOMER Contracts, SLA, satisfaction
SERVER In-game server racks, VMs, power
RACK Physical rack placement, mounting
NETWORK Cables, switches, traffic
STORE Shop cart, checkout
WORLD Rooms, expansion, walls
UI HUD overlays, menus (when not PLAYER)
SAVE Save/load lifecycle
FRAMEWORK Loader, bridge, diagnostics

Legacy: FFM.* strings in code

The runtime currently maps numeric event IDs to FFM.* string constants in FrikaMF/HookNames.cs (e.g. FFM.Economy.Balance.OnChanged). That is legacy naming (four segments after FFM).

Policy

  • New documentation and greenfield APIs should use FMF.<Domain>.* as above.
  • When touching HookNames.cs, prefer aligning new entries to FMF.*; otherwise keep FFM.* until a planned major version bump documents a rename map.
  • The generated hook catalog lists what the code emits today (including FFM.*).

Cross-language stubs (documentation)

For each canonical hook, the wiki may add non-normative snippets:

Language Convention
C# FMF.Domain.OnSomething.Subscribe(...) or string literal
Lua FMF.Domain.OnSomething:subscribe(...)
Rust fmf::domain::on_something::subscribe(...)
Python fmf.domain.on_something.subscribe(...)
TypeScript FMF.Domain.OnSomething.subscribe(...)

Bindings are not auto-generated for all languages; stubs are for contributor clarity.