Feathered Friend

Config

Feathered Friend has two config layers:

  • Client config (featheredfriend-client.toml): UI and local preference behavior.
  • Server config (featheredfriend-server.toml): gameplay-authoritative values synced to clients.

In a typical dev run:

  • neoforge/run/config/featheredfriend-client.toml
  • neoforge/run/config/featheredfriend-server.toml
Feathered Friend config and settings screen
Feathered Friend in-game settings screen.
Authoritative model

Server config is source of truth for gameplay rules. Clients receive synced values and should treat them as read-only unless server allows editing.


Sync pipeline

  1. Client requests settings (RequestServerSettingsPayload).
  2. Server sends full snapshot (ServerSettingsPayload).
  3. Server also pushes settings on login.
  4. Server tick watcher checks for config changes and rebroadcasts.

So edits from TOML hot-reload and in-game settings both propagate to connected clients.


Hot-reload behavior

Server config values in FFServerConfig are runtime values.

FFConfigSyncEvents monitors values and rebroadcasts if they change, including:

  • feature toggles (enableSuspiciousFeather, enableSuspiciousChest, enableRavenArmor, enableMailbox)
  • limits/cooldowns
  • chat toggle

ravenLinkDurationSeconds is re-read during active sessions, so current links can shorten/extend immediately after config changes.

DEEP DIVE: dirty-flag + save

Setters in FFServerConfig mark settings dirty and attempt SERVER_SPEC.save() so changes can sync quickly and persist to disk.


In-game settings permissions

The custom settings GUI opens via the open_settings keybind (unbound by default).

Server-side edits are allowed only when both are true:

  • allowServerSettingsScreenEditing = true
  • player has operator permission level 4

Otherwise, clients can view synced values but cannot apply server-setting edits.


Client config (local only)

Client config controls local UI/preferences only, including:

  • scrollUiFontMode (VANILLA, JACQUARD, ALAGARD)
  • raven status badge position/anchor/visual mode
  • favorite seal stamp key
  • raven log view settings (category visibility/colors)

These do not change server gameplay.


Server config (gameplay authority)

settings section

KeyDefaultRangePurpose
chatDisabledDefaultfalseboolGlobal player chat disable (commands unaffected).
ravenChestsPerPlayer30..64Max placed Suspicious Chests per player.
ravenLogRetentionMinutes100800..129600Raven log retention window (minutes).
ravenLogMaxBytesPerPlayer2621440..4194304Max Raven log size per player before clear.
enderpackDepositCooldownSeconds6000..86400Cooldown between Enderpack -> chest deposit workflows.
scrollDeliveryCooldownSeconds6000..86400Cooldown between scroll courier dispatches.
courierTimeoutRetrySeconds600..86400Auto-retry interval for timeout-failed courier jobs.
brushRavenCooldownSeconds300..86400Cooldown between brushing ravens.
ravenLinkDurationSeconds305..600Raven Link session duration.
allowServerSettingsScreenEditingtrueboolAllows/disallows OP editing in settings screen.
features.enableSuspiciousFeathertrueboolEnables Suspicious Feather logic.
features.enableSuspiciousChesttrueboolEnables Suspicious Chest special logic.
features.enableRavenArmortrueboolEnables Raven Armor equip/stat logic.
features.enableMailboxtrueboolEnables mailbox spotting + courier mailbox routing.

spawning section

KeyDefaultRangePurpose
wildRavensPerPlayer10..16Wild raven cap per online non-spectator player.

If a feature toggle is off

Feature toggles disable logic, not item/block existence:

  • existing items/blocks remain
  • inventories remain accessible
  • feature-specific runtime systems are skipped

Examples:

  • enableMailbox=false: mailbox storage still opens, but spotting/routing is disabled.
  • enableSuspiciousChest=false: chest storage still works, but perch/deposit logic is disabled.
  • enableSuspiciousFeather=false: Raven Link start/revive path is disabled.
Do not confuse 'disabled' with 'deleted'

Disabling a feature is a behavior toggle only. It does not remove existing world data for that feature.

Server Snapshot Example

JSON
{
  "settings": {
    "ravenChestsPerPlayer": 3,
    "enderpackDepositCooldownSeconds": 600,
    "scrollDeliveryCooldownSeconds": 600,
    "ravenLinkDurationSeconds": 30,
    "allowServerSettingsScreenEditing": true,
    "features": {
      "enableSuspiciousFeather": true,
      "enableSuspiciousChest": true,
      "enableRavenArmor": true,
      "enableMailbox": true
    }
  },
  "spawning": {
    "wildRavensPerPlayer": 1
  }
}

Support This Project

Like this wiki and these mods?

Every bit of support helps me keep building features, writing docs, and shipping updates.

Back to top