{{exclusive|java}} {{Infobox program | title=Brigadier | version = [https://github.com/Mojang/brigadier/releases/latest 1.0.18] | source available = [https://github.com/Mojang/brigadier/ Yes] | programming language = [[wikipedia:Java (programming language)|Java]] | author = [[File:Mojang Studios logo.svg|x20px|link=Mojang Studios]] [[Mojang Studios]] | license = MIT License }} {{quote|I'm so proud of that name! Brigadier is the name of the command engine that Minecraft uses.|[[Dinnerbone]]|Brigadier{{Mcnet|programmers-play-minecrafts-inner-workings|Programmers: Play with Minecraft's Inner Workings!}}|Nathan Adams Mojang avatar.png}} '''Brigadier''' is a [[command]] parser and dispatcher, designed and developed for {{el|je}},{{link|url=https://github.com/Mojang/brigadier|title=Mojang/brigadier: Brigadier is a command parser & dispatcher, designed and developed for Minecraft: Java Edition.|website=GitHub}} mainly maintained by [[Dinnerbone]].{{link|url=https://github.com/Mojang/brigadier/graphs/contributors|title=Contributors to Mojang/brigadier|website=GitHub}} It is the first library used by ''Java Edition'' that [[Mojang]] has released under an open-source license.{{tweet|Dinnerbone|1045022190079479809|We just pulled in our very first community contributed code into a Minecraft Java Edition official library. Woo! 🎉 Want to help out? The first library we've opened is our command engine - it's MIT licensed so you can freely use it in your own projects!}} == Usage == Brigadier is used for parsing and executing string commands. === Features === * Define command nodes with argument or literal branches ** [[Commands#List and summary of commands|All the commands available in ''Java Edition'']] are actually the literal branches available for the root command nodes instead of the actual executed commands.{{Link|url=https://github.com/Mojang/brigadier/pull/8#discussion_r220457388|quote=I'd argue that most people identify command by first literal after root, so that would make "command" a sub-tree and not just path leading to leaf node. /bikeshedding|author=[[Bartosz Bok|boq]]|title=Added copyright header, LICENSE, and README.md by Dinnerbone · Pull Request #8 · Mojang/brigadier|website=Mojang/brigadier – GitHub}} * Modify/fork command source in command contexts ** {{cmd|execute as ''[[Target selectors|]]''}} may modify the command source to be multiple when multiple entities are [[Target selectors|selected]] * Active inspection on command parsing{{Link|url=https://github.com/Mojang/brigadier#inspecting-a-command|title=Inspecting a command|website=Mojang/brigadier – GitHub}} * Listing all possible commands from current command node{{Link|url=https://github.com/Mojang/brigadier#displaying-usage-info|title=Displaying usage info|website=Mojang/brigadier – GitHub}} * Handle command result real-time on execution success/failure ** {{cmd|execute store}} can store the command result to [[Chunk format#Block entity format|block]]/[[Chunk format#Entity format|entity]] NBT data or [[scoreboard]] * Recursive command node redirection ** {{cmd|execute run}} redirects to the root node of the vanilla command dispatcher == Limitations and issues == Brigadier has various numbers of limitations while executing the command, such as the numeric limitations on integer data types such as {{command|effect}}, {{command|weather}}, and floating-point data types such as {{command|time}}, making many integer values parsed in the commands inaccessible. == Minecraft argument types == {{Disclaimer|section=Minecraft argument types}} More general documentation on brigadier and its use can be found at the [https://github.com/Mojang/brigadier github repository], however this is information specifically on the argument types added and used in Minecraft. While basic implementation of commands may vary by mod loader, these argument types are mostly consistent. Your chosen mod loader probably has its own documentation for how to actually register commands using Brigadier. {| class="wikitable" |+Argument types !Class name !Description !Example ! |- |Commands.literal |A fixed keyword that must be typed exactly. |/[[Commands/datapack|datapack]] '''list''' | |- |StringArgumentType.greedyString |Will match the longest possible string of letters (only works at the very end of a command). |/[[Commands/say|say]] '''all of this will be in the greedy string''' | |- |StringArumentType.word |Will match the longest string of letters without spaces. |/[[Commands/tag|tag]] @s add '''oneword''' | |- |StringArumentType.string |Will match the longest string of letters without spaces, unless surrounded by quotation marks. Similar to greedyString, but can have more arguments afterwards. |/[[Commands/datapack|datapack]] enable '''"multiple words"''' last | |- |BoolArgumentType.bool |Can only be true or false. |/[[Commands/gamerule|gamerule]] keepInventory '''true''' | |- |IntegerArgumentType.integer |A Java int. Must be a whole number. This argument can optionally have a minimum value, or a minimum ''and'' maximum value. |/[[Commands/scoreboard|scoreboard]] players set @s objective '''100''' | |- |LongArgumentType.longArg |A Java long. Must be a whole number. Similar to int, but can store much larger numbers. This argument can optionally have a minimum value, or a minimum ''and'' maximum value. |'''Not used in any commands''' | |- |FloatArgumentType.floatArg |A Java float (6 digits of precision). Can have decimals. This argument can optionally have a minimum value, or a minimum ''and'' maximum value. |/[[Commands/playsound|playsound]] minecraft:ambient.cave master @s ~ ~ ~ '''1.23456''' | |- |DoubleArgumentType.doubleArg |A Java double (15 digits of precision). Can have decimals. This argument can optionally have a minimum value, or a minimum ''and'' maximum value. |/[[Commands/attribute|attribute]] @s minecraft:generic.movement_speed base set '''12.345678912345''' | |} (See more about Java ints, longs, floats and doubles [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html here]) == History == {{HistoryTable |{{HistoryLine||October 25, 2014|link=https://bugs.mojang.com/browse/MC-10880?focusedCommentId=205438&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-205438|Dinnerbone mentions Brigadier in the comments on {{bug|MC-10880}}.}} |{{HistoryLine||July 27, 2017|link={{tweet|Dinnerbone|890548451372564480}}|Dinnerbone discloses a non-obfuscated command parser library called "brigadier".}} |{{HistoryLine|java}} |{{HistoryLine||1.13|dev=17w45a|[[Command]]s are now handled with Brigadier. |''Minecraft'' introduces Brigadier as a dependency. }} |{{HistoryLine||September 26, 2018|link={{tweet|Dinnerbone|1045022190079479809}}|Brigadier is open sourced under the MIT License.[https://github.com/Mojang/brigadier/pull/8#issue-217673918 "Preparation for OSS :)" - Preparing for the open source software] – Mojang/brigadier – GitHub}} |{{HistoryLine||1.14|dev=19w08a|Now allows single quotes for strings in commands.{{Link|url=https://github.com/Mojang/brigadier/pull/52|title=Allow single quote in strings by boq · Pull Request #52 |website=Mojang/brigadier – GitHub}}}} }} === Version history === {| class=wikitable ! Version !! Date !! Changes |- ! 1.0.15 | September 26, 2018{{cite|url=https://github.com/Mojang/brigadier/releases/tag/1.0.15|title=Release 1.0.15 · Mojang/brigadier|website=GitHub}} | *Initial release |- ! 1.0.17 | February 19, 2019{{cite|url=https://github.com/Mojang/brigadier/releases/tag/1.0.17|title=Release 1.0.17 · Mojang/brigadier|website=GitHub}} | *Allow single quotes in strings *Added long argument *Implement calculation of suggestions for any text position *No longer depend on Guava |- ! 1.0.18 | July 16, 2021{{cite|url=https://github.com/Mojang/brigadier/releases/tag/1.0.18|title=Release 1.0.18 · Mojang/brigadier|website=GitHub}} | *Performance optimizations |} == Gallery == execute graph.svg|The {{cmd|execute}} command tree, which utilizes an overwhelming amount of the brigadier features. tag graph.svg|The {{cmd|tag}} command tree, showing the difference between actual executed commands (red nodes) versus the first literal after the root (the "tag" box) msg graph.svg|The {{cmd|msg}} command tree, showing that aliases have been implemented by brigadier's command node redirection functionality (dashed lines) == References == {{reflist}} == Navigation == {{Navbox Java Edition technical|general}} [[fr:Brigadier]] [[pt:Brigadier]] [[zh:Brigadier]]