COI Client communicates with the server-side Paper plugin exclusively through Fabric custom payloads — Minecraft’s built-in plugin messaging system carried over the play connection. Every channel is prefixedDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ikeepcalm/coi-client/llms.txt
Use this file to discover all available pages before exploring further.
coi-client:, and there is no REST API, WebSocket, or external transport involved. All messages travel over the same TCP connection the player uses to play, making the integration zero-configuration from a network standpoint.
Channel Summary
All seven channels are listed below. Two are sent Client → Server (player actions), and five are sent Server → Client (server-authoritative state updates).| Direction | Channel | Payload Class | Purpose |
|---|---|---|---|
| C→S | coi-client:use | AbilityUsePayload | Activate an ability by ID |
| C→S | coi-client:request | AbilityRequestPayload | Request the available abilities list |
| S→C | coi-client:abilities | AbilitiesPayload | Deliver the full abilities list to the client |
| S→C | coi-client:cooldown | CooldownPayload | Set an ability on cooldown for N ticks |
| S→C | coi-client:effect | VisualEffectPayload | Trigger or stop a client-side visual effect |
| S→C | coi-client:mythical | MythicalFormPayload | Apply or remove a mythical creature form |
| S→C | coi-client:conditions | ConditionsPayload | Sync the player’s beyonder condition state |
All S→C receivers are registered globally via
ClientPlayNetworking.registerGlobalReceiver during mod initialization. It is safe to send any S→C payload at any point after the player completes the login handshake — you do not need to wait for a client-side ready signal.Registering Channels in Paper
On the Paper side, register the channels your plugin intends to send in youronEnable() method using the Messenger API. You must register each outgoing channel before sending on it.
Message Flow
The canonical interaction between a joining player and the server follows these steps:Player joins the server
The Minecraft client completes the login sequence and the play connection is established.
Client sends coi-client:request
CircleOfImaginationClient automatically fires requestAbilitiesFromServer() on the ClientPlayConnectionEvents.JOIN event, sending an empty AbilityRequestPayload to the server. The same request is also fired when the player opens the Ability Binding screen (default key: K).Server responds with coi-client:abilities
Your Paper plugin receives the request, looks up the player’s pathway and unlocked abilities, builds a semicolon-separated abilities string, and sends back an
AbilitiesPayload.coi-client:cooldown), trigger visual effects (coi-client:effect), apply mythical forms (coi-client:mythical), and sync beyonder conditions (coi-client:conditions) at any time in response to gameplay events.
Wire Format
All payloads use a sequential codec overRegistryFriendlyByteBuf. There are only two field types used across the entire protocol:
| Type | Write method | Read method | Notes |
|---|---|---|---|
String | buf.writeUtf(value) | buf.readUtf() | UTF-8, length-prefixed varint |
int | buf.writeInt(value) | buf.readInt() | Big-endian 32-bit signed integer |