In 1.13 we are completely redesigning the command system to be easier to use, faster to run, and allow for much cooler things than were possible before. Todays snapshot introduces the first kinda-workable build of that command system!

CHANGES IN 17W45A

New horse model! Hurrah!

Lots of bug fixes! Especially crash fixes on Mac OS.

New command library! Details below.

Added new GUI scaling options! 4k users rejoice, you can see a few more pixels now ;)

CHANGES IN 17W45B

Merged /entitydata and /blockdata into /data

and into Reworked /execute store

store Made command-function loading much faster

Made /execute if <..> return values if used on their own

return values if used on their own Fixed bug MC-121623 - "Cannot use namespace in type= for selectors"

Fixed bug MC-121627 - "@s fails to build valid commands"

Fixed bug MC-121635 - "Incorrect failed /fill result message"

Fixed bug MC-121637 - "Incorrect result message when teleporting a single entity"

Fixed bug MC-121642 - ""Optional" commands following conditional execute chain succeed/fail strangely"

Fixed bug MC-121650 - "Tab auto-completion is case-sensitive"

Fixed bug MC-121655 - "Incorrect message when teleporting single entity"

Fixed bug MC-121656 - "Some creative commands are available by a survival player with cheats disabled"

Fixed bug MC-121660 - "distance argument can't find players with @a, @p or @e[type=player]"

Fixed bug MC-121663 - "Gamerules are copying from other worlds"

Fixed bug MC-121674 - "Execute doesn't work in Functions"

Fixed bug MC-121683 - "-= isn't a valid operation in scoreboard players operation"

Fixed bug MC-121686 - "Execute unless always fails on entities"

Fixed bug MC-121691 - "/teleport with rotation does not work"

Fixed bug MC-121695 - "Tellraw only supports 1 target"

Fixed bug MC-121711 - "@a or @s doesn't include dead player"

Fixed bug MC-121727 - "execute on multiple entites cancels, once one command fails"

Fixed bug MC-121728 - "The order, in which execute runs the command for each entity, is in reverse"

Fixed bug MC-121749 - "/entitydata does not apply modified NBT data"

Fixed bug MC-121765 - "Removing n scoreboard points adds them instead"

BUG FIXES

MC-121281 - Scrollbar in the creative and server menu isn't working with mouse

MC-121282 - Server Icons erased on loading multiplayer menu

MC-121283 - Underwater and in lava overlay is missing

MC-121284 - Resource pack and world folder buttons don't work

MC-121288 - Cinematic Camera doesn't work properly

MC-121302 - "Direct connect" button enabled/disabled at wrong times

MC-121314 - Video settings slider text "FS Resolution" doesn't fit

MC-121328 - GUI scales incorrectly

MC-121329 - Pressing "chat" key no longer selects search in creative inventory/recipe book

MC-121334 - [1-9] in creative inventory search tab sends additional keypress to search bar

MC-121396 - WASD keys in a weird order

MC-121418 - Crash when trying to paste non-string clipboard content

MC-121419 - Click and hover events are offset in chat

MC-121421 - Pressing enter in the name or seed field on the create world dialog no longer creates the world

MC-121433 - Non english letters are lowercase in controls setting, while English are upper.

MC-121456 - Chunks disappearing after switching windows in fullscreen mode

MC-121468 - Statistics can no longer be ordered by clicking icons

MC-121517 - Fullscreen button will not make game fullscreen

A lot of bugs related to commands because we rewrote the entire system ¯\(ツ)/¯

COMMANDS

CAVEATS

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.

GENERAL

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.

and are separated out. ... is where another command is required

is where another command is required -> foo means an alias to foo

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.

SPECIFIC COMMANDS

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.

/ADVANCEMENT

Removed /advancement test as it will be part of entity selectors

/BLOCKDATA

Removed in favour of /data

/CLEAR

The syntax of /clear has changed

/clear [<target>] [<item>] [<data>] [<count>] [<nbt>] -> /clear [<target>] [<item>] [<count>]

-> See the item argument type for more details

/CLONE

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

/DATA

New command that replaces /entitydata and /blockdata

and Has the following subcommands:

merge <target> <nbt> acts the same as /entitydata / /blockdata used to. Merges new NBT onto the target.

acts the same as / used to. Merges new NBT onto the target. get <target> prints the full data for the target

