Difference between revisions of "Command Data"
m (Consistency improvements.) |
|||
(5 intermediate revisions by 2 users not shown) | |||
Line 40: | Line 40: | ||
| Only for <code>argument</code> nodes. | | Only for <code>argument</code> nodes. | ||
|- | |- | ||
− | | | + | | Properties |
| {{Type|Optional}} Varies | | {{Type|Optional}} Varies | ||
| Only for <code>argument</code> nodes. Varies by parser. | | Only for <code>argument</code> nodes. Varies by parser. | ||
Line 78: | Line 78: | ||
Since 1.19, parsers are identified by their ID in the Node Format. Parsers (as well as parser IDs) are provided only for <code>argument</code> nodes. If properties for parser are not specified, then this parser has no properties and "Properties" section in Node Format contains no data. | Since 1.19, parsers are identified by their ID in the Node Format. Parsers (as well as parser IDs) are provided only for <code>argument</code> nodes. If properties for parser are not specified, then this parser has no properties and "Properties" section in Node Format contains no data. | ||
− | + | {{Warning2| Some IDs have changed thoughout versions}} | |
{| class="wikitable" | {| class="wikitable" | ||
! Numeric ID | ! Numeric ID | ||
Line 346: | Line 346: | ||
|} | |} | ||
− | + | ==== <code>brigadier:double</code> ==== | |
− | |||
− | |||
Specifies min and max values. | Specifies min and max values. | ||
Line 363: | Line 361: | ||
| Min | | Min | ||
| {{Type|Optional}} {{Type|Double}} | | {{Type|Optional}} {{Type|Double}} | ||
− | | Only if flags & 0x01. If not specified, defaults to <code>- | + | | Only if flags & 0x01. If not specified, defaults to <code>-Double.MAX_VALUE</code> (≈ -1.7976931348623157E307) |
|- | |- | ||
| Max | | Max | ||
Line 369: | Line 367: | ||
| Only if flags & 0x02. If not specified, defaults to <code>Double.MAX_VALUE</code> (≈ 1.7976931348623157E307) | | Only if flags & 0x02. If not specified, defaults to <code>Double.MAX_VALUE</code> (≈ 1.7976931348623157E307) | ||
|} | |} | ||
− | + | ||
− | + | ==== <code>brigadier:float</code> ==== | |
Specifies min and max values. | Specifies min and max values. | ||
Line 392: | Line 390: | ||
|} | |} | ||
− | + | ==== <code>brigadier:integer</code> ==== | |
Specifies min and max values. | Specifies min and max values. | ||
Line 414: | Line 412: | ||
|} | |} | ||
− | + | ==== <code>brigadier:long</code> ==== | |
Specifies min and max values. | Specifies min and max values. | ||
Line 436: | Line 434: | ||
|} | |} | ||
− | + | ==== <code>brigadier:string</code> ==== | |
A {{Type|VarInt}} {{Type|Enum}}. | A {{Type|VarInt}} {{Type|Enum}}. | ||
Line 443: | Line 441: | ||
! Field Name | ! Field Name | ||
! Field Type | ! Field Type | ||
+ | ! Notes | ||
+ | |- | ||
+ | | Behavior | ||
+ | | {{Type|VarInt}} {{Type|Enum}} | ||
+ | | Parsing behavior (see below). | ||
+ | |} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! ID | ||
+ | ! Behavior Name | ||
! Notes | ! Notes | ||
|- | |- | ||
Line 458: | Line 466: | ||
|} | |} | ||
− | + | ==== <code>minecraft:entity</code> ==== | |
Has a single flags byte. | Has a single flags byte. | ||
Line 473: | Line 481: | ||
|} | |} | ||
− | + | ==== <code>minecraft:score_holder</code> ==== | |
Has a single flags byte. | Has a single flags byte. | ||
Line 485: | Line 493: | ||
|} | |} | ||
− | + | ==== <code>minecraft:time</code> ==== | |
{| class="wikitable" | {| class="wikitable" | ||
Line 497: | Line 505: | ||
|} | |} | ||
− | + | ==== <code>minecraft:resource_or_tag</code> ==== | |
Has a single identifier. | Has a single identifier. | ||
Line 511: | Line 519: | ||
|} | |} | ||
− | + | ==== <code>minecraft:resource_or_tag_key</code> ==== | |
Has a single identifier. | Has a single identifier. | ||
Line 525: | Line 533: | ||
|} | |} | ||
− | + | ==== <code>minecraft:resource</code> ==== | |
Has a single identifier. | Has a single identifier. | ||
Line 539: | Line 547: | ||
|} | |} | ||
− | + | ==== <code>minecraft:resource_key</code> ==== | |
Has a single identifier. | Has a single identifier. | ||
Line 553: | Line 561: | ||
|} | |} | ||
− | + | ==== <code>forge:modid</code> ==== | |
Added by Minecraft Forge, vanilla clients/servers do not have this. | Added by Minecraft Forge, vanilla clients/servers do not have this. | ||
Line 559: | Line 567: | ||
* Serialized in https://github.com/MinecraftForge/MinecraftForge/blob/9177ac1b2e326a3acffaf476eeff28a1cf9a637f/src/main/java/net/minecraftforge/server/command/ModIdArgument.java | * Serialized in https://github.com/MinecraftForge/MinecraftForge/blob/9177ac1b2e326a3acffaf476eeff28a1cf9a637f/src/main/java/net/minecraftforge/server/command/ModIdArgument.java | ||
− | + | ==== <code>forge:enum</code> ==== | |
Added by Minecraft Forge, vanilla clients/servers do not have this. | Added by Minecraft Forge, vanilla clients/servers do not have this. | ||
Line 604: | Line 612: | ||
[[File:Command_graph_18w22c.png|thumb|center|Command graph from 18w22c. Executable nodes are shown in green; redirects are dashed.]] | [[File:Command_graph_18w22c.png|thumb|center|Command graph from 18w22c. Executable nodes are shown in green; redirects are dashed.]] | ||
+ | [[Category:Protocol Details]] | ||
[[Category:Minecraft Modern]] | [[Category:Minecraft Modern]] |
Latest revision as of 21:37, 14 September 2024
From Minecraft 1.13, the Command Graph data structure defines commands which can be used in chat or in command blocks, and how they're parsed.
Contents
- 1 Graph Structure
- 2 Node Format
- 2.1 Flags
- 2.2 Parsers
- 2.2.1 brigadier:double
- 2.2.2 brigadier:float
- 2.2.3 brigadier:integer
- 2.2.4 brigadier:long
- 2.2.5 brigadier:string
- 2.2.6 minecraft:entity
- 2.2.7 minecraft:score_holder
- 2.2.8 minecraft:time
- 2.2.9 minecraft:resource_or_tag
- 2.2.10 minecraft:resource_or_tag_key
- 2.2.11 minecraft:resource
- 2.2.12 minecraft:resource_key
- 2.2.13 forge:modid
- 2.2.14 forge:enum
- 2.3 Suggestions Types
- 3 Example Graphs
Graph Structure
The graph consists of nodes of type root
, literal
and argument
. A node may point to a number of child nodes, or redirect to another node, or neither. The root node is nameless, and its children are literal nodes for familiar commands ("msg", "me", etc).
Nodes are marked as executable if the node stack to this point constitutes a valid command. E.g. this is false for /ban
but true for /ban Dinnerbone
and /ban Dinnerbone created this crazy format
.
When including redirects, this structure is a directed graph that may include cycles (e.g. consider /execute run execute run execute ...
). When excluding redirects, the structure no longer contains cycles but may still not be a tree, as a node may have multiple parents.
Node Format
Field Name | Field Type | Notes |
---|---|---|
Flags | Byte | See below. |
Children count | VarInt | Number of elements in the following array. |
Children | Array of VarInt | Array of indices of child nodes. |
Redirect node | Optional VarInt | Only if flags & 0x08 . Index of redirect node.
|
Name | Optional String (32767) | Only for argument and literal nodes.
|
Parser ID | Optional VarInt | Only for argument nodes.
|
Properties | Optional Varies | Only for argument nodes. Varies by parser.
|
Suggestions type | Optional Identifier | Only if flags & 0x10 .
|
Flags
Bit Mask | Flag Name | Notes |
---|---|---|
0x03
|
Node type | 0: root , 1: literal , 2: argument . 3 is not used.
|
0x04
|
Is executable | Set if the node stack to this point constitutes a valid command. |
0x08
|
Has redirect | Set if the node redirects to another node. |
0x10
|
Has suggestions type | Only present for argument nodes.
|
Parsers
Clients are expected to implement all parsers, including properties (if any). If an unknown parser is encountered by a client, unpacking of the Commands packet should stop immediately, as the structure of the remainder of the packet cannot be guessed.
Since 1.19, parsers are identified by their ID in the Node Format. Parsers (as well as parser IDs) are provided only for argument
nodes. If properties for parser are not specified, then this parser has no properties and "Properties" section in Node Format contains no data.
Numeric ID | String Identifier | Properties | Description |
---|---|---|---|
0 | brigadier:bool
|
N/A | Boolean value (true or false , case-sensitive)
|
1 | brigadier:float
|
See below | Float |
2 | brigadier:double
|
See below | Double |
3 | brigadier:integer
|
See below | Integer |
4 | brigadier:long
|
See below | Long |
5 | brigadier:string
|
See below | A string |
6 | minecraft:entity
|
See below | A selector, player name, or UUID. |
7 | minecraft:game_profile
|
N/A | A player, online or not. Can also use a selector, which may match one or more players (but not entities). |
8 | minecraft:block_pos
|
N/A | A location, represented as 3 numbers (which must be integers). May use relative locations with ~ .
|
9 | minecraft:column_pos
|
N/A | A column location, represented as 2 numbers (which must be integers). May use relative locations with ~ .
|
10 | minecraft:vec3
|
N/A | A location, represented as 3 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~ .
|
11 | minecraft:vec2
|
N/A | A location, represented as 2 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~ .
|
12 | minecraft:block_state
|
N/A | A block state, optionally including NBT and state information. |
13 | minecraft:block_predicate
|
N/A | A block, or a block tag. |
14 | minecraft:item_stack
|
N/A | An item, optionally including NBT. |
15 | minecraft:item_predicate
|
N/A | An item, or an item tag. |
16 | minecraft:color
|
N/A | A chat color. One of the names from Text formatting#Colors, or reset . Case-insensitive.
|
17 | minecraft:component
|
N/A | A JSON text component. |
18 | minecraft:style
|
N/A | A JSON object containing the text component styling fields. |
19 | minecraft:message
|
N/A | A regular message, potentially including selectors. |
20 | minecraft:nbt
|
N/A | An NBT value, parsed using JSON-NBT rules. |
21 | minecraft:nbt_tag
|
N/A | Represents a partial nbt tag, usable in data modify command. |
22 | minecraft:nbt_path
|
N/A | A path within an NBT value, allowing for array and member accesses. |
23 | minecraft:objective
|
N/A | A scoreboard objective. |
24 | minecraft:objective_criteria
|
N/A | A single score criterion. |
25 | minecraft:operation
|
N/A | A scoreboard operator. |
26 | minecraft:particle
|
N/A | A particle effect (an identifier with extra information following it for specific particles, mirroring the Particle packet) |
27 | minecraft:angle
|
N/A | |
28 | minecraft:rotation
|
N/A | An angle, represented as 2 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~ .
|
29 | minecraft:scoreboard_slot
|
N/A | A scoreboard display position slot. list , sidebar , belowName , and sidebar.team.${color} for all chat colors (reset is not included)
|
30 | minecraft:score_holder
|
See below | Something that can join a team. Allows selectors and * .
|
31 | minecraft:swizzle
|
N/A | A collection of up to 3 axes. |
32 | minecraft:team
|
N/A | The name of a team. Parsed as an unquoted string. |
33 | minecraft:item_slot
|
N/A | A name for an inventory slot. |
34 | minecraft:resource_location
|
N/A | An Identifier. |
35 | minecraft:function
|
N/A | A function. |
36 | minecraft:entity_anchor
|
N/A | The entity anchor related to the facing argument in the teleport command, is feet or eyes. |
37 | minecraft:int_range
|
N/A | An integer range of values with a min and a max. |
38 | minecraft:float_range
|
N/A | A floating-point range of values with a min and a max. |
39 | minecraft:dimension
|
N/A | Represents a dimension. |
40 | minecraft:gamemode
|
N/A | Represents a gamemode. (survival , creative , adventure or spectator )
|
41 | minecraft:time
|
See below | Represents a time duration. |
42 | minecraft:resource_or_tag
|
See below | An identifier or a tag name for a registry. |
43 | minecraft:resource_or_tag_key
|
See below | An identifier or a tag name for a registry. |
44 | minecraft:resource
|
See below | An identifier for a registry. |
45 | minecraft:resource_key
|
See below | An identifier for a registry. |
46 | minecraft:template_mirror
|
N/A | Mirror type (none , left_right or front_back )
|
47 | minecraft:template_rotation
|
N/A | Rotation type (none , clockwise_90 , 180 or counterclockwise_90 )
|
48 | minecraft:heightmap
|
N/A | Post-worldgen heightmap type (motion_blocking , motion_blocking_no_leaves , ocean_floor and world_surface )
|
49 | minecraft:uuid
|
N/A | Represents a UUID value. |
? | forge:modid
|
Unknown | Represents a mod identifier. Added by Minecraft Forge. Vanilla clients/servers do not support this parser. |
? | forge:enum
|
Unknown | Represents a enum class to use for suggestion. Added by Minecraft Forge. Vanilla clients/servers do not support this parser. |
brigadier:double
Specifies min and max values.
Field Name | Field Type | Notes |
---|---|---|
Flags | Byte | |
Min | Optional Double | Only if flags & 0x01. If not specified, defaults to -Double.MAX_VALUE (≈ -1.7976931348623157E307)
|
Max | Optional Double | Only if flags & 0x02. If not specified, defaults to Double.MAX_VALUE (≈ 1.7976931348623157E307)
|
brigadier:float
Specifies min and max values.
Field Name | Field Type | Notes |
---|---|---|
Flags | Byte | |
Min | Optional Float | Only if flags & 0x01. If not specified, defaults to -Float.MAX_VALUE (≈ 3.4028235E38)
|
Max | Optional Float | Only if flags & 0x02. If not specified, defaults to Float.MAX_VALUE (≈ 3.4028235E38)
|
brigadier:integer
Specifies min and max values.
Field Name | Field Type | Notes |
---|---|---|
Flags | Byte | |
Min | Optional Int | Only if flags & 0x01. If not specified, defaults to Integer.MIN_VALUE (-2147483648)
|
Max | Optional Int | Only if flags & 0x02. If not specified, defaults to Integer.MAX_VALUE (2147483647)
|
brigadier:long
Specifies min and max values.
Field Name | Field Type | Notes |
---|---|---|
Flags | Byte | |
Min | Optional Long | Only if flags & 0x01. If not specified, defaults to Long.MIN_VALUE (−9,223,372,036,854,775,808)
|
Max | Optional Long | Only if flags & 0x02. If not specified, defaults to Long.MAX_VALUE (9,223,372,036,854,775,807)
|
brigadier:string
Field Name | Field Type | Notes |
---|---|---|
Behavior | VarInt Enum | Parsing behavior (see below). |
ID | Behavior Name | Notes |
---|---|---|
0 | SINGLE_WORD
|
Reads a single word |
1 | QUOTABLE_PHRASE
|
If it starts with a " , keeps reading until another " (allowing escaping with \ ). Otherwise behaves the same as SINGLE_WORD
|
2 | GREEDY_PHRASE
|
Reads the rest of the content after the cursor. Quotes will not be removed. |
minecraft:entity
Has a single flags byte.
Bit Mask | Meaning |
---|---|
0x01 | If set, only allows a single entity/player |
0x02 | If set, only allows players |
minecraft:score_holder
Has a single flags byte.
Bit Mask | Meaning |
---|---|
0x01 | If set, allows multiple. |
minecraft:time
Field Name | Field Type | Notes |
---|---|---|
Min | Int | Minimum duration in ticks |
minecraft:resource_or_tag
Has a single identifier.
Field Name | Field Type | Notes |
---|---|---|
Registry | Identifier | The registry from where suggestions will be sourced from. |
minecraft:resource_or_tag_key
Has a single identifier.
Field Name | Field Type | Notes |
---|---|---|
Registry | Identifier | The registry from where suggestions will be sourced from. |
minecraft:resource
Has a single identifier.
Field Name | Field Type | Notes |
---|---|---|
Registry | Identifier | The registry from where suggestions will be sourced from. |
minecraft:resource_key
Has a single identifier.
Field Name | Field Type | Notes |
---|---|---|
Registry | Identifier | The registry from where suggestions will be sourced from. |
forge:modid
Added by Minecraft Forge, vanilla clients/servers do not have this.
- Registered in https://github.com/MinecraftForge/MinecraftForge/blob/19f8d2a7937dc7968ecbef2f9785687193fcd210/src/main/java/net/minecraftforge/common/ForgeMod.java#L175
- Serialized in https://github.com/MinecraftForge/MinecraftForge/blob/9177ac1b2e326a3acffaf476eeff28a1cf9a637f/src/main/java/net/minecraftforge/server/command/ModIdArgument.java
forge:enum
Added by Minecraft Forge, vanilla clients/servers do not have this. Enum class to use for suggestions. The value is literally as is fed into the java method Class.forName see net.minecraftforge.server.command.EnumArgument
Field Name | Field Type | Notes |
---|---|---|
Class | String | Enum Class to use |
- Registered in https://github.com/MinecraftForge/MinecraftForge/blob/19f8d2a7937dc7968ecbef2f9785687193fcd210/src/main/java/net/minecraftforge/common/ForgeMod.java#L175
- Serialized in https://github.com/MinecraftForge/MinecraftForge/blob/bca20ace4ecb1da07806c8fc6c749826c3bd57e1/src/main/java/net/minecraftforge/server/command/EnumArgument.java
Suggestions Types
If the provided suggestion type is not recognized by Notchian client, it will use minecraft:ask_server
.
Identifier | Description |
---|---|
minecraft:ask_server
|
Sends the Command Suggestions Request packet to the server to request tab completions. |
minecraft:all_recipes
|
Suggests all the available recipes. |
minecraft:available_sounds
|
Suggests all the available sounds. |
minecraft:summonable_entities
|
Suggests all the summonable entities. |