KaBroadcast Group Events
KaProxy's broadcast module provides KaBroadcast backends with group announcements, unified join/quit messages, and cross-server death messages.
Responsibility Boundary#
- KaProxy determines real entry to and exit from the proxy network, validates the protocol, and forwards structured content.
- KaProxy does not store join, quit, announcement, or death templates; it only briefly caches backend-rendered quit snapshots for the last player leaving a backend.
- Each KaBroadcast backend renders the final message from its own configuration, allowing different languages and styles per backend.
- Every backend participating in group messages should install and enable KaBroadcast.
Configuration#
modules:
broadcast:
enabled: true
announcements-enabled: true
connection-messages-enabled: true
death-messages-enabled: true
servers:
- all
all or * forwards to every backend. When a list is configured, only the listed backends receive the events.
Join, Quit and Server Switches#
KaProxy tracks each online player's current backend:
- The first backend connection emits one
player_joinevent. - Switching between backends sends a
switch_requestto the destination backend to obtain its rendered result, then forwardsplayer_switch; neither a join nor a quit event is emitted. - A real proxy disconnect emits one
player_quitevent.
Switch detection uses platform events (Velocity ServerPostConnectEvent.getPreviousServer()), and the backend's modules.connection.switch-message-enabled decides whether it is displayed.
The KaBroadcast backend suppresses Bukkit's native join and quit messages and displays the proxy event using its local template.
While a player is online, the backend uploads a quit_snapshot. A live quit_prepare at logout is preferred; when no other player can carry that Plugin Messaging packet from the source backend, the proxy uses the snapshot after confirming the disconnect so the last player's quit message is not lost.
Targeted Announcements#
A backend can request that an announcement be sent to a single player via broadcast/publish_targeted. KaProxy resolves the target player by name and sends broadcast/announcement_targeted only to that player's backend, which renders and delivers it to the target with the Bukkit API.
Death Messages#
The KaBroadcast backend reads Bukkit's final death text, suppresses the local native death message, and sends a death event. KaProxy adds the source backend and forwards it as player_death; each backend renders it with its own death template.
Every public event includes a UUID eventId. The proxy and backends keep short-lived deduplication state so one event is not displayed repeatedly.
Protocol Actions#
Backend to proxy:
broadcast/publish: announcement witheventId, sender, and message.broadcast/publish_targeted: targeted announcement witheventId, target player name, sender, and message.broadcast/death: death event witheventId, player UUID, player name, plain-text fallback, and component JSON.broadcast/switch_publish: the switch result rendered by the destination backend.broadcast/quit_snapshot: a rendered quit payload uploaded while the player is online, used only when a real disconnect has noquit_prepare.
Proxy to backend:
broadcast/announcementbroadcast/announcement_targeted: targeted announcement, sent only to the target player's backend.broadcast/player_joinbroadcast/player_switchbroadcast/player_quitbroadcast/player_death: carries both the plain-text fallback and component JSON; old backends without component JSON are converted to a plain text component by the proxy.broadcast/switch_request: asks the destination backend for its rendered switch result.