prints the full data for the target get <target> <path> [scale] returns the numeric value of a tag at the specified <path>, after multiplying with [scale] (default 1)

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 means foo 's child called bar

means 's child called foo[0] means element 0 of foo

means element of "quoted strings" may be used if a name of a key needs to be escaped

/DEFAULTGAMEMODE, /GAMEMODE

Now only accepts string IDs, not shorthand or numeric

/gamemode 2 -> /gamemode adventure

-> adventure /defaultgamemode sp -> /defaultgamemode spectator

/DIFFICULTY

/difficulty <value> now only accepts string IDs, not shorthand or numeric

now only accepts string IDs, not shorthand or numeric /difficulty 2 -> /difficulty normal

-> normal /difficulty p -> /difficulty peaceful

-> peaceful You can query for the current difficulty by using /difficulty without any arguments

/EFFECT

The syntax of /effect has changed, to avoid ambiguity.

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

/ENCHANT

Removed in favour of /modifyitem

/ENTITYDATA

Removed in favour of /data

/EXECUTE

/execute has been completely reworked

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)

executes a command using the entity (but doesn't change position) /execute at <entity> <chained command> executes a command using the position of <entity> (but doesn't change entity)

executes a command using the position of (but doesn't change entity) /execute offset <x y z> <chained command> executes a command using the position of <x y z>

executes a command using the position of /execute align <axes> <chained command> executes a command after aligning the current position to the block grid ( axes is any combination of x y and z )

executes a command after aligning the current position to the block grid ( is any combination of and ) 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>

executes a command if (or unless) matches /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>

executes a command if (or unless) the region between and matches /execute (if|unless) entity <entity> <chained command> executes a command if (or unless) <entity> exists (returns 1 or more entities)

executes a command if (or unless) 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

executes a command if (or unless) 's score matches 's score As replacement for /stats , a new subcommand store lets you store the result of a command somewhere:

, a new subcommand store lets you 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

is the result of a command, which replaces these old stats: success is how many times the command was successful. This is usually 0 or 1, but if the command split up (for example as @a ) then it may be more than 1. This replaces SuccessCount

is how many times the command was successful. This is usually 0 or 1, but if the command split up (for example ) then it may be more than 1. This replaces 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

is 0), 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 remaining syntax is: The value is stored into the scoreboard under <name> and <objective>

and The objective must exist, but unlike with /stats you don't need to set an initial value for <name>

you don't need to set an initial value for For store (result|success) block , the remaining syntax is: <xyz> <path> (byte|double|float|int|long|short) <scale> <chained command>

, the remaining syntax is: The value is stored into the block at <xyz> , into the nbt tag at <path> after multiplying by <scale>

, into the nbt tag at after multiplying by For store (result|success) entity , the remaining syntax is: <target> <path> (byte|double|float|int|long|short) <scale> <chained command>

, the remaining syntax is: The value is stored into the entity <target> , into the nbt tag at <path> after multiplying by <scale>

, into the nbt tag at after multiplying by 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!

/EXPERIENCE

/xp is now an alias for /experience

is now an alias for 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)

of either points or levels to the target (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)

of either points or levels on the target (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

as the previous level /experience query <player> (points|levels)

Returns either the number of points or levels on the given <player>

/FILL

The syntax of /fill has changed

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

/FUNCTION

No longer has optional (if|unless) <entity> arguments.

arguments. This has been moved into /execute

/function foo if @e[tag=bar] -> /execute if entity @e[tag=bar] run function foo

/GAMERULE

/gamerule no longer accepts unknown rules ("custom gamerules")

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)

/GIVE

The syntax of /give has changed

has changed /give <players> <item> [<count>] [<data>] [<nbt>] -> /give <players> <item> [<count>]

-> See the item argument type for more details

/MODIFYITEM

This is a new command that replaces /enchant

We don't know how it looks yet.

/REPLACEITEM

The syntax of /replaceitem has changed

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

/scoreboard had [<dataTag>] removed from its commands, as they're no longer needed

had removed from its commands, as they're no longer needed See the entity selector argument type for more details

/scoreboard team is now /team

team is now /scoreboard players tag is now /tag

players tag is now /scoreboard players test is removed in favourite of entity selectors

players test is removed in favourite of entity selectors There is a new /scoreboard players get <target> <objective> to query for specific scores

/SETBLOCK

The syntax of /setblock has changed

