Skip to content

Client API Tour

One short section per subsystem, covering purpose + minimal usage snippet:

  • CommandsCommandRegistry.Register(modId, ICommand); modId.commandname invocation; aliases.
  • InputInputRegistry.Register(InputBindingDefinition); user rebinds via bindings.json; poll or subscribe.
  • ConfigClientConfig.For(modId) JSON store at %APPDATA%/Anomaly/<modId>/config.json; hot-reload via IConfigSource.KeyChanged.
  • PersistenceClientPersistence.For(modId) JSON store at %APPDATA%/Anomaly/<modId>/data.json; debounced writes; Flush() when you need sync-to-disk.
  • SchedulingScheduler.In, Scheduler.Every, Scheduler.StartCooldown; unscaled delta time; auto-clear on disconnect.
  • Events — all 14 handler classes under Anomaly.Client.Api.Events.Handlers: ClientEvents, PlayerEvents, RoleEvents, StatsEvents, EffectEvents, InventoryEvents, PickupEvents, ProjectileEvents, FirearmEvents, AdminToyEvents, RoundEvents, VoiceEvents, NetworkMessageEvents, FileTransferEvents, AssetEvents. No replay-on-subscribe — subscribe in OnInitializeMelon.
  • Features — read-only wrappers: Client.Players, Client.LocalPlayer, Client.Rooms, Client.Doors, etc.
  • UIUiCanvas.GetLayer(UiLayer.HUD) etc., with Z-ordered layers Background/World/HUD/Overlay/Modal/Debug.
  • LocalizationTr.RegisterMod(ns, dir), Tr.Get(key, args...); link to chapter 7.
  • AssetsAnomalyResources.TryGetTexture(hash), TryLoadFromBundle<T>.
  • E:\Projects\AnomalyLabs\Anomaly\Anomaly.Client.Api\MODDING.md — “Subsystems” and “Events” tables.
  • Anomaly.Client.Api\Commands\, Input\, Config\, Persistence\, Scheduling\, Events\Handlers\, Features\, UI\, Localization\, Assets\ — directories to mine for per-section detail.