This isn't finished and I will update this occasionally, as new things appear.
No change is final and we will continue to go through your feedback and suggestions to figure out the best solution for commands. I have also not yet finished porting every command to the new system, so some parts may be incomplete until I get to it.
Last updated: 2017-11-15
- Files in
(world)/data/advancements/(namespace)/(file)
will need to be moved to inside data pack asdata/(namespace)/advancements/(file)
- Files in
(world)/data/functions/namespace)/(file)
will need to be moved to inside a data pack asdata/(namespace)/functions/(file)
- Files in
(world)/data/loot_tables/(namespace)/(file)
will need to be moved to inside a data pack asdata/(namespace)/loot_tables/(file)
- Files in
(world)/structures/(file)
will need to be moved to inside a data pack asdata/(namespace)/structures/(file)
- Data packs are zips or folders with a
pack.mcmeta
in the root. See http://minecraft.gamepedia.com/Tutorials/Creating_a_resource_pack#pack.mcmeta - Multiple data packs can be loaded at the same time, or none at all (disable vanilla for a boring game!)
- Structures are now namespaced. Please use your own namespace for all custom structures in the future. Default namespace is always
minecraft
, which will cause conflicts later. - Structures are saved to
(world)/generated/(namespace)/structures/(file).nbt
. They will also load from here before checking data packs. However, you should not use this to distribute structures and instead move them from out of here and into data packs. - See this blog post for more information
- It doesn't work in multiplayer yet. You can type out commands as usual, you just won't get tabcompletions or any UI for it yet.
- Tabcompletions of any kind are a work in progress, and only absolute basic values will be hinted.
- It really isn't complete, and there are a lot of parts that just aren't implemented yet or might behave a little unexpectedly. Please feel free to report these to the bug tracker so we can keep track of them!
- If we feel that it's too incomplete/broken (it really might be), we will revert it until it's had more development. This is a preview, it is not final.
- Some changes might not make sense until a later snapshot, for example data values still technically exist right now but will be removed very soon.
- The new commands are not translated in any way. They are designed to be easier to translate than the current engine, but it's not there yet.
- The UI for typing out commands is a really really rough mockup. It will probably be super cool at some point.
- Most commands are even more case sensitive than before. Lowercase is preferable wherever possible.
- For example, this is no longer allowed:
/scoreboard ObJeCtIvEs ...
- They will be so much more faster and efficient. Especially functions. Oh man.
- Functions will be completely parsed & cached on load. This means if there's any command that isn't correct for whatever reason, you will know about it on load.
- This means to check if a map works in 1.17.banana, you simple open your world in 1.17.banana. If there's errors, they'll be in your log. If there's no errors, it's probably fine!
- Here's a list of every single executable command so-far: https://gist.github.com/Dinnerbone/943fbcd763c19be188ed6b72a12d7e65
- It's very verbose, because each line is its own command.
[optionals]
and(conditionals|ors)
are separated out. ...
is where another command is required-> foo
means an alias to foo- The new command library is called "Brigadier". That's not relevant in any way, I just really like the name.
If a command isn't listed, it's probably because nothing exciting happened to it and it works as it did before. These are only notable changes.
- Removed
/advancement test
as it will be part of entity selectors
- Removed in favour of
/data
- The syntax of
/clear
has changed /clear [<target>] [<item>] [<data>] [<count>] [<nbt>]
->/clear [<target>] [<item>] [<count>]
- See the item argument type for more details
- The syntax of
/clone
has changed /clone <x1 y1 z1> <x2 y2 z2> <xt yt zt> filtered [force|move|normal] [<block>] [<data>]
->/clone <x1 y1 z1> <x2 y2 z2> <xt yt zt> filtered [<block>] [force|move|normal]
/clone <x1 y1 z1> <x2 y2 z2> <xt yt zt> [replace|masked] [force|move|normal] [<block>] [<data>]
->/clone <x1 y1 z1> <x2 y2 z2> <xt yt zt> [replace|masked] [force|move|normal]
- See the block argument type for more details
- New command that replaces
/entitydata
and/blockdata
- Has the following subcommands:
merge <target> <nbt>
acts the same as/entitydata
//blockdata
used to. Merges new NBT onto the target.get <target>
prints the full data for the targetget <target> <path> [scale]
returns the numeric value of a tag at the specified<path>
, after multiplying with[scale]
(default 1)- Data paths look like this:
foo.bar[0]."A [crazy name]".baz
foo.bar
meansfoo
's child calledbar
foo[0]
means element0
offoo
"quoted strings"
may be used if a name of a key needs to be escaped
- New command to control loaded data packs
- Has the following subcommands:
enable <name>
- will enable the specific packdisable <name>
- will disable the specific packlist [available|enabled]
- will list all data packs, or only the available/enabled ones- Data packs are enabled by default, but if you disable it you can reenable it with these commands:
enable <name>
- will enable the specific pack, putting it in its default positionenable <name> first
- will enable the specific pack, putting it before any other pack (lowest priority)enable <name> last
- will enable the specific pack, putting it after any other pack (highest priority)enable <name> before <existing>
- will enable the specific pack, putting it before (lower priority)<existing>
packenable <name> after <existing>
- will enable the specific pack, putting it after (higher priority)<existing>
pack
- Now only accepts string IDs, not shorthand or numeric
/gamemode 2
->/gamemode adventure
/defaultgamemode sp
->/defaultgamemode spectator
/difficulty <value>
now only accepts string IDs, not shorthand or numeric/difficulty 2
->/difficulty normal
/difficulty p
->/difficulty peaceful
- You can query for the current difficulty by using
/difficulty
without any arguments
- The syntax of
/effect
has changed, to avoid ambiguity. /effect <entity> <effect>
->/effect give <entity> <effect>
/effect <entity> clear
->/effect clear <entity> [<effect>]
- Giving an effect will now fail if it didn't actually do anything
- Some mobs are immune (for example an ender dragon)
- Stronger existing effects prevent new weaker ones
- Removed in favour of
/modifyitem
- Removed in favour of
/data
/execute
has been completely reworked- Modifier subcommands can change how the command is ran:
/execute as <entity> <chained command>
executes a command using the entity<entity>
(but doesn't change position)/execute at <entity> <chained command>
executes a command using the position of<entity>
(but doesn't change entity)/execute offset <x y z> <chained command>
executes a command using the position of<x y z>
/execute align <axes> <chained command>
executes a command after aligning the current position to the block grid (axes
is any combination ofx
y
andz
)- Conditional subcommands can let you prevent the command from running at all:
/execute (if|unless) block <x y z> <block> <chained command>
executes a command if (or unless)<x y z>
matches<block>
/execute (if|unless) blocks <begin> <end> <destination> (all|masked) <chained command>
executes a command if (or unless) the region between<start>
and<end>
matches<destination>
/execute (if|unless) entity <entity> <chained command>
executes a command if (or unless)<entity>
exists (returns 1 or more entities)/execute (if|unless) score <target> <targetObjective> (<|<=|=|>=|>) <source> <sourceObjective> <chained command>
executes a command if (or unless)<target>
's score matches<source>
's score- As replacement for
/stats
, a new subcommandstore
lets you store the result of a command somewhere: /execute store (result|success) (score|entity|block) ...
result
is the result of a command, which replaces these old stats:AffectedBlocks
,AffectedEntities
,AffectedItems
,QueryResult
success
is how many times the command was successful. This is usually 0 or 1, but if the command split up (for exampleas @a
) then it may be more than 1. This replacesSuccessCount
- The value will be stored when the full command has finished executing
- If a command isn't successful (
success
is 0),result
will always be set to 0 - We will try to make it clear somewhere what the expected result of each command is
- For
store (result|success) score
, the remaining syntax is:<name> <objective> <chained command>
- The value is stored into the scoreboard under
<name>
and<objective>
- The objective must exist, but unlike with
/stats
you don't need to set an initial value for<name>
- For
store (result|success) block
, the remaining syntax is:<xyz> <path> (byte|double|float|int|long|short) <scale> <chained command>
- The value is stored into the block at
<xyz>
, into the nbt tag at<path>
after multiplying by<scale>
- For
store (result|success) entity
, the remaining syntax is:<target> <path> (byte|double|float|int|long|short) <scale> <chained command>
- The value is stored into the entity
<target>
, into the nbt tag at<path>
after multiplying by<scale>
- Does not work on players
- You can chain all subcommands together
- After every subcommand you need to write another subcommand
- When you're done with chaining subcommands,
run
lets you write the actual command to be executed /execute as somebody at somebody run say hi
- Example of old commands:
/execute @e ~ ~ ~ detect ~ ~ ~ stone 0 say Stone!
->/execute as @e at @s if block ~ ~ ~ stone run say Stone!
/execute @e ~ ~ ~ detect ~ ~ ~ grass summon pig
->/execute at @e if block ~ ~ ~ grass run summon pig
/execute @e ~ ~ ~ say Hello!
->/execute as @e run say Hello!
/xp
is now an alias for/experience
- Split up into 3 different subcommands
/experience add <players> <amount> [points|levels]
- Adds
<amount>
of either points or levels to the target<players>
(defaults to points) - Adding points can cause players to level up, as usual
- Negative numbers are supported, to subtract points instead
- Subtracting points can cause players to level down
/experience set <players> <amount> [points|levels]
- Sets
<amount>
of either points or levels on the target<players>
(defaults to points) - You cannot set more points than their current level allows
- When changing levels, the points will stay at the same percentage as the previous level
/experience query <player> (points|levels)
- Returns either the number of points or levels on the given
<player>
- The syntax of
/fill
has changed /fill <x y z> <xt yt zt> <block> <data> replace [<replaceBlock>] [<replaceData>]
->/fill <x y z> <xt yt zt> <block> replace [<filter>]
/fill <x y z> <xt yt zt> <block> [<data>] [destroy|hollow|keep|outline|replace] [<nbt>]
->/fill <x y z> <xt yt zt> <block> [destroy|hollow|keep|outline|replace]
- See the block argument type for more details
- No longer has optional
(if|unless) <entity>
arguments. - This has been moved into
/execute
/function foo if @e[tag=bar]
->/execute if entity @e[tag=bar] run function foo
/gamerule
no longer accepts unknown rules ("custom gamerules")- It was causing more problems than it was worth, with people mistyping rules and it looks official
- It was very error-prone and difficult to use
- You can use functions or scoreboards as replacements, with no loss of functionality (actually - more!)
- Existing custom gamerules will just not be accessible. Only built-in rules will be available.
- Values to
/gamerule
are now type checked (giving a string if it wants an int is a very obvious error)
- The syntax of
/give
has changed /give <players> <item> [<count>] [<data>] [<nbt>]
->/give <players> <item> [<count>]
- See the item argument type for more details
- This is a new command that replaces
/enchant
- We don't know how it looks yet.
- The syntax of
/replaceitem
has changed /replaceitem block <pos> <slot> <item> [<count>] [<data>] [<nbt>]
->/replaceitem block <pos> <slot> <item> [<count>]
/replaceitem entity <target> <slot> <item> [<count>] [<data>] [<nbt>]
->/replaceitem entity <target> <slot> <item> [<count>]
- See the item argument type for more details
/scoreboard
had[<dataTag>]
removed from its commands, as they're no longer needed- See the entity selector argument type for more details
/scoreboard team
is now/team
/scoreboard players tag
is now/tag
/scoreboard players test
is removed in favourite of entity selectors- There is a new
/scoreboard players get <target> <objective>
to query for specific scores
- The syntax of
/setblock
has changed /setblock <pos> <block> [<data>] [<mode>] [<nbt>]
->/setblock <pos> <block> [<mode>]
- See the block argument type for more details
- Removed. Now part of
/execute
- The new
/execute
one isn't a direct replacement, the behaviour has changed: - It's now per-command, instead of per-entity or per-block
- There's only
result
andsuccess
, which covers all the old stat types
*
can be used instead of source to stop all sounds with a certain name, across all sources
- Removed. Now part of
/execute
- Removed. It was always used to stop the rain, then make you frustrated in a minute when it's raining again.
- Use
/weather
/tp
is now an alias of/teleport
(much like/w
,/msg
and/tell
)- Coordinates are now relative to the executor, as with all other commands
- The syntax of
/tp
remains, but with the behaviour of/teleport
/trigger <objective>
is a new syntax as shortcut for/trigger <objective> add 1
- If you don't specify a time, it now defaults to 5 minutes (previously random)
- The output signal of a command block used to be it's "success count", but now it's "result"
- More error handling has been introduced to help you find potential bugs. Things like
limit=0
,level=-10
,gamemode=purple
aren't allowed because it makes no sense. - There's no longer a "min" and "max" separate values, we instead support ranges
level=10
is level 10level=10..12
is level 10, 11 or 12level=5..
is anything level 5 or abovelevel=..15
is anything level 15 or belowx
&z
are no longer center-corrected (x=0
isn'tx=0.5
anymore). They now support doubles, so usex=0.5
if that's what you wanted.gamemode
(previouslym
) no longer allows numerical or shorthand IDs, which were deprecated years ago.- The arcane shorthand names have been renamed
m
->gamemode
l
orlm
->level
r
orrm
->distance
rx
orrxm
->x_rotation
ry
orrym
->y_rotation
c
->limit
limit
(wasc
) No longer allows negative values, instead usesort=furthest
x
,y
,z
,distance
(wasr
),x_rotation
(wasrx
) andy_rotation
(wasry
) are now doubles and allow values like12.34
- Allow spaces!
@e[name="Hello World"]
- Supports NBT!
@e[nbt={Cool:1b},nbt=!{Uncool:1b}]
- Where sensible, repeat-arguments are allowed
tag=foo,tag=bar,tag=!baz
matches someone withfoo
,bar
and notbaz
type=!cow,type=!chicken
matches something that isn't a cow and isn't a chickentype=cow,type=chicken
isn't allowed, because something cannot both be a cow and chicken- You can specify the sorting
sort=nearest
is the old default, sorting by distance (default for@p
)sort=furthest
is the reverse of that (previously you'd usec=-5
for this)sort=random
for random sorting (default for@r
)sort=arbitrary
is a new option to not sort the result (default for@e
,@a
)- Specifying scores now looks like
scores={foo=1,bar=1..5}
- You can test for advancements with
advancements={foo=true,bar=false,custom:something={criterion=true}}
true
for "they completed the advancement",false
for "they have not completed the advancement"- Alternatively, pass a block of specific criteria to test for (again, true/false)
- Wherever a block, data and optionally nbt was required, it's now a single "block" argument that looks like this:
stone
minecraft:redstone_wire[power=15,north=up,south=side]
minecraft:jukebox{RecordItem:{...}}
minecraft:furnace[facing=north]{BurnTime:200}
- ID is required (though just as before, if namespace isn't set it defaults to
minecraft:
) - States are inside
[]
, comma-separated and must be properties/values supported by the blocks. They are optional. minecraft:stone[doesntexist=purpleberry]
is a syntax error, becausestone
doesn't havedoesntexist
minecraft:redstone_wire[power=tuesday]
is a syntax error, becauseredstone_wire
'spower
is a number between 0 and 15- NBT tag is inside {}, and works just like you'd expect. It's optional.
- In the context of "conditions"/testing for blocks, only the states you provided will be tested.
- If you test
redstone_wire[power=15]
, it only checkspower
but ignores other states such asnorth
. - In the context of setting blocks, any states you provided will be set but anything missed out will default depending on the block.
- If you set
redstone_wire[power=15]
, it will set power to 15 butnorth
will be a default value (in this case, set tonone
) - There is no such thing as block data value in 1.13. It's either a different blocks, or a state.
- Wherever an item and optionally nbt was required, it's now a single "item" argument that looks like this:
stone
minecraft:stick{display:{Name:"Stick of Untruths"}}
- ID is required (though just as before, if namespace isn't set it defaults to
minecraft:
) - NBT tag is inside {}, and works just like you'd expect. It's optional.
- There is no such thing as item data value or item damage value in 1.13
- Damage, where applicable, is being moved into nbt
- Any other information is either a separate item or a property in nbt
you seem to accidentally(?) have removed the
reload
command