has changed /setblock <pos> <block> [<data>] [<mode>] [<nbt>] -> /setblock <pos> <block> [<mode>]

-> See the block argument type for more details

/STATS

Removed. Now part of /execute

The new /execute one isn't a direct replacement, the behaviour has changed:

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 and success , which covers all the old stat types

/STOPSOUND

* can be used instead of source to stop all sounds with a certain name, across all sources

/TESTFOR, /TESTFORBLOCK, /TESTFORBLOCKS

Removed. Now part of /execute

/TOGGLEDOWNFALL

Removed. It was always used to stop the rain, then make you frustrated in a minute when it's raining again.

Use /weather

/TP, /TELEPORT

/tp is now an alias of /teleport (much like /w , /msg and /tell )

is now an alias of (much like , and ) Coordinates are now relative to the executor, as with all other commands

The syntax of /tp remains, but with the behaviour of /teleport

/TRIGGER

/trigger <objective> is a new syntax as shortcut for /trigger <objective> add 1

/WEATHER

If you don't specify a time, it now defaults to 5 minutes (previously random)

COMMAND BLOCKS

The output signal of a command block used to be it's "success count", but now it's "result"

ARGUMENT TYPES

ENTITY SELECTORS (IE @E[..] )

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.

, , 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 10

is level 10 level=10..12 is level 10, 11 or 12

is level 10, 11 or 12 level=5.. is anything level 5 or above

is anything level 5 or above level=..15 is anything level 15 or below

is anything level 15 or below x & z are no longer center-corrected ( x=0 isn't x=0.5 anymore). They now support doubles, so use x=0.5 if that's what you wanted.

& are no longer center-corrected ( isn't anymore). They now support doubles, so use if that's what you wanted. gamemode (previously m ) no longer allows numerical or shorthand IDs, which were deprecated years ago.

(previously ) no longer allows numerical or shorthand IDs, which were deprecated years ago. The arcane shorthand names have been renamed

m -> gamemode

-> l or lm -> level

or -> r or rm -> distance

or -> rx or rxm -> x_rotation

or -> ry or rym -> y_rotation

or -> c -> limit

-> limit (was c ) No longer allows negative values, instead use sort=furthest

(was ) No longer allows negative values, instead use x, y, z, distance (was r ), x_rotation (was rx ) and y_rotation (was ry ) are now doubles and allow values like 12.34

(was ), (was ) and (was ) are now doubles and allow values like 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 with foo , bar and not baz

matches someone with , and not type=!cow,type=!chicken matches something that isn't a cow and isn't a chicken

matches something that isn't a cow and isn't a chicken type=cow,type=chicken isn't allowed, because something cannot both be a cow and 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 )

is the old default, sorting by distance (default for ) sort=furthest is the reverse of that (previously you'd use c=-5 for this)

is the reverse of that (previously you'd use for this) sort=random for random sorting (default for @r )

for random sorting (default for ) sort=arbitrary is a new option to not sort the result (default for @e, @a )

is a new option to not sort the result (default for ) 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"

for "they completed the advancement", for "they have not completed the advancement" Alternatively, pass a block of specific criteria to test for (again, true/false)

BLOCKS

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, because stone doesn't have doesntexist

is a syntax error, because doesn't have minecraft:redstone_wire[power=tuesday] is a syntax error, because redstone_wire 's power is a number between 0 and 15

is a syntax error, because 's 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 checks power but ignores other states such as north.

, it only checks but ignores other states such as north. 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 but north will be a default value (in this case, set to none )

, it will set power to 15 but will be a default value (in this case, set to ) There is no such thing as block data value in 1.13. It's either a different blocks, or a state.

ITEMS

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 i tem damage value in 1.13

or i in 1.13 Damage, where applicable, is being moved into nbt

Any other information is either a separate item or a property in nbt

Install the snapshot

Please report any and all bugs you find in Minecraft to bugs.mojang.com. If nobody reports a bug, we can't fix it!

To get snapshots, open your launcher and go to the "launch options" tab. Check the box saying "Enable snapshots" and save. To switch between the snapshot and normal version, you can find a new dropdow menu next to the "Play" button. Back up your world first or run the game on in a different folder (In the "launch options" page).

Snapshots can corrupt your world, please backup and/or run them in a different folder from your main worlds.

Cross-platform server jar:

Report bugs here: