Files
core-vitals/docs/08_Commands.md
T
2026-05-26 13:30:22 -04:00

3.1 KiB

Commands

Currently one in-game admin command: /networkcore.

All subcommands are run by an in-world player. Console support isn't wired up yet.

Permissions

Every subcommand is gated by a permission node, checked via Hytale's PermissionsModule. Assign these to your staff/admin groups in the Hytale server's own permission config.

Subcommand Required permission
/networkcore status networkcore.status
/networkcore servers networkcore.servers
/networkcore publish networkcore.publish

You can grant the whole namespace with networkcore.* (Hytale's permission system handles wildcards). A player without the relevant node sees Hytale's standard You do not have permission for this command. message - the command system itself blocks execution before our code runs.

Permissions are wired via AbstractCommand.requirePermission(node) in each subcommand constructor, and canGeneratePermission() is overridden to false on every command (including the root) so Hytale doesn't auto-generate a different one and clash with ours.

/networkcore status

Prints local server identity, Redis state, and the metrics endpoint.

Example output:

=== NetworkCore ===
Server id: lobby-3f2a91bd
Role: lobby
Players: 12
Known servers: 4
Metrics: http://127.0.0.1:9100/metrics

If you see Network: not connected (Redis unavailable), NetworkCore failed to open the Redis connection at start. Check the server log for the underlying error and verify redis.host / redis.port / REDIS_PASSWORD.

/networkcore servers

Lists every server NetworkCore currently knows about (including itself).

Example:

=== Network Servers ===
lobby-3f2a91bd | role=lobby | players=12
bridge_duel-9c1b22a4 | role=bridge_duel | players=8
bridge_duel-d8e09131 | role=bridge_duel | players=0
arena-1f4e0bcc | role=arena | players=3

This reads from the local cache - same source as ServerRegistry.getServers(). If a server is missing here, either it hasn't joined the network yet or it failed to heartbeat (see 06_ServerRegistry.md for detection latency).

/networkcore publish <channel> <json>

Publishes a raw JSON payload to a MessageBus channel. Dev/debug helper - useful for poking subscribers without writing test code.

/networkcore publish chat.global {"from":"console","text":"test"}

The JSON is parsed and wrapped in the standard envelope (with your auth token if configured) before being sent. If the JSON is malformed you'll get an error in chat.

This is dangerous in production - it lets anyone with command access spoof any message on any channel. Lock it down with permissions before exposing to non-admins.

Things this command does not do (and why)

  • Restart Redis / reload config. Restart the server. Reload is fragile - half-loaded state is worse than no state.
  • Kick a server out of the network. Servers self-register and self-deregister. If you want a server gone, stop its process. If you need to "evict" it administratively, that's a separate ops tool.
  • Send a chat message to all servers. This belongs in a chat plugin that uses MessageBus, not in the core admin command.