Difference between revisions of "Plugin channels"

From wiki.vg
Jump to navigation Jump to search
(→‎MC|DebugPath: 1.10 snapshots have some code that can be used to partially find meaning in this, though it's still not clear)
m (Join Game -> Login (play))
 
(82 intermediate revisions by 15 users not shown)
Line 1: Line 1:
'''Plugin channels''' allow client mods and server plugins to communicate without cluttering up chat. [http://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/ This post by Dinnerbone] is a good introduction and basic documentation.
+
'''Plugin channels''' allow client mods and server plugins to communicate without cluttering up chat. [https://web.archive.org/web/20220711204310/https://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/ This post by Dinnerbone] is a good introduction and basic documentation.
 
{{anchor|Internal}}
 
{{anchor|Internal}}
== Reserved channels ==
+
== Definitions ==
=== <code>REGISTER</code> ===
+
=== Data Types ===
''Two-way''
 
  
Allows the client or server to register for one or more custom channels, indicating that data should be sent on those channels if the receiving end supports it too. Payload is a null (<code>0x00</code>) separated list of strings.
+
==== PathEntity ====
  
=== <code>UNREGISTER</code> ===
+
Represents calculated path of entity.
''Two-way''
 
  
Allows the client or server to unregister from one or more custom channels, indicating that the receiving end should stop sending data on those channels. Payload is a null-separated list of strings. This is only useful if plugins are disabled/unloaded while the client is connected.
+
{| class="wikitable"
 
+
! Name
== Channels internal to Minecraft ==
+
! Type
Since 1.3, Minecraft itself uses several plugin channels to implement new features. These internal channel names are prefixed by <code>MC|</code>. They are '''not''' formally registered using the REGISTER channel. The vanilla Minecraft server will send these packets regardless, and the vanilla client will accept them.
+
! Notes
 
+
|-
=== <code>MC|AdvCmd</code> ===
+
| Current path index
{{anchor|MC.7CAdvCdm}}''Client to server''
+
| {{Type|Int}}
 +
| Index in the points array that the entity is currently targeting.  
 +
|-
 +
| Target
 +
| PathPoint
 +
|
 +
|-
 +
| Number of points
 +
| {{Type|Int}}
 +
| Number of elements in the following array
 +
|-
 +
| Points array
 +
| {{Type|Array}} of PathPoint
 +
| The actual points on the path
 +
|-
 +
| Open set length
 +
| {{Type|Int}}
 +
| Number of elements in the following array
 +
|-
 +
| Open set
 +
| {{Type|Array}} of PathPoint
 +
|
 +
|-
 +
| Closed set length
 +
| {{Type|Int}}
 +
| Number of elements in the following array
 +
|-
 +
| Closed set
 +
| {{Type|Array}} of PathPoint
 +
|
 +
|}
  
Sets the contents of a command block or command block Minecart. The Notchain client only uses this for command block minecarts and uses [[#MC.7CAutoCmd|<code>MC|AutoCmd</code>]] for blocks, but the Notchian server still accepts it for either.
+
You can read more here[https://en.wikipedia.org/wiki/A*_search_algorithm].
  
In 1.8 and earlier the name of this channel was incorrectly spelled as <code>MC|AdvCdm</code>.  This was fixed in snapshot {{Minecraft Wiki|15w34a}}.
 
  
The packet starts with a single byte, which determines the type of thing being edited (block or minecart).  If it is 0, then it is a block and the location is 3 ints; if it is 1, then it is a minecart and the location is the entity's EID as an int.
+
==== PathPoint ====
  
; type = 0
+
Represents single point in path
  
 
{| class="wikitable"
 
{| class="wikitable"
  ! Type !! Field Name !! Field Type !! Notes
+
  ! Name
 +
! Type
 +
! Notes
 
  |-
 
  |-
  | rowspan=6 | 0x00
+
  | X
  | X || Int ||  
+
  | {{Type|Int}}
 +
|
 
  |-
 
  |-
  | Y || Int ||  
+
  | Y
 +
| {{Type|Int}}
 +
|
 
  |-
 
  |-
  | Z || Int ||  
+
  | Z
 +
| {{Type|Int}}
 +
|
 
  |-
 
  |-
  | Command || String ||
+
  | Distance from origin
 +
| {{Type|Float}}
 +
|  
 
  |-
 
  |-
  | Track Output || Boolean ||
+
  | Cost
  |}
+
| {{Type|Float}}
 
+
|  
; type = 1
+
|-
 
+
  | Cost malus
{| class="wikitable"
+
| {{Type|Float}}
  ! Type !! Field Name !! Field Type !! Notes
+
  | Number that is rendered
 
  |-
 
  |-
  | rowspan=3 | 0x01
+
  | Has been visited
  | Entity ID || Int || 
+
  | {{Type|Boolean}}
 +
|  
 
  |-
 
  |-
  | Command || String ||
+
  | Node type
 +
| {{Type|Int}} {{Type|Enum}}
 +
| See below
 
  |-
 
  |-
  | Track Output || Boolean ||
+
  | Distance to target
 +
| {{Type|Float}}
 +
|
 
  |}
 
  |}
  
=== <code>MC|AutoCmd</code> ===
+
Values for node type:
''Client to server''
 
  
Sets command block contents.  This can only be used to edit command blocks; command block minecarts cannot be used with it.  To edit a command block minecart, use [[#MC.7CAdvCmd|<code>MC|AdvCmd</code>]].
+
* 0: BLOCKED
 +
* 1: OPEN
 +
* 2: WALKABLE
 +
* 3: TRAPDOOR
 +
* 4: FENCE
 +
* 5: LAVA
 +
* 6: WATER
 +
* 7: WATER_BORDER
 +
* 8: RAIL
 +
* 9: DANGER_FIRE
 +
* 10: DAMAGE_FIRE
 +
* 11: DANGER_CACTUS
 +
* 12: DAMAGE_CACTUS
 +
* 13: DANGER_OTHER
 +
* 14: DAMAGE_OTHER
 +
* 15: DOOR_OPEN
 +
* 16: DOOR_WOOD_CLOSED
 +
* 17: DOOR_IRON_CLOSED
 +
* 18: BREACH
 +
* 19: LEAVES
 +
* 20: STICKY_HONEY
 +
* 21: COCOA
  
{| class="wikitable"
+
== Reserved channels ==
! Field Name !! Field Type !! Notes
+
=== <code>minecraft:register</code> ===
|-
+
''Two-way''
| X || Int ||
 
|-
 
| Y || Int ||
 
|-
 
| Z || Int ||
 
|-
 
| Command || String ||
 
|-
 
| Track output || Boolean || If false, the output of the previous command will not be stored within the command block.
 
|-
 
| Mode || String enum || One of "SEQUENCE", "AUTO", and "REDSTONE"
 
|-
 
| Is conditional || Boolean ||
 
|-
 
| Automatic || Boolean ||
 
|}
 
  
=== <code>MC|BEdit</code> ===
+
Allows the client or server to register for one or more custom channels, indicating that data should be sent on those channels if the receiving end supports it too. Payload is a null (<code>0x00</code>) separated list of strings.
''Client to server''
 
  
When a player edits an unsigned book.
+
This channel was [https://twitter.com/Dinnerbone/status/1012052979250319360 renamed] from <code>REGISTER</code> in 1.13.
  
This payload is simply a set of bytes corresponding to a [[Slot Data|Slot]].
+
=== <code>minecraft:unregister</code> ===
 +
''Two-way''
  
The [[NBT]] section of the Slot contains
+
Allows the client or server to unregister from one or more custom channels, indicating that the receiving end should stop sending data on those channels. Payload is a null-separated list of strings. This is only useful if plugins are disabled/unloaded while the client is connected.
  
<pre>
+
This channel was [https://twitter.com/Dinnerbone/status/1012052979250319360 renamed] from <code>UNREGISTER</code> in 1.13.
TAG_Compound(<nowiki>''</nowiki>): 1 entry
 
{
 
  TAG_List('pages'): 2 entries
 
  {
 
    TAG_String(0): 'Something on Page 1'
 
    TAG_String(1): 'Something on Page 2'
 
  }
 
}
 
</pre>
 
  
=== <code>MC|BOpen</code> ===
+
== Channels internal to Minecraft ==
''Server to client''
+
Since 1.3, Minecraft itself uses several plugin channels to implement new features. These internal channels use the <code>minecraft</code> namespace. They are '''not''' formally registered using the register channel. The vanilla Minecraft server will send these packets regardless, and the vanilla client will accept them.
  
When a player right clicks with a signed book. This tells the client to open the book GUI.
+
Note that there were originally more channels included, but most of these were removed in 1.13.  See [https://wiki.vg/index.php?title=Plugin_channels&oldid=14089 this revision of the article] for the original list.  As of 1.14, the only remaining channels other than the brand one are debugging-related channels, which are not normally sent.
  
The payload is a VarInt enum for the selected hand: 0 for the main hand, 1 for the offhand.
+
=== <code>minecraft:brand</code> ===
 
+
''Two-way''
=== <code>MC|BSign</code> ===
 
''Client to server''
 
  
When a player signs a book.
+
''For version 1.12.2(protocol version 340) and below, channel name is: <code>MC|Brand</code>''
  
This payload is simply a set of bytes corresponding to a [[Slot Data|Slot]].
+
Announces the server and client implementation name right after a player has logged in. For the Notchian client and server, this is "vanilla" (which is chosen using the function <code>net.minecraft.client.ClientBrandRetriever.getClientModName()</code> and encoded as a UTF-8 string).
  
The Item ID in the Slot should be a Written Book
+
These brands are used in crash reports and a few other locations. It's recommended that custom clients and servers use their own brand names for the purpose of identification (for the Notchian client, the class used to get the brand is one of the few non-obfuscated classes).  The brand is not processed in any other way, and Notchian clients will connect to servers with different brands with no issue (the brand is not used to validate).
  
The [[NBT]] section of the Slot contains
+
The Notchian server sends a <code>minecraft:brand</code> packet right after it sends a [[Protocol#Login (play)|Login (play)]] packet, and the Notchian client sends it right after receiving a Login (play) packet.  However, some modified clients and servers will not send this packet (or will take longer to send it than normal), so it is important to not crash if the brand has not been sent.  Additionally, the brand may change at any time (for instance, if connected through a BungeeCord instance, you may switch from a server with one brand to a server with another brand without receiving a Login (play) packet).
  
<pre>
+
=== <code>minecraft:debug/path</code> ===
TAG_Compound(<nowiki>''</nowiki>): 3 entires
 
{
 
  TAG_String('author'): 'Steve'
 
  TAG_String('title'): 'A Wonderful Book'
 
  TAG_List('pages'): 2 entries
 
  {
 
    TAG_String(0): 'Something on Page 1'
 
    TAG_String(1): 'Something on Page 2'
 
  }
 
}
 
</pre>
 
 
 
=== <code>MC|Beacon</code> ===
 
''Client to server''
 
 
 
Two integers corresponding to the 2 effects a user wishes to have active.
 
 
 
=== <code>MC|Brand</code> ===
 
''Two-way''
 
 
 
Announces the server and client implementation name right after a player has logged in. For the Notchian client and server server, this is "vanilla" (encoded as a [[Data Types|protocol string]]: a UTF-8 string with the length prefixed as a VarInt).
 
 
 
These brands are used in crash reports and a few other locations; it's recommended that custom clients and servers use changed brands for the purpose of identification (for the Notchian client, the class used to get the brand is one of the few non-obfuscated classes).  The brand is not processed in any other way, and Notchian clients will connect to servers with changed brands with no issue (the brand is not used to validate).
 
 
 
The Notchian server sends a <code>MC|Brand</code> packet right after it sends a [[#Join_Game|Join Game]] packet, and the Notchian client sends it right after receiving a Join Game packet.  However, some modified clients and servers will not send this packet (or will take longer to send it than normal), so it is important to not crash if the brand has not been sent.  Additionally, the brand may change at any time (for instance, if connected through a BungeeCord instance, you may switch from a server with one brand to a server with another brand without receiving a Join Game packet).
 
 
 
=== <code>MC|DebugPath</code> ===
 
 
''Server to client''
 
''Server to client''
  
[[File:MC-DebugPath_in_16w14a.png|thumb|What appears to be the purpose of <code><nowiki>MC|DebugPath</nowiki></code> as seen in the [http://mojang.com/2016/04/minecraft-snapshot-16w14a/ snapshot 16w14a announcement].  This is ''not'' found in the normal game.]]
+
[[File:MC-DebugPath_in_16w14a.png|thumb|What appears to be the purpose of <code><nowiki>minecraft:debug/path</nowiki></code> as seen in the [https://web.archive.org/web/20161224194609/http://mojang.com/2016/04/minecraft-snapshot-16w14a/ snapshot 16w14a announcement].  This is ''not'' found in the normal game.]]
  
Never sent, but does something with pathfinding debugging.  The client reads the data and stores it, but does not currently render anything with it.  1.10 snapshots currently have code to render it, though it can never be enabled.
+
Never sent, but does something with pathfinding debugging.  The client reads the data and stores it, but its renderer cannot be enabled without modifications.
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 157: Line 164:
 
  |-
 
  |-
 
  | Unknown 1
 
  | Unknown 1
  | Int
+
  | {{Type|Int}}
 
  | Used as a key in the mapping that stores this data; might be an entity ID?
 
  | Used as a key in the mapping that stores this data; might be an entity ID?
 
  |-
 
  |-
 
  | Unknown 2
 
  | Unknown 2
  | Float
+
  | {{Type|Float}}
 
  | Appears to be the "radius" of the squares for each pathpoint
 
  | Appears to be the "radius" of the squares for each pathpoint
 
  |-
 
  |-
 
  | Entity
 
  | Entity
 
  | PathEntity
 
  | PathEntity
  | See below
+
  | See Data Types above
 
  |}
 
  |}
  
PathEntity structure:
+
PathEntity's index point is rendered red; the others are rendered blue. PathEntity's target PathPoint is rendered as a green cube. PathPoint's closed set is rendered red, and open set is rendered green.
  
{| class="wikitable"
+
=== <code>minecraft:debug/neighbors_update</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but used to debug block updates.  Does not render without modifying the client.
 +
 
 +
{|class="wikitable"
 
  ! Name
 
  ! Name
 
  ! Type
 
  ! Type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  | Current path index
+
  | Time
  | Int
+
  | {{Type|VarLong}}
  | Index in the points array that the entity is currently targetingThat point is rendered red; the others are rendered blue.
+
| World timestamp at which the update occurred.  200 ticks after this timestamp, the given update stops rendering.
 +
|-
 +
| Location
 +
| {{Type|Position}}
 +
  | Location of the block that updated.
 +
|}
 +
 
 +
=== <code>minecraft:debug/structures</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but (presumably) used to debug structures.  Does not render without modifying the client.
 +
 
 +
Adds a single new structure, which will always be rendered if the player is in the same dimension.
 +
 
 +
 
 +
{| class="wikitable"
 +
!colspan="2"| Field name
 +
!colspan="2"| Field type
 +
! Notes
 +
|-
 +
|colspan="2"| Dimension
 +
  |colspan="2"| {{Type|Int}}
 +
| The dimension the structure is in.
 +
|-
 +
|colspan="2"| Bounding box minX
 +
|colspan="2"| {{Type|Int}}
 +
|rowspan="6"| Main box for the structure (rendered in white). min must be less than max
 +
|-
 +
|colspan="2"| Bounding box minY
 +
|colspan="2"| {{Type|Int}}
 +
|-
 +
|colspan="2"| Bounding box minZ
 +
|colspan="2"| {{Type|Int}}
 +
|-
 +
|colspan="2"| Bounding box maxX
 +
|colspan="2"| {{Type|Int}}
 +
|-
 +
|colspan="2"| Bounding box maxY
 +
|colspan="2"| {{Type|Int}}
 +
|-
 +
|colspan="2"| Bounding box maxZ
 +
|colspan="2"| {{Type|Int}}
 +
|-
 +
|colspan="2"| Count
 +
|colspan="2"| {{Type|Int}}
 +
| Number of elements in the following array
 
  |-
 
  |-
  | Unknown 1
+
  |rowspan="7"| Sub-boxes
  | PathPoint
+
| Bounding box minX
  | Green cube, possibly the target?
+
  |rowspan="7"| {{Type|Array}}
 +
  | {{Type|Int}}
 +
|rowspan="6"| min must be less than max
 
  |-
 
  |-
  | Number of points
+
  | Bounding box minY
  | Int
+
  | {{Type|Int}}
| Length of the following array
 
 
  |-
 
  |-
  | Points array
+
  | Bounding box minZ
  | Array of PathPoint
+
  | {{Type|Int}}
| The actual points on the path
 
 
  |-
 
  |-
  | Unknown 2 length
+
  | Bounding box maxX
  | Int
+
  | {{Type|Int}}
| Length of the following array
 
 
  |-
 
  |-
  | Unknown 2
+
  | Bounding box maxY
  | Array of PathPoint
+
  | {{Type|Int}}
| Displayed in blue
 
 
  |-
 
  |-
  | Unknown 3 length
+
  | Bounding box maxZ
  | Int
+
  | {{Type|Int}}
| Length of the following array
 
 
  |-
 
  |-
  | Unknown 3
+
  | Flag
  | Array of PathPoint
+
  | {{Type|Boolean}}
  | Displayed in red
+
  | If true, the sub-box is rendered in green, otherwise in blue.
 
  |}
 
  |}
  
PathPoint structure:
+
 
 +
=== <code>minecraft:debug/worldgen_attempt</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but (presumably) used to debug something with world generation.  Does not render without modifying the client.
 +
 
 +
Adds a colored cube of the list of things to render.  This cube is never removed.
  
 
{| class="wikitable"
 
{| class="wikitable"
  ! Name
+
  ! Field name
  ! Type
+
  ! Field type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  | X
+
  | Location
  | Int
+
  | {{Type|Position}}
  |
+
  | The center of the location to render.
 
  |-
 
  |-
  | Y
+
  | Size
  | Int
+
  | {{Type|Float}}
|
+
  | Diameter/side length of a cube to render.
|-
 
| Z
 
| Int
 
  |
 
 
  |-
 
  |-
  | Unknown 1
+
  | Red
  | Float
+
  | {{Type|Float}}
  |  
+
  | Red value to render, from 0.0 to 1.0.
 
  |-
 
  |-
  | Unknown 2
+
  | Green
  | Float
+
  | {{Type|Float}}
  |  
+
  | Green value to render, from 0.0 to 1.0.
 
  |-
 
  |-
  | Unknown 3
+
  | Blue
  | Float
+
  | {{Type|Float}}
  | Number that is rendered
+
  | Blue value to render, from 0.0 to 1.0.
 
  |-
 
  |-
  | Has been visited
+
  | Alpha
  | Boolean
+
  | {{Type|Float}}
  |  
+
| Alpha value to render, from 0.0 to 1.0.
 +
|}
 +
 
 +
=== <code>minecraft:debug/poi_ticket_count</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but used to set amount of free tickets for [[POI]]
 +
 
 +
{| class="wikitable"
 +
! Field name
 +
  ! Field type
 +
|-
 +
| Location of POI
 +
| {{Type|Position}}
 
  |-
 
  |-
  | Node type
+
  | Num of tickets
  | Int enum
+
  | {{Type|VarInt}}
| See below
 
|-
 
| Distance to target
 
| Float
 
|
 
 
  |}
 
  |}
  
Values for node type:
+
=== <code>minecraft:debug/poi_added</code> ===
 +
''Server to client''
  
* 0: BLOCKED
+
Never sent, but used to add debugging [[POI]].  Does not render without modifying the client.
* 1: OPEN
 
* 2: WALKABLE
 
* 3: TRAPDOOR
 
* 4: FENCE
 
* 5: LAVA
 
* 6: WATER
 
* 7: RAIL
 
* 8: DANGER_FIRE
 
* 9: DAMAGE_FIRE
 
* 10: DANGER_CACTUS
 
* 11: DAMAGE_CACTUS
 
* 12: DANGER_OTHER
 
* 13: DAMAGE_OTHER
 
* 14: DOOR_OPEN
 
* 15: DOOR_WOOD_CLOSED
 
* 16: DOOR_IRON_CLOSED
 
  
=== <code>MC|ItemName</code> ===
+
{| class="wikitable"
''Client to server''
+
! Field name
 +
! Field type
 +
! Notes
 +
|-
 +
| Location
 +
| Positon
 +
| Location of POI
 +
|-
 +
| POI Type
 +
| {{Type|String}} (x)
 +
| Type of POI, see the [[POI]] article
 +
|-
 +
| Tickets
 +
| {{Type|VarInt}}
 +
| Amount of free tickets
 +
|}
  
When a player uses an anvil to name an item. The payload is just a string: the item's new name.
+
=== <code>minecraft:debug/poi_removed</code> ===
 +
''Server to client''
  
=== <code>MC|PickItem</code> ===
+
Never sent, but used to remove debugging [[POI]].  Does not render without modifying the client.
''Client to server''
 
  
Used to swap out an empty space on the hotbar with the item in the given inventory slot. The Notchain client uses this for pick block functionality (middle click) to retrieve items from the inventory.
+
{| class="wikitable"
 +
  ! Field name
 +
! Field type
 +
! Notes
 +
|-
 +
| Location
 +
| Positon
 +
| Location of POI
 +
|}
  
Payload is a single varint, which is the slot in the inventory to grab from.
+
=== <code>minecraft:debug/village_sections</code> ===
 +
''Server to client''
  
The server will first search the player's hotbar for an empty slot, starting from the current slot and looping around to the slot before itIf there are no empty slots, it will start a second search from the current slot and find the first slot that does not contain an enchanted item.  If there still are no slots that meet that criteria, then the server will use the currently selected slot.
+
Never sent, but used to add/remove debugging VilliageSectionsDoes not render without modifying the client.
  
After finding the appropriate slot, the server swaps the items and then send 3 packets:
+
{| class="wikitable"
 +
! Field name
 +
! Field type
 +
! Notes
 +
|-
 +
| Num of VillageSection locations to be added
 +
| {{Type|VarInt}}
 +
| Number of VillageSection locations in following fields.
 +
|-
 +
| Location of VillageSection
 +
| {{Type|Array}} of {{Type|Position}}
 +
| Locations of VillageSections
 +
|-
 +
| Num of VillageSection locations to be removed
 +
| {{Type|VarInt}}
 +
| Number of VillageSection locations in following fields.
 +
|-
 +
| Location of VillageSection
 +
| {{Type|Array}} of {{Type|Position}}
 +
| Locations of VillageSections
 +
|}
  
* [[Protocol#Set slot|Set Slot]], with window ID set to -2 and slot set to the newly chosen slot and the item set to the item that is now in that slot (which was previously at the slot the client requested)
+
=== <code>minecraft:debug/goal_selector</code> ===
* Set Slot, with window ID set to -2 and slot set to the slot the player requested, with the item that is now in that slot and was previously on the hotbar slot
+
''Server to client''
* [[Protocol#Held_Item_Change_.28clientbound.29|Held Item Change]], with the slot set to the newly chosen slot.
 
  
=== <code>MC|PingHost</code> ===
+
Never sent, but (presumably) used to debug goal selectors.  Does not render without modifying the client.
''Client to server''
 
  
Sent ''after'' a Server list ping in Minecraft 1.6. More information on [[Server List Ping#1.6]]. In 1.7 and above, the [[Protocol#Request|Request]] ([[Protocol#Status|Status]], 0x00, serverbound) packet is instead sent ''before'' the ping.
+
Adds multiple lines of text on the given location, spaced by 0.25 units upward on the Y-axis.
  
{{Warning|Since this plugin channel is only sent for the legacy server list ping, it uses the older packet structure.}}}
+
{| class="wikitable"
 +
!colspan="2"| Field name
 +
!colspan="2"| Field type
 +
! Notes
 +
|-
 +
|colspan="2"| Location
 +
|colspan="2"| {{Type|Position}}
 +
| The location of the goal selector.
 +
|-
 +
|colspan="2"| Unknown
 +
|colspan="2"| {{Type|Int}}
 +
| Key for the goal selector mapping, possibly entity ID.
 +
|-
 +
|colspan="2"| Count
 +
|colspan="2"| {{Type|Int}}
 +
| Number of elements in the following array.
 +
|-
 +
|rowspan="3"| Goals
 +
| Priority
 +
|rowspan="3"| {{Type|Array}}
 +
| {{Type|Int}}
 +
| Currently unused
 +
|-
 +
| Is running
 +
| {{Type|Boolean}}
 +
| Defines the color of the text. #00FF00 if true, #CCCCCC otherwise
 +
|-
 +
| Name
 +
| {{Type|String}} (255)
 +
|
 +
|}
  
=== <code>MC|StopSound</code> ===
+
=== <code>minecraft:debug/brain</code> ===
 +
''Server to client''
  
Used to implement {{Minecraft Wiki|Commands#StopSound|the <code>/stopsound</code> command}}. Stops a sound that is currently playing on the client.
+
Never sent. Used to debug villager's brain. Doesn't render without modifying the client.
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 309: Line 431:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  | Sound name
+
  | X
  | String
+
| {{Type|Double}}
  | A [http://pokechu22.github.io/Burger/1.9.html#sounds sound effect name].  If left empty, ''all'' sounds are stopped.
+
| X coordinate of villager's position
 +
|-
 +
| Y
 +
| {{Type|Double}}
 +
| Y coordinate of villager's position
 +
|-
 +
| Z
 +
| {{Type|Double}}
 +
| Z coordinate of villager's position
 +
|-
 +
| Unique ID
 +
| {{Type|UUID}}
 +
| Villager's Unique ID
 +
|-
 +
| Entity ID
 +
| EID
 +
| Villager's Entity ID
 +
|-
 +
| Name
 +
| {{Type|String}} (x)
 +
| Villager's name
 +
  |-
 +
| Profession
 +
| {{Type|String}} (x)
 +
  | Villager's [https://minecraft.wiki/w/Villager#Professions profession]
 
  |-
 
  |-
  | Sound category
+
  | XP
  | String
+
  | {{Type|VarInt}}
  | Should be one of the sound categories used in [[Protocol#Named Sound Effect|Named Sound Effect]], but if it's invalid or empty then it is (intentionally) treated as ''all'' sound categories.
+
| Villager's experience points
 +
|-
 +
| Inventory
 +
| {{Type|String}} (x)
 +
  | Villager's inventory (need more research on that)
 +
|-
 +
| Has path
 +
| {{Type|Boolean}}
 +
| Indicates whether the next field is Path
 +
|-
 +
| Path
 +
| PathEntity
 +
| Movement path
 +
|-
 +
| Wants golem
 +
| {{Type|Boolean}}
 +
| Indicates whether the villager in need of Golem.  
 
  |}
 
  |}
  
Emptiness of sound category or sound name can be combined, IE a empty sound name but a set sound category will stop all sounds in the given category.
+
=== <code>minecraft:debug/bee</code> ===
 
+
''Server to client''
=== <code>MC|Struct</code> ===
 
''Client to server''
 
  
Does something with the (inaccessible) {{Minecraft Wiki|Structure block}}.
+
Never sent, but (presumably) used to debug bee pathfinding to hives and flowers. Does not render without modifying the client.
  
 
{| class="wikitable"
 
{| class="wikitable"
  ! Field Name
+
  ! Field name
  ! Field Type
+
  ! Field type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  | X || Int || Tile entity location
+
  | X
 +
| {{Type|Double}}
 +
| X coordinate of rendering location
 
  |-
 
  |-
  | Y || Int || Tile entity location
+
  | Y
 +
| {{Type|Double}}
 +
| Y coordinate of rendering location
 
  |-
 
  |-
  | Z || Int || Tile entity location
+
  | Z
 +
| {{Type|Double}}
 +
| Z coordinate of rendering location
 
  |-
 
  |-
  | Action
+
  | Unique ID
  | Byte
+
  | {{Type|UUID}}
  | See below
+
  | Bee's unique ID
 
  |-
 
  |-
  | Mode
+
  | EID
  | String enum
+
  | {{Type|VarInt}}
  | One of "SAVE", "LOAD", "CORNER", "DATA".
+
  | EID of the Bee
 
  |-
 
  |-
  | Name
+
  | Has hive position
  | String
+
  | {{Type|Boolean}}
  |
+
  | True if following field value is location of bee hive.
 
  |-
 
  |-
  | Offset X || Int ||  
+
  | Location of hive
 +
| {{Type|Position}}
 +
| Optional position of bee hive.
 
  |-
 
  |-
  | Offset Y || Int ||  
+
  | Has flower position
 +
| {{Type|Boolean}}
 +
| True if following field value is location of flower.
 
  |-
 
  |-
  | Offset Z || Int ||  
+
  | Location of flower
 +
| {{Type|Position}}
 +
| Optional position of flower.
 
  |-
 
  |-
  | Size X || Int ||  
+
  | Travel ticks
 +
| {{Type|VarInt}}
 +
| Purpose unknown.
 
  |-
 
  |-
  | Size Y || Int ||  
+
  | Has path
 +
| {{Type|Boolean}}
 +
| True if following field value is path.
 
  |-
 
  |-
  | Size Z || Int ||  
+
  | Path
 +
| PathEntity
 +
| Serialized path.
 
  |-
 
  |-
  | Mirror
+
  | Num of goals
  | String enum
+
  | {{Type|VarInt}}
  | One of "NONE", "LEFT_RIGHT", "FRONT_BACK".
+
  | Number of goals in following fields.
 
  |-
 
  |-
  | Rotation
+
  | Goal
  | String enum
+
  | {{Type|Array}} of {{Type|String}} (x)
  | One of "NONE", "CLOCKWISE_90", "CLOCKWISE_180", "COUNTERCLOCKWISE_90".
+
  | Probably string name of goal
 
  |-
 
  |-
  | Metadata
+
  | Num of blacklisted hives
  | String
+
  | {{Type|VarInt}}
  |  
+
  | Number of blacklisted hives in following fields.
 
  |-
 
  |-
  | Ignore entities
+
  | Blacklisted hive
  | Boolean
+
  | {{Type|Array}} of {{Type|Position}}
  |
+
  | Position of blacklisted hive.
 
  |}
 
  |}
  
Possible modes:
+
=== <code>minecraft:debug/hive</code> ===
 +
''Server to client''
  
* 2 - Save the structure
+
Never sent, but (presumably) used to debug hives. Does not render without modifying the client.
* 3 - Load the structure
+
 
* 4 - Detect size
+
{| class="wikitable"
 +
! Field name
 +
! Field type
 +
! Notes
 +
|-
 +
| Location
 +
| {{Type|Position}}
 +
| Rendering location. If a player is more than 30 blocks away, rendering is skipped.
 +
|-
 +
| Hive type
 +
| {{Type|String}}
 +
| Name of hive type
 +
|-
 +
| Occupant count
 +
| {{Type|VarInt}}
 +
| Number of bees inside this hive
 +
|-
 +
| Honey level
 +
| {{Type|VarInt}}
 +
| Level of honey inside this hive
 +
|-  
 +
| Sedated
 +
| {{Type|Boolean}}
 +
| True if bees are sedated, false otherwise
 +
|-  
 +
| Last seen
 +
| {{Type|VarLong}}
 +
| Never used in debug renderer?
 +
|}
  
=== <code>MC|TrList</code> ===
+
=== <code>minecraft:debug/game_test_add_marker</code> ===
 
''Server to client''
 
''Server to client''
  
The list of trades a villager NPC is offering.
+
Never sent, but used to set different debug markers in the world.
 +
Does not render for vanilla clients below version 1.16.5.
  
 
{| class="wikitable"
 
{| class="wikitable"
  ! colspan="2" | Field Name
+
  ! Field name
  ! colspan="2" | Field Type
+
  ! Field type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  | colspan="2" | Window ID
+
  | Location
  | colspan="2" | Int
+
  | {{Type|Position}}
  | The ID of the window that is open; this is an int rather than a byte.
+
  | Location of the marker.
 
  |-
 
  |-
  | colspan="2" | Size
+
  | Color
  | colspan="2" | Byte
+
| {{Type|VarInt}}
  | The number of trades in the following array
+
| Encoded ARGB color (Read below about encoding). 
 +
|-
 +
| Name
 +
  | {{Type|String}} (x)
 +
  | Name of marker
 +
|-
 +
| Lifetime
 +
| {{Type|VarInt}}
 +
| Time in milliseconds, after which the marker will be destroyed
 +
|}
 +
 
 +
Color can be encoded as following:
 +
 
 +
<code>
 +
int encoded = 0;<br>
 +
encoded = encoded | ((int) blueChannel);<br>
 +
encoded = encoded | ((int) greenChannel << 8);<br>
 +
encoded = encoded | ((int) redChannel << 16);<br>
 +
encoded = encoded | ((int) alphaChannel << 24);<br>
 +
return encoded;
 +
</code>
 +
 
 +
Note that color is normalized by client.
 +
 
 +
=== <code>minecraft:debug/game_test_clear</code> ===
 +
 
 +
Clears all debug markers.
 +
 
 +
=== <code>minecraft:debug/raids</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but used to set debug raid centers. Does not render without modifying the client.
 +
 
 +
{| class="wikitable"
 +
! Field name
 +
! Field type
 +
! Notes
 
  |-
 
  |-
  | rowspan="7" | Trades
+
  | Num of locations
| Input item 1
+
  | {{Type|VarInt}}
  | rowspan="7" | Array
+
  | Number of locations provided by following array
| Slot
 
  | The first item the villager is buying
 
 
  |-
 
  |-
  | Output item
+
  | Locations
  | Slot
+
  | {{Type|Array}} of {{Type|Position}}
  | The item the villager is selling
+
| Locations of raid centers
 +
  |}
 +
 
 +
=== <code>minecraft:debug/game_event</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but used to debug game events. Does not render without modifying the client.
 +
 
 +
{| class="wikitable"
 +
! Field name
 +
! Field type
 +
! Notes
 
  |-
 
  |-
  | Has second item
+
  | Game event identifier
  | Boolean
+
  | {{Type|String}} (x)
  | Whether there is a second item
+
  |  
 
  |-
 
  |-
  | Input item 2
+
  | Game event location
  | Optional slot
+
  | {{Type|Position}}
  | The second item the villager is buying; only present if they have a second item.
+
  |  
 +
|}
 +
 
 +
=== <code>minecraft:debug/game_event_listeners</code> ===
 +
''Server to client''
 +
 
 +
Never sent, but used to track game event listeners. Does not render without modifying the client.
 +
 
 +
{| class="wikitable"
 +
! Field name
 +
! Field type
 +
! Notes
 
  |-
 
  |-
  | Trade disabled
+
  | Position source type
  | Boolean
+
  | {{Type|Identifier}}
  | True if the trade is disabled; false if the trade is enabled.
+
  |  
 
  |-
 
  |-
  | Number of tool uses
+
  | Listener data
  | Int
+
  | {{Type|Byte Array}}
  | May actually be the number of times this trade has been used; MCP may be misleading me
+
  |  
 
  |-
 
  |-
  | Maximum number of trade uses
+
  | Listener range
  | Int
+
  | {{Type|VarInt}}
  | Number of times this trade can be used
+
  |  
 
  |}
 
  |}
  
=== <code>MC|TrSel</code> ===
+
{| class="wikitable"
 +
! Position source type
 +
! {{Type|Identifier}}
 +
! Data
 +
|-
 +
| Block position source
 +
| <code>minecraft:block</code>
 +
| Data contain single block position
 +
|-
 +
| Entity position source
 +
| <code>minecraft:entity</code>
 +
| Data contain single EID
 +
|-
 +
|}
 +
=== <code>MC|PingHost</code> ===
 
''Client to server''
 
''Client to server''
  
When a player selects a specific trade offered by a villager NPC.
+
Sent ''after'' a Server list ping in Minecraft 1.6. More information on [[Server List Ping#1.6]]. In 1.7 and above, the [[Protocol#Request|Request]] ([[Protocol#Status|Status]], 0x00, serverbound) packet is instead sent ''before'' the ping.
It contains a single int id corresponding to the selected slot int the players current (trading) inventory.
+
 
 +
{{Warning|Since this plugin channel is only sent for the legacy server list ping, it uses the older packet structure.}}
  
 
== Notable community plugin channels ==
 
== Notable community plugin channels ==
 
Channels listed in this section are not used by the vanilla Minecraft client or server. This is just a likely-incomplete list of channels used by mods/plugins popular within the Minecraft community.
 
Channels listed in this section are not used by the vanilla Minecraft client or server. This is just a likely-incomplete list of channels used by mods/plugins popular within the Minecraft community.
  
=== <code>BungeeCord</code> ===
+
=== <code>bungeecord:main</code> ===
 +
 
 +
Formerly <code>BungeeCord</code>; additionally, note that the channel name is remapped by spigot so that the old name can still be used in plugins.
  
 
[http://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ See here]
 
[http://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ See here]
  
=== <code>FML|HS</code>, <code>FML</code> ===
+
=== <code>fml:handshake</code>, <code>fml:play</code> ===
  
 
{{Main|Minecraft Forge Handshake}}
 
{{Main|Minecraft Forge Handshake}}
 +
 +
Previously <code>FML|HS</code>, <code>FML</code>
  
 
Used by [http://www.minecraftforge.net/forum/index.php Minecraft Forge] to negotiate required mods, among other things.
 
Used by [http://www.minecraftforge.net/forum/index.php Minecraft Forge] to negotiate required mods, among other things.
[https://github.com/MinecraftForge/MinecraftForge/blob/master/src/main/java/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage.java <code>FML|HS</code>]
+
[https://github.com/MinecraftForge/MinecraftForge/blob/1.15.x/src/main/java/net/minecraftforge/fml/network/NetworkInitialization.java <code>fml:handshake</code> and <code>fml:play</code>]
[https://github.com/MinecraftForge/MinecraftForge/blob/master/src/main/java/net/minecraftforge/fml/common/network/internal/FMLNetworkHandler.java <code>FML</code>]
 
  
 
=== <code>ML|OpenTE</code> ===
 
=== <code>ML|OpenTE</code> ===
Line 463: Line 745:
 
Used by the server-side [http://www.enginehub.org/worldedit/ WorldEdit] and the client-side [http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1292886-worldeditcui/ WorldEditCUI] to coordinate selections.
 
Used by the server-side [http://www.enginehub.org/worldedit/ WorldEdit] and the client-side [http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1292886-worldeditcui/ WorldEditCUI] to coordinate selections.
  
=== <code>WDL|INIT</code>, <code>WDL|CONTROL</code>, <code>WDL|REQUEST</code> ===
+
=== <code>wdl:init</code>, <code>wdl:control</code>, <code>wdl:request</code> ===
  
 
{{Main|/World downloader}}
 
{{Main|/World downloader}}
  
 
Used by the client-side [http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2520465 World Downloader mod] to get permission information and perform permission requests.
 
Used by the client-side [http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2520465 World Downloader mod] to get permission information and perform permission requests.
 +
 +
=== <code>world_info</code>, <code>world_id</code>, <code>worldinfo:world_id</code> ===
 +
 +
Used by [https://www.curseforge.com/minecraft/mc-mods/voxelmap VoxelMap] and [https://www.curseforge.com/minecraft/mc-mods/journeymap JourneyMap (1.16.5+)] to query the world ID, which is useful on BungeeCord-style server networks to keep maps unique.
 +
 +
[[Category:Protocol Details]]
 +
[[Category:Minecraft Modern]]

Latest revision as of 14:10, 15 September 2024

Plugin channels allow client mods and server plugins to communicate without cluttering up chat. This post by Dinnerbone is a good introduction and basic documentation.

Definitions

Data Types

PathEntity

Represents calculated path of entity.

Name Type Notes
Current path index Int Index in the points array that the entity is currently targeting.
Target PathPoint
Number of points Int Number of elements in the following array
Points array Array of PathPoint The actual points on the path
Open set length Int Number of elements in the following array
Open set Array of PathPoint
Closed set length Int Number of elements in the following array
Closed set Array of PathPoint

You can read more here[1].


PathPoint

Represents single point in path

Name Type Notes
X Int
Y Int
Z Int
Distance from origin Float
Cost Float
Cost malus Float Number that is rendered
Has been visited Boolean
Node type Int Enum See below
Distance to target Float

Values for node type:

  • 0: BLOCKED
  • 1: OPEN
  • 2: WALKABLE
  • 3: TRAPDOOR
  • 4: FENCE
  • 5: LAVA
  • 6: WATER
  • 7: WATER_BORDER
  • 8: RAIL
  • 9: DANGER_FIRE
  • 10: DAMAGE_FIRE
  • 11: DANGER_CACTUS
  • 12: DAMAGE_CACTUS
  • 13: DANGER_OTHER
  • 14: DAMAGE_OTHER
  • 15: DOOR_OPEN
  • 16: DOOR_WOOD_CLOSED
  • 17: DOOR_IRON_CLOSED
  • 18: BREACH
  • 19: LEAVES
  • 20: STICKY_HONEY
  • 21: COCOA

Reserved channels

minecraft:register

Two-way

Allows the client or server to register for one or more custom channels, indicating that data should be sent on those channels if the receiving end supports it too. Payload is a null (0x00) separated list of strings.

This channel was renamed from REGISTER in 1.13.

minecraft:unregister

Two-way

Allows the client or server to unregister from one or more custom channels, indicating that the receiving end should stop sending data on those channels. Payload is a null-separated list of strings. This is only useful if plugins are disabled/unloaded while the client is connected.

This channel was renamed from UNREGISTER in 1.13.

Channels internal to Minecraft

Since 1.3, Minecraft itself uses several plugin channels to implement new features. These internal channels use the minecraft namespace. They are not formally registered using the register channel. The vanilla Minecraft server will send these packets regardless, and the vanilla client will accept them.

Note that there were originally more channels included, but most of these were removed in 1.13. See this revision of the article for the original list. As of 1.14, the only remaining channels other than the brand one are debugging-related channels, which are not normally sent.

minecraft:brand

Two-way

For version 1.12.2(protocol version 340) and below, channel name is: MC|Brand

Announces the server and client implementation name right after a player has logged in. For the Notchian client and server, this is "vanilla" (which is chosen using the function net.minecraft.client.ClientBrandRetriever.getClientModName() and encoded as a UTF-8 string).

These brands are used in crash reports and a few other locations. It's recommended that custom clients and servers use their own brand names for the purpose of identification (for the Notchian client, the class used to get the brand is one of the few non-obfuscated classes). The brand is not processed in any other way, and Notchian clients will connect to servers with different brands with no issue (the brand is not used to validate).

The Notchian server sends a minecraft:brand packet right after it sends a Login (play) packet, and the Notchian client sends it right after receiving a Login (play) packet. However, some modified clients and servers will not send this packet (or will take longer to send it than normal), so it is important to not crash if the brand has not been sent. Additionally, the brand may change at any time (for instance, if connected through a BungeeCord instance, you may switch from a server with one brand to a server with another brand without receiving a Login (play) packet).

minecraft:debug/path

Server to client

What appears to be the purpose of minecraft:debug/path as seen in the snapshot 16w14a announcement. This is not found in the normal game.

Never sent, but does something with pathfinding debugging. The client reads the data and stores it, but its renderer cannot be enabled without modifications.

Name Type Notes
Unknown 1 Int Used as a key in the mapping that stores this data; might be an entity ID?
Unknown 2 Float Appears to be the "radius" of the squares for each pathpoint
Entity PathEntity See Data Types above

PathEntity's index point is rendered red; the others are rendered blue. PathEntity's target PathPoint is rendered as a green cube. PathPoint's closed set is rendered red, and open set is rendered green.

minecraft:debug/neighbors_update

Server to client

Never sent, but used to debug block updates. Does not render without modifying the client.

Name Type Notes
Time VarLong World timestamp at which the update occurred. 200 ticks after this timestamp, the given update stops rendering.
Location Position Location of the block that updated.

minecraft:debug/structures

Server to client

Never sent, but (presumably) used to debug structures. Does not render without modifying the client.

Adds a single new structure, which will always be rendered if the player is in the same dimension.


Field name Field type Notes
Dimension Int The dimension the structure is in.
Bounding box minX Int Main box for the structure (rendered in white). min must be less than max
Bounding box minY Int
Bounding box minZ Int
Bounding box maxX Int
Bounding box maxY Int
Bounding box maxZ Int
Count Int Number of elements in the following array
Sub-boxes Bounding box minX Array Int min must be less than max
Bounding box minY Int
Bounding box minZ Int
Bounding box maxX Int
Bounding box maxY Int
Bounding box maxZ Int
Flag Boolean If true, the sub-box is rendered in green, otherwise in blue.


minecraft:debug/worldgen_attempt

Server to client

Never sent, but (presumably) used to debug something with world generation. Does not render without modifying the client.

Adds a colored cube of the list of things to render. This cube is never removed.

Field name Field type Notes
Location Position The center of the location to render.
Size Float Diameter/side length of a cube to render.
Red Float Red value to render, from 0.0 to 1.0.
Green Float Green value to render, from 0.0 to 1.0.
Blue Float Blue value to render, from 0.0 to 1.0.
Alpha Float Alpha value to render, from 0.0 to 1.0.

minecraft:debug/poi_ticket_count

Server to client

Never sent, but used to set amount of free tickets for POI

Field name Field type
Location of POI Position
Num of tickets VarInt

minecraft:debug/poi_added

Server to client

Never sent, but used to add debugging POI. Does not render without modifying the client.

Field name Field type Notes
Location Positon Location of POI
POI Type String (x) Type of POI, see the POI article
Tickets VarInt Amount of free tickets

minecraft:debug/poi_removed

Server to client

Never sent, but used to remove debugging POI. Does not render without modifying the client.

Field name Field type Notes
Location Positon Location of POI

minecraft:debug/village_sections

Server to client

Never sent, but used to add/remove debugging VilliageSections. Does not render without modifying the client.

Field name Field type Notes
Num of VillageSection locations to be added VarInt Number of VillageSection locations in following fields.
Location of VillageSection Array of Position Locations of VillageSections
Num of VillageSection locations to be removed VarInt Number of VillageSection locations in following fields.
Location of VillageSection Array of Position Locations of VillageSections

minecraft:debug/goal_selector

Server to client

Never sent, but (presumably) used to debug goal selectors. Does not render without modifying the client.

Adds multiple lines of text on the given location, spaced by 0.25 units upward on the Y-axis.

Field name Field type Notes
Location Position The location of the goal selector.
Unknown Int Key for the goal selector mapping, possibly entity ID.
Count Int Number of elements in the following array.
Goals Priority Array Int Currently unused
Is running Boolean Defines the color of the text. #00FF00 if true, #CCCCCC otherwise
Name String (255)

minecraft:debug/brain

Server to client

Never sent. Used to debug villager's brain. Doesn't render without modifying the client.

Field name Field type Notes
X Double X coordinate of villager's position
Y Double Y coordinate of villager's position
Z Double Z coordinate of villager's position
Unique ID UUID Villager's Unique ID
Entity ID EID Villager's Entity ID
Name String (x) Villager's name
Profession String (x) Villager's profession
XP VarInt Villager's experience points
Inventory String (x) Villager's inventory (need more research on that)
Has path Boolean Indicates whether the next field is Path
Path PathEntity Movement path
Wants golem Boolean Indicates whether the villager in need of Golem.

minecraft:debug/bee

Server to client

Never sent, but (presumably) used to debug bee pathfinding to hives and flowers. Does not render without modifying the client.

Field name Field type Notes
X Double X coordinate of rendering location
Y Double Y coordinate of rendering location
Z Double Z coordinate of rendering location
Unique ID UUID Bee's unique ID
EID VarInt EID of the Bee
Has hive position Boolean True if following field value is location of bee hive.
Location of hive Position Optional position of bee hive.
Has flower position Boolean True if following field value is location of flower.
Location of flower Position Optional position of flower.
Travel ticks VarInt Purpose unknown.
Has path Boolean True if following field value is path.
Path PathEntity Serialized path.
Num of goals VarInt Number of goals in following fields.
Goal Array of String (x) Probably string name of goal
Num of blacklisted hives VarInt Number of blacklisted hives in following fields.
Blacklisted hive Array of Position Position of blacklisted hive.

minecraft:debug/hive

Server to client

Never sent, but (presumably) used to debug hives. Does not render without modifying the client.

Field name Field type Notes
Location Position Rendering location. If a player is more than 30 blocks away, rendering is skipped.
Hive type String Name of hive type
Occupant count VarInt Number of bees inside this hive
Honey level VarInt Level of honey inside this hive
Sedated Boolean True if bees are sedated, false otherwise
Last seen VarLong Never used in debug renderer?

minecraft:debug/game_test_add_marker

Server to client

Never sent, but used to set different debug markers in the world. Does not render for vanilla clients below version 1.16.5.

Field name Field type Notes
Location Position Location of the marker.
Color VarInt Encoded ARGB color (Read below about encoding).
Name String (x) Name of marker
Lifetime VarInt Time in milliseconds, after which the marker will be destroyed

Color can be encoded as following:

int encoded = 0;
encoded = encoded | ((int) blueChannel);
encoded = encoded | ((int) greenChannel << 8);
encoded = encoded | ((int) redChannel << 16);
encoded = encoded | ((int) alphaChannel << 24);
return encoded;

Note that color is normalized by client.

minecraft:debug/game_test_clear

Clears all debug markers.

minecraft:debug/raids

Server to client

Never sent, but used to set debug raid centers. Does not render without modifying the client.

Field name Field type Notes
Num of locations VarInt Number of locations provided by following array
Locations Array of Position Locations of raid centers

minecraft:debug/game_event

Server to client

Never sent, but used to debug game events. Does not render without modifying the client.

Field name Field type Notes
Game event identifier String (x)
Game event location Position

minecraft:debug/game_event_listeners

Server to client

Never sent, but used to track game event listeners. Does not render without modifying the client.

Field name Field type Notes
Position source type Identifier
Listener data Byte Array
Listener range VarInt
Position source type Identifier Data
Block position source minecraft:block Data contain single block position
Entity position source minecraft:entity Data contain single EID

MC|PingHost

Client to server

Sent after a Server list ping in Minecraft 1.6. More information on Server List Ping#1.6. In 1.7 and above, the Request (Status, 0x00, serverbound) packet is instead sent before the ping.

Warning.png Since this plugin channel is only sent for the legacy server list ping, it uses the older packet structure.

Notable community plugin channels

Channels listed in this section are not used by the vanilla Minecraft client or server. This is just a likely-incomplete list of channels used by mods/plugins popular within the Minecraft community.

bungeecord:main

Formerly BungeeCord; additionally, note that the channel name is remapped by spigot so that the old name can still be used in plugins.

See here

fml:handshake, fml:play

Main article: Minecraft Forge Handshake

Previously FML|HS, FML

Used by Minecraft Forge to negotiate required mods, among other things. fml:handshake and fml:play

ML|OpenTE

Server to client

Used by ModLoader to support custom GUI windows. Does not use the REGISTER channel.

WECUI

Main article: /WorldEditCUI

Used by the server-side WorldEdit and the client-side WorldEditCUI to coordinate selections.

wdl:init, wdl:control, wdl:request

Main article: /World downloader

Used by the client-side World Downloader mod to get permission information and perform permission requests.

world_info, world_id, worldinfo:world_id

Used by VoxelMap and JourneyMap (1.16.5+) to query the world ID, which is useful on BungeeCord-style server networks to keep maps unique.