本帖最后由 ustc_zzzz 于 2018-3-4 14:47 编辑
稀里糊涂的commands.json全解析
作为一个萌新第二次在游戏技巧版块发表主题。
原作者:@ustc_zzzz。本文基于Minecraft 1.13快照:Minecraft 18w09a。
引言
预备知识
开始理解commands.json
parser及其属性
后记
稀里糊涂的commands.json全解析
作为一个萌新第二次在游戏技巧版块发表主题。
原作者:@ustc_zzzz。本文基于Minecraft 1.13快照:Minecraft 18w09a。
引言
预备知识
开始理解commands.json
parser及其属性
后记
插一句:
https://gist.github.com/Dinnerbo ... ee2d8fc64514fb76de8
还记得 Dinnerbone 发的那个奇怪的推吗?那个推提到了一个 gist(上面给的就是),其中出现的巨大的 JSON 文件,现在看来很可能就是这个。
我对这个 JSON 理解是“全部 Minecraft 命令的语法树(请允许我使用这个词来称呼它)合并在一个文件里”。换言之,这个 JSON 描述了所有原版 Minecraft 指令的正确使用方式(虽然,这个文件不是给人看的)。
zzzz 这个贴给出了这个文件的一个十分明显的用途。
事实上,如果我们把脑洞再开得大一点,我们可以做出一个“适用于 Minecraft 1.13 Release 及以上版本的,外置的,Minecraft 命令集成开发环境”。这样一个奇葩的集成开发环境有什么用呢?
1. CB 玩家可以用它在不开游戏的情况下写 mcfunction(自带语法高亮)并进行调试...
2. Mod/插件开发者可以用它来制作生成对应的命令的具体实现,加速命令的开发(搞不好可以做图形化)...
好了脑洞结束,撤了
https://gist.github.com/Dinnerbo ... ee2d8fc64514fb76de8
还记得 Dinnerbone 发的那个奇怪的推吗?那个推提到了一个 gist(上面给的就是),其中出现的巨大的 JSON 文件,现在看来很可能就是这个。
我对这个 JSON 理解是“全部 Minecraft 命令的语法树(请允许我使用这个词来称呼它)合并在一个文件里”。换言之,这个 JSON 描述了所有原版 Minecraft 指令的正确使用方式(虽然,这个文件不是给人看的)。
zzzz 这个贴给出了这个文件的一个十分明显的用途。
事实上,如果我们把脑洞再开得大一点,我们可以做出一个“适用于 Minecraft 1.13 Release 及以上版本的,外置的,Minecraft 命令集成开发环境”。这样一个奇葩的集成开发环境有什么用呢?
1. CB 玩家可以用它在不开游戏的情况下写 mcfunction(自带语法高亮)并进行调试...
2. Mod/插件开发者可以用它来制作生成对应的命令的具体实现,加速命令的开发(搞不好可以做图形化)...
好了脑洞结束,撤了
对开发者很友好啊
u.s.knowledge 发表于 2018-3-4 06:30
插一句:
https://gist.github.com/Dinnerbone/7370a2846953eee2d8fc64514fb76de8
还记得 Dinnerbone 发的 ...
对cb玩家来说,早就有了...
两个都是我写的(跑)
解析方式的变更还带来了一些比较有意思的东西。
一则,应该很明显能发现,现在的命令错误提示比以前的版本,友好度提高了非常多。这意味着对命令中出现的错误,查知起来的成本更低。同样,也更容易能让新玩家了解到如何去寻找自己命令中的差错,而不是和以前一样全凭经验来做查验。
二则,虽然大部分命令没有在1.13的命令变更中做调整,但依旧有一些变化悄然发生在了这场变革之中。比如由/entitydata来的/data entity命令选择器参数处仅接受一个实体,而服务器玩家操作命令系列(/ban,/kick之类)也开始接受选择器(虽然依旧要求三级op权限而不能被命令方块执行)。这些细微之处的变化不容易察觉,但使用时可能没准一不留神就栽进去了,万望谨慎。
一则,应该很明显能发现,现在的命令错误提示比以前的版本,友好度提高了非常多。这意味着对命令中出现的错误,查知起来的成本更低。同样,也更容易能让新玩家了解到如何去寻找自己命令中的差错,而不是和以前一样全凭经验来做查验。
二则,虽然大部分命令没有在1.13的命令变更中做调整,但依旧有一些变化悄然发生在了这场变革之中。比如由/entitydata来的/data entity命令选择器参数处仅接受一个实体,而服务器玩家操作命令系列(/ban,/kick之类)也开始接受选择器(虽然依旧要求三级op权限而不能被命令方块执行)。这些细微之处的变化不容易察觉,但使用时可能没准一不留神就栽进去了,万望谨慎。
u.s.knowledge 发表于 2018-3-4 06:30
插一句:
https://gist.github.com/Dinnerbone/7370a2846953eee2d8fc64514fb76de8
还记得 Dinnerbone 发的 ...
实际上呢,调试是不可能的
你鬼知道里面实际游戏机制是咋样啊
https://github.com/langyo/SyntaxBuilder/blob/master/Example/cpp.sb
为何Mojang的脑洞和我碰一起了?…
(这是本人最近在实验的SyntaxBuilder语言的配置文件,用于部分解析C++语言)(这语言简称什么?当然是SB了…别想歪了,我没骂人)
为何Mojang的脑洞和我碰一起了?…
(这是本人最近在实验的SyntaxBuilder语言的配置文件,用于部分解析C++语言)(这语言简称什么?当然是SB了…别想歪了,我没骂人)
langyo_v3 发表于 2018-3-11 13:29
https://github.com/langyo/SyntaxBuilder/blob/master/Example/cpp.sb
为何Mojang的脑洞和我碰一起了?… ...
从来没听说过有任何不为你的人理解你的脑洞
明白了呃zzzz
executable为true代表试图匹配后面没有参数的情况。
这里好像有些问题。executable为true应该只是代表如果这之后没有参数的话这个命令是可以执行的,也就是如果后面还有参数的话也可以继续解析。
例如新版的kill
所以tp命令那里究竟是怎样解析的呢……