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
- Reworked /execute store
- Made command-function loading much faster
- Made /execute if <..> 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.
- ... 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.
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
- 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 target
- get <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 means foo's child called bar
- foo[0] means element 0 of foo
- "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
- /defaultgamemode sp -> /defaultgamemode spectator
/DIFFICULTY
- /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 /difficultywithout any arguments
/EFFECT
- 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
/ENCHANT
- Removed in favour of /modifyitem
/ENTITYDATA
- Removed in favour of /data
/EXECUTE
- /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 of x y and z)
- 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 subcommand store 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 example as @a) then it may be more than 1. This replaces SuccessCount
- 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!
/EXPERIENCE
- /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 percentageas 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
- /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.
- 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")
- 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
- /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
- /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
- 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
/SETBLOCK
- The syntax of /setblock 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:
- 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)
- 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.
- There's no longer a "min" and "max" separate values, we instead support ranges
- level=10 is level 10
- level=10..12 is level 10, 11 or 12
- level=5.. is anything level 5 or above
- level=..15 is anything level 15 or below
- x & z are no longer center-corrected (x=0 isn't x=0.5anymore). They now support doubles, so use x=0.5 if that's what you wanted.
- gamemode (previously m) 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
- r or rm -> distance
- rx or rxm -> x_rotation
- ry or rym -> y_rotation
- c -> limit
- limit (was c) No longer allows negative values, instead use sort=furthest
- x, y, z, distance (was r), x_rotation (was rx) and y_rotation (was ry) are now doubles and allow values like 12.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 with foo, barand not baz
- type=!cow,type=!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
- 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 use c=-5for 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)
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
- minecraft:redstone_wire[power=tuesday] is a syntax error, because redstone_wire's power 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.
- 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)
- 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 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
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:
Share this story