Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 1081|回复: 20

[教程] 【命令】命令教程“真”从零开始(十七)彩色文字,命令书,JSON文本[1.18]

[复制链接]
Dahesor 当前离线
积分
2634
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2019-2-5
查看详细资料
发表于 2021-10-2 10:59:03 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 Dahesor 于 2021-12-9 01:49 编辑

☆【命令】命令教程"真"从零开始(十)☆
☆彩色文字,命令书,JSON文本☆


     声明:
     1. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
     2. 本系列全部教程绝对适用于当前Java最新版(1.18)
     3. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
     4. 本教程需要读者有特定的命令知识。这些这些内容在下方表格中列出


需要前置知识:
请确保你理解下列的内容。下表的所有内容一定在本系列教程的某一帖讨论过,所以若您是从本系列第一帖起阅读至今,可以不用看。
对于跳跃式阅读的读者,还请检查一番:






在开始教程前,我要先说两句。
本文是关于JSON文本的教程,若果你对JSON很熟悉的话完全不需要看本教程,请直接移步到Wiki的页面,那里有关于所有键值对的详细说明。

如果你完全对JSON感到陌生,那么感谢你点开了这个帖子,我会尽全力讲明白。但是你要注意,虽然我已经尽可能做得亲民,阅读本教程仍是一个很费脑的工作。若果你只是在地铁或者躺在床上带着轻松的心情扫一遍本文,那你大概率只是会在下面回一句“好难啊看不懂”,然后再被绵羊版主扣分。
……我毫无办法。

请挑一个清醒的时候阅读本教程,若果条件允许的话,请准备好笔记本,打开Minecraft在一旁。
本文会给予你对JSON文本的一个整体的概念,但若不实际应用,即使你认真读过,心里也会发虚,不知道自己到底看懂没。
所以,请在Minecraft中执行一遍下面提到的所有命令,并自行举一反三。
(由于下面的命令有些已经长到超出聊天框输入限制,你可能需要一个命令方块)

如果你这样还没有看懂的话,抱歉我还是没有办法——你有两个选择,要么放弃,要么再看一遍

话说到这里,我们正式开始。



     前言


当你制作一张地图的时候,你一定需要某种方式来与玩家沟通,比如告知他们游戏规则,阐述剧情等。

该如何做到这一点呢?
你最容易想到的就是告示牌,但我们还有其他的,更简洁的方法,即在聊天框中发送信息。
你可能见过这些信息,它们有的是彩色的,有的有特殊格式,有的点击可以运行命令。
今天,我们就要了解,如何制作彩色文字。
与JSON文本。

JSON的内容我会拆成两帖来讲。这个是第一帖,描述它的基础逻辑与格式,而下一帖则会讨论它在NBT中的应用(比如制作命令书),与转义等问题。
那,我们开始吧。


1. 导言

如何向玩家发送一条信息?
最最简单的命令是/say:

格式:
  1. /say <信息>
复制代码


十分的简单,只需要将你想要广播的信息放到/say的后面就好了:

比如:
  1. /say 那个ID是Dahesor的人的外表十分出众
复制代码

所有玩家就可以在聊天框中看到:
那个ID是Dahesor的人的外表十分出众

信息中还可以包含空格选择器,十分方便。
比如:
  1. /say @p的外貌    十分出众
复制代码

输出为:
Dahesor的外貌    十分出众

注意选择器“@p”被替换为了我的ID。


这种简单的方法适用于很多情况,但是有些时候地图创作者的要求更高。
比如……你可能发现了,聊天框中的那一行字是白色的,没有任何特殊格式。
那么,如果我想要在聊天框中输出一条彩色的信息,要怎么办呢?

我们要使用另一条命令搭配一种特殊的格式来做到这一点。

这个命令叫作“/tellraw”
本命令可以在聊天框中显示带有特殊格式的文字。
格式:
  1. /tellraw <目标玩家> <JSON文本>
复制代码


我们只要把<目标玩家>替换为想要通知的玩家,后面再加上你想要发送的信息,本命令就会向选中的玩家发送指定的信息。

但是……后面的“信息”该怎么写呢?
这样么?

  1. /tellraw @a Dahesor的外貌十分出众
复制代码

按照逻辑,这样是不是就可以向所有玩家发送信息“Dahesor的外貌十分出众”?
很遗憾,不是的。
和/say命令不同,/tellraw命令无法直接在后面附上信息。我们需要将信息写成一种特殊的格式。


这种格式叫做“JSON”。
用这种格式写成的文字叫做原始JSON文本


2. JSON


JSONJavaScript Object Notation,JavaScript物件表示法)(读作“/ˈdʒeɪsən/” ,来跟我读,Jay~Saan)是一种计算机语言。
它是由一个叫做道格拉斯的研究计算机的老头子创建的(好吧,他创建的时候还不是很老)
这种语言是由JavaScript发展出来的,是JavaScript的一个子集。
是的,这种语言不是Mojang搞得,而是通用的。


——以上信息和我们今天的教程几乎一点关系都没有。上面一段话你也不用理解。
我们要讲的,并不是“JSON”,而是用这种格式写成的文本原始JSON文本(Raw JSON Text)

不要把JSONJSON文本弄混,JSON不是专门用来写文字的,它可以做的事情很多,JSON文本只是按照JSON的格式写就的文字而已。

你可以这么理解:JSON就像一张表格,你往里面填什么都行,而JSON文本是一种规定,它规定了“表格的哪一行要填什么。”
但是你填什么和JSON一点关系都没有。

所以说“JSON”这个表格不是Mojang发明的,但是“JSON文本”,即“表格中哪一行要填什么”,是Mojang创建的东西。

不知道我说明白没有。


3. 原始JSON文本
     注意:以下内容只适用于Java版

     基岩版的原始JSON文本格式有一定不同,更加简单且严格,详见此



所以让我们把JSON抛开,单独来看JSON文本。
Minecraft中,几乎所有的文字都是由这种格式写就的,比如聊天框的文字,物品的命名与描述,书,告示牌,生物的名字,队伍的名字等等等等。
JSON允许文字带有颜色,字体,形态,或点击执行命令等,也就是你熟知的命令书,命令告示牌等。
所有地方的文字都采用相同的格式,但为了方便,今天我们只看聊天框文字,与命令/tellraw。



JSON文本听起来很高大上,但实际上就是对一个带有格式的文字的一种表达方式而已。比如下面的一串JSON文本:
  1. [{"selector":"@p","color": "red"},{"text": "的外貌十分出众","color": "blue","italic": true,"underlined": true}]
复制代码

我们把它扔进上面讲过的/tellraw命令里就是这样:
  1. /tellraw @a [{"selector":"@p","color": "red"},{"text": "的外貌十分出众","color": "blue","italic": true,"underlined": true}]
复制代码
本命令会向所有玩家发送后面的JSON信息。

上面的代码经过游戏解析后,你最终会看到:
Dahesor的外貌十分出众

你可以注意到我把自己的ID染成了红色,把其余的内容染成蓝色,而且后半部分变为了斜体,还画了一道下划线。


上面的JSON文本看起来比较复杂,但实际上只是因为我写了一个复杂的JSON文本而已。
最简单的JSON文本实际上非常简单,
它长这样:
  1. ""
复制代码

对,就是一对双引号。

然而这个JSON文本是空的,换句话说,如果将这个JSON文本输出成“人类阅读”的文字,你什么都看不到。

想要加入一些文字也不难,你只需要把你想要添加的文字放到两个双引号中间就好了:

比如这样:
  1. "Dahesor的外貌十分出众"
复制代码
我们在双引号之间加入一串文字。
现在只要把它装进/tellraw命令里:
  1. /tellraw @a "Dahesor的外貌十分出众"
复制代码
向所有玩家发送后面的JSON信息。

这一串JSON文本会输出为:
Dahesor的外貌十分出众

就这么简单。无论你想发送什么,只要把它装进双引号""里,放到/tellraw里面就好了。(几乎是的)

要注意的是,双引号是英文的双引号""而不是中文的“”。你要注意英文的双引号是没有上引号下引号之分的,中文是有的。

那,你已经得到了第一个JSON文本,但是使用这个用双引号围起来的方法,你所看到是一串没有颜色,没有格式的文本。
该如何做到像上面的“Dahesor的外貌十分出众”那样带有颜色与格式的文字呢?


实际上,上面的双引号围文字的方式只是一个更复杂的一点的JSON文本的简写。

  1. "Dahesor的外貌十分出众"
复制代码
实际上只是简写。

它的完整形式其实是:
  1. {"text": "Dahesor的外貌十分出众"}
复制代码

上面的两串JSON文本效果完全相同,但是第二个“完全体”要复杂得多。

你可以发现JSON文本从   "Dahesor的外貌十分出众"   变成了  {"text": "Dahesor的外貌十分出众"}   

现在,我要你忘记原来的,简单地把文字装进双引号的办法。
让我们重新开始看这一条JSON



3.1 获得一个JSON文本


我们把上面的JSON拿来,再标注颜色以便您阅读:

{
"text": "Dahesor的外貌十分出众"}

如果你对代码有恐惧症,放轻松,放轻松。这不复杂,上面的JSON文本的组成十分简单。
从上面的JSON中你应当注意到:

  • 它的两侧由花括号“{ }”包围。这对花括弧标志了该JSON文本的开始,与结尾
  • 在花括弧内部,我们有  text  与  Dahesor的外貌十分出众  两项内容
  • 两项内容本身各自都由引号 " " 包围,这对引号指示了这一个内容的起始与结束,就像最外面的花括弧指示了JSON的起始与结束一样。
  • 两个内容之间由冒号“ : ”分隔。
  • "text"是“文字”的意思,"Dahesor的外貌十分出众" 是我们要显示的文字。
  • 换句话说,代码片段  "text": "Dahesor的外貌十分出众"  实际上就指明了“我们要显示的文字(text)是  Dahesor的外貌十分出众”。
  • 类似 "text": "Dahesor的外貌十分出众" 这样的一对内容被称为“键值对”。
  • 类似格式的内容我们还能写出很多,比如"颜色": "蓝色"或者"喝什么": "牛奶"
  • 冒号前面的内容(颜色,喝什么,text)指明了该键值对在规定什么东西,冒号后面的内容(蓝色,牛奶,Dahesor的外貌十分出众)指明了该键值对规定的内容的值。
  • 用大白话说,"颜色": "蓝色"表示了颜色是蓝的,"喝什么": "牛奶"表达了我喝的是牛奶,而"text": "Dahesor的外貌十分出众"就表达了显示的文字是Dahesor的外貌十分出众
  • 而这样一个包含了一个或数个键值对的花括号,被称为一个对象(Object)


这实际上就是JSON的基础格式了。JSON可以由一个或数个键值对组成,再由大括号包围。
我们的第一个JSON文本  {"text": "Dahesor的外貌十分出众"}  中只包含了一个键值对,指明了我们要显示的文字。

把它输出成人看的文字就是:
Dahesor的外貌十分出众

接下来,如果想要为这个文字添加颜色,只要去再添加一个键值对来指明颜色即可,比如:

{"text": "Dahesor的外貌十分出众", "color": "blue"}

这一串JSON文本在上一串的基础上,还规定了文字的颜色。
你应当注意到:

  • 除了原先的键值对  "text": "Dahesor的外貌十分出众"  指明了“文字内容”以外,我们又多了一对键值对  "color": "blue"
  • color是颜色的意思,blue是蓝色,所以"color": "blue"表达了颜色是蓝色
  • 我们有两个键值对,一个text指明了文本内容,一个color指明了颜色。
  • 两个键值对之间以逗号 , 相隔。
  • 再次说明,这样一个包含了一个或数个键值对的大括号,被称为一个对象 (Object)


把上面的内容装进/tellraw里:
  1. /tellraw @a {"text": "Dahesor的外貌十分出众", "color": "blue"}
复制代码

你就可以在聊天框看到:
Dahesor的外貌十分出众

这样一串蓝色的文本。

当然我们呢也可以用其他的文字和颜色,比如:
  1. /tellraw @a {"text": "祝你好运!", "color": "red"}
复制代码

我们把文字"text"改成了  "祝你好运!",并把颜色"color"从蓝色("blue")改成了红色("red")。
所以上面的命令执行后,就可以在聊天框看到:
祝你好运!

同理:
  1. /tellraw @a {"text": "MCyysd", "color": "green"}
复制代码
green是绿色,所以本命令显示:
MCyysd

OK。应该不难,即使你没理解我上面讲的内容,光看这几个例子你也大概就能明白了。

在上面的3个例子中,文字被分别调成了blue蓝色,red红色,和green绿色,那么,下面给出所有可用的颜色:

OK,如果你觉得需要的话,以下是更多示例:




3.2 布尔值


非常棒,相信你现在已经可以使用JSON文本熟练地广播一条带有颜色的文字了!

然而,除了颜色,JSON文本远远没有这么一小点东西。
接下来,我们来学习如何将文字变成斜体。

在上面的数个例子中,每一条JSON都有两个“项”或者说“键值对”,一个"text"规定文本内容,一个"color"规定文本颜色。
那么,如果我们需要规定文字的斜体属性,理应再加入一个新的键值对。
这个项目叫做"italic"
就像"color"规定了颜色一样,"italic"规定了文本是否为斜体。
不过一个明显的区别是,颜色"color"可以有很多种,但是斜体"italic"只有两种可能,要么斜体,要么不是斜体。

我们使用了类似“red”这样的一串字符来表达颜色,但对于斜体,
我们使用ture代表是斜体(true是“”的意思),或者用false代表不是斜体(false是“”的意思)。

比如,这样一条JOSN文本:
  1. {"text":"这是一条斜体文字", "color": "red"}
复制代码

让我们尝试把它变成斜体的:
  1. {"text":"这是一条斜体文字", "color": "red", "italic": true}
复制代码
你应当注意到:
  • 除了"text""color"外,我们新增了一个"italic"来规定斜体。
  • 就像之前做的一样,我们使用逗号来将新的项目分隔开来。
  • 就像之前做的一样,"italic"true之间为冒号,以表达两者的关系。
  • 新增的"italic"就像"text"或"color"一样,由引号包围。注意在JSON中所有的“键”,即“冒号前面的内容”都总是被双引号括起。

看起来这个新的“斜体”好像遵循和原来的两个完全一样的规律,但实际上,有一个巨大的不同。
我将每一对键值对拿出来:

  • "text": "这是一条斜体文字"
  • "color": "red"
  • "italic": true


注意到不同了么?
所有内容都是由双引号""包围的,比如"color",或者"red",或是"这是一条斜体文字"
只有true不是。true在上面的代码中直接写为true,没有加双引号。

为什么?
因为类似  "red"  或者  "这是一条斜体文字"  是一串代表特定概念的字符串,但是ture本身就是一个概念
"red"是红色的意思,但是JSON不管这个,JSON这种格式不在意你在双引号里添了什么。记得我们一开始就说过得东西么?JSON就是个表格,你填什么都行。
JSON这个语言本身不理解双引号""里是什么意思,解析""里面的内容的是Minecraft。JSON只是个表格,是Minecraft在读“表格里写了啥”
但true不一样,true就是真,它相当于 “打勾”。
看看下面这张图:

hd_1_ope_1,12.png

换言之,用"red"代表红色是Minecraft规定的,并不通用于JSON,但是true是通用的。
true代表真,false代表假,当JSON出现这两者时,不用加双引号
这种要么真要么假的值,被称为布尔值(Bolean)

           JSON的每个值都可以是由双引号" "包围的字符串,或者是代表的布尔值,即turefalse
               无论使用JSON的软件如何解析字符串,对JSON来说就只是一串文本,但是布尔值是一个概念(真或假)       


对于没有看懂以上解释的读者,请只记住,true和false不用加双引号。没有为啥,JSON这么规定的。



OK,相信你看完了上面的解释。
那么看看例子:
  1. /tellraw @a {"text":"一串文字", "color": "blue", "italic": true}
复制代码
注意:
  • 我们设置了文字为“一串文字”,颜色为蓝色。
  • 后面的"italic": true代表是斜体,因为true代表真。
所以该命令的效果为:
一串文字

反过来看:
  1. /tellraw @a {"text":"一串文字", "color": "blue", "italic": false}
复制代码
同样的命令,同样的JSON文本,只是把true换成了false。
此时的"italic: false"代表不是斜体,因为false代表假。
所以效果为:
一串文字

当然,允许省略italic:
  1. /tellraw @a {"text":"一串文字", "color": "blue"}
复制代码
省略了italic,即“斜体”这一属性将被设为默认值,对于/tellraw命令发送的信息而言,默认值是不是斜体。
因此省略italic会获得不是斜体的文字。
但有的地方的默认值是“是斜体”(比如,物品的自定义名称),这时省略italic会获得斜体文字。
当然,不只是italic,所有其他可省略的项目省略后都设为默认值。



3.3 举一反三


好,现在你知道如何为文字添加斜体了。

当然不止斜体,我们还可以为文字添加粗体(bold下划线(underlined删除线(strikethrough与乱码(obfuscated
就像斜体(italic一样,以上的4项都是布尔值,即要么true要么false。

粗体,下划线,与删除线应该不用解释,唯一可能需要解释的是乱码。这玩意如果设为true就会使文字变成这样:
12.gif
OK,那,看向下面的命令:
  1. /tellraw @a {"text": "这什么玩意乱糟糟的", "color": "red", "bold": true,"italic": true, "strikethrough": true, "obfuscated": false, "underlined": true}
复制代码
好,在上面的/tellraw命令要输出的JSON中,我们的文字是"这什么玩意乱糟糟的",颜色是红色。
接下来,除了乱码(obfuscated)调成false以外,其他所有都调成了true。
所以上面的玩意的效果为:
这什么玩意乱糟糟的

你将会看到这个被同时加了斜体粗体下划线与删除线的东西。

那么,我相信你现在可以为文字添加各式各样的字体了。
不过如果你认为需要的话,下面是更多例子:




3.4 列表

                                        提醒:本段内容较难以纯逻辑讲述,需要配合实例食用。                                   
                请在读过所有解释,对列表与"extra"有一定概念后,详细研究段末给出十余条实例。          


OK,相信你现在已经可以熟练地给文字加上颜色与形态了。
你已经可以轻松地制作出像是 “真红” 或者 “啊我死了” 这样的文字了。
那么,你该如何实现这个呢?

彩色哎!

控制颜色的键值对叫做"color",上面已经出现过很多次了,但问题是这个"color"只是控制全部的颜色,要么全红,要么全黄,无法做出彩色的东西。
这样该怎么办么?我们需要把不同的颜色分开,分成数个不同的对象,再将他们按顺序放到列表里。

比如,彩色哎!是彩色的你不会做,但是单一个红色的“”你是知道怎么做的:
  1. {"text": "哇", "color":"red"}
复制代码

对吧。
后面的几个也同理,我们把每个有相同属性的文字拿出来:
  1. {"text": "彩色", "color":"gold"}
  2. {"text": "的", "color":"green"}
  3. {"text": "哎!", "color":"blue"}
复制代码
OK,上面的4个JSON文本分别描述了一个或者数个有相同属性的字符,那我们只要把它们按顺序连在一起就好了。
这时,我们使用列表——方括号"[ ]"包围,以逗号相隔:

  1. [{"text": "哇", "color":"red"}, {"text": "彩色", "color":"gold"}, {"text": "的", "color":"green"}, {"text": "哎!", "color":"blue"}]
复制代码
你应该注意到:
  • 我们实际上没有做什么,只是把5个JSON文本连在一起。
  • 唯一的更改是,外围由方括号"[ ]"包围,方括号内是数个并列的JSON,
  • 且每个JSON之间由逗号相隔。
  • 这种格式叫做列表(List)

上面的这串JSON,会被Minecraft按顺序解读,最后输出为:
彩色哎!

我们多举一个例子:
看下面的文本:
我!Dahesor!打钱!

该如何使用JSON文本来显示上面的文字?
我们可以把上面的句子分成3段,第一段是“我!”,没有任何颜色或格式。第二段是“Dahesor!”,这一段是蓝色且粗体。第三段是“打钱!”,这一段是红色的。
那么,我们就可以分别写出这三段的JSON:
  1. {"text": "我!"}
复制代码
我!
  1. {"text": "Dahesor!", "color": "blue", "bold": true}
复制代码
Dahesor!
  1. {"text": "打钱!", "color": "red"}
复制代码
打钱!

把它们封装进列表里,再安进/tellraw命令中::
  1. /tellraw @a [{"text": "我!"}, {"text": "Dahesor!", "color": "blue", "bold": true}, {"text": "打钱!", "color": "red"}]
复制代码
上面的命令输出为:

我!Dahesor!打钱!

完成。
只要你肯好好看两遍,应该不难理解。不过即使你理解了的话可能心里也会有点发虚,没关系,这一节末一样有例子。


但在举例之前,我们先来看另一个东西。
下面有一串文字,请你用JSON表达:

反复横跳反复横跳

OK。你要注意到,上面一行字并不是只有一种属性。有些是蓝色的,有些是绿色的。那么这样只用一个JSON的组件是解决不了了,需要用刚讲过的列表。
我们还可以发现,整串文字都是粗体加下划线,唯一不同的属性就是颜色。“反复”都是绿色,“横跳”都是蓝色。
那么,按照上面刚讲过刚讲过的方法,这行字要写成这样:

  1. [{"text": "反复", "bold": true, "underlined": true, "color": "green"}, {"text": "横跳", "bold": true, "underlined": true, "color": "blue"}, {"text": "反复", "bold": true, "underlined": true, "color": "green"}, {"text": "横跳", "bold": true, "underlined": true, "color": "blue"}]
复制代码

好长啊。明明每一部分都有两个重复的属性,但是因为颜色这个属性是不同的,就要重写。

那,有没有简单点的方法呢?
有。这个东西和"text","color"一样,也是一个键值对。它叫做"extra"
extra是英文“额外”或“附加”的意思。
"extra"为一个JSON组件规定它的“附属项”,这些附属项会继承上一级的特性
"extra"的值并不是字符串也不是布尔值,而是列表。

我们在之前讲过了列表,大概长这样:[{...}, {...}, {...}]
现在,这个列表不再是在“外面”,而是成为了"extra"的值
比如:

  1. {"text": "枯藤", "color": "red", "extra": [{"text": "老树"}, {"text": "昏鸦"}] }
复制代码

上面的JSON文本中,我们首先规定了“枯藤”为红色。但除了被使用的"text"和"color"外,还多了一个"extra"与其列表
"extra"后面的东西  [{"text": "老树"}, {"text": "昏鸦"}]  拿出来就是一个正常的列表,现在只是放进去成为了一个附属而已。

像上面说过的,extra的附属项会继承原来的属性,除非被重新覆盖,所以即使后面的  [{"text": "老树"}, {"text": "昏鸦"}]  并没有规定颜色是红色,但是“老树”和“昏鸦”还是会成为红色,因为他们的上一级“枯藤”规定了"color": "red"

所以命令:
  1. /tellraw @a {"text":"枯藤","color": "red","extra": [{"text": "老树"}, {"text": "昏鸦"}] }
复制代码
显示为:
枯藤老树昏鸦

下一步,我们稍稍改动一下上面的命令:
  1. /tellraw @a {"text":"枯藤","color":"red","extra": [{"text": "老树"}, {"text": "昏鸦", "color": "blue"}] }
复制代码
其他的都没变,只是我们在最后一个“昏鸦”后面加上了一个"color": "blue"规定其颜色为蓝色

我们刚刚说过,"extra"后列表内的内容会继承前面的特性,除非被覆盖
在新的命令中,最前面规定了颜色为红色。在"extra"后面的附属项中,如果没有重新规定颜色,则会继承“颜色为红色”,比如“老树”。
但是“昏鸦”现在重新规定颜色为蓝色,覆盖了继承过来的红色属性,所以,上面命令的效果为:
枯藤老树昏鸦

你有没有看明白"extra"?
这种模式有没有有一点烧脑?

(我建议你在这里先理一理思路,完全理解extra)


但实际上在上面的例子里你完全不需要用"extra",
因为列表有一个功能,就是第一项的内容会被视为"extra"的母项,后面的每一项都会都被视为附属项,继承第一项内容的属性,除非被覆盖

比如,还是这个枯藤老树昏鸦的例子,但这回我们不把“老树”和“昏鸦”放到"extra"里,而是拿出来放到并列的列表里:
  1. /tellraw @a [{"text": "枯藤", "color": "red"}, {"text": "老树"}, {"text": "昏鸦"}]
复制代码

你可以发现,我们只在第一个“枯藤”里规定了颜色为红色,“老树”和“昏鸦”都没规定。我们没有用“extra”哦,这是列表。
但是上面的命令并不会输出为“枯藤老树昏鸦”,而是会输出为:
枯藤老树昏鸦

JSON文本中最外侧列表的的本质就是一个首项接着数个附属项。第一个里面规定了颜色为红,所以整个都变成了红色。
或者说:
  1. /tellraw @a [{"text": "枯藤", "color": "red"}, {"text": "老树"}, {"text": "昏鸦"}]
复制代码

  1. /tellraw @a {"text": "枯藤", "color": "red", "extra": [{"text": "老树"}, {"text": "昏鸦"}]}
复制代码
是等价的!

     对于连接了数个JSON文本的列表,其本质就是,第一项会被视为母项,后面接的所有内容都会被视为第一项的"extra"。

但是也要注意是"第一项",所以这条命令:
  1. /tellraw @a [{"text": "枯藤"}, {"text": "老树", "color": "red"}, {"text": "昏鸦"}]
复制代码
我们把"color": "red"挪到了第二个“老树”处
就会输出为:
枯藤老树昏鸦

第二项也是第一项的附属项,和第三项是并列的。
它无法影响和它并列的第三项,以及是它上级的第一项。
因为这条命令等价于
  1. /tellraw @a {"text": "枯藤", "extra":[{"text": "老树", "color": "red"}, {"text": "昏鸦"}]}
复制代码
而"extra"内的子项之间不会互相影响。


那么让我们看回反复横跳反复横跳,该如何用"extra"在不重复他们重复属性的情况下写JSON文本呢?这样:
  1. /tellraw @a {"text": "反复", "bold": true, "underlined": true, "color": "green", "extra": [{"text": "横跳", "color": "blue"}, {"text": "反复"}, {"text": "横跳", "color": "blue"}] }
复制代码
  • 在上面,我们主项第一个“反复”规定了字体为粗体下划线,颜色为绿。
  • 后面的"extra"接了3个附属项
  • 第一个“横跳”继承了粗体与下划线,并重新覆盖了颜色为蓝。
  • 第二个“反复”没有覆盖任何东西,完全继承原属性。
  • 第三个“横跳”与第一个“横跳”相同。

最终,本命令输出为:
反复横跳反复横跳

那么,不用"extra",和上面命令等价的列表是什么呢?
这个:

  1. /tellraw @a [{"text": "反复", "bold": true, "underlined": true, "color": "green"}, {"text": "横跳", "color": "blue"}, {"text": "反复"}, {"text": "横跳", "color": "blue"}]
复制代码
这条命令同样输出为:反复横跳反复横跳




好。
若看得完全一塌糊涂,要么放弃,要么再看一遍。
若你觉得自己基本明白我在说什么,不,连基本明白都不用。毕竟使用一个东西并不需要得知他的原理。你只要对上面讲的有基础概念就好,下面的11条示例会让你明白怎么用的



..
..
..
..
..


看完示例了?
教程还没完,不过你差不多已经度过了最难的部分。
不过在继续之前,我还要再举一个例子:
命令:
  1. /tellraw @a [{"text": "你好,", "color": "green", "bold": true}, {"text": "世界!", "color": "blue", "bold": true}]
复制代码

输出为:
你好,世界!

3.5 对象



首先恭喜你看完了列表部分。
那么接下来就是最令人兴奋的步骤了。
该如何制作点击事件?
或者,如何点击一行文字就可以执行命令?
本节就是关于这件事的。

你可能知道,JSON文本可以做到,使玩家在点击一段文字后,执行某种互动。
比如,可以点击文字执行命令,或者点击文字打开一个网页。

当然,这也是文字的一项属性,就和"color"或者"bold"一样。
这个项目(键值对)叫做"clickEvent"。它的值保存了互动内容的信息。包含是哪一种互动(运行命令还是打开网址),以及互动的信息(要运行的命令或者要打开的网址是什么)。

但你可以注意到,有一点不同的是,"color"只包含一个信息,即颜色。"bold"也只包含一个信息,即是否。但是"clickEvent"包含了两个信息,一个是要执行哪种互动,一个是互动的内容。
这就导致我们无法在单单一个字符串中描述完,我们需要一个对象。
或者说,"clickEvent"的值是一个对像(即一个大括号{ })

OKOK,既然"extra"的值可以是个列表,"clickEvent"的值当然也可以是个对象。

在这个对象内包含了另外两个键值对:
一个是"action",指定了要执行哪种互动。可以是"run_command"执行命令,也可以是"open_url"打开链接。(当然还有别的但是我们暂时只需要这两个来举例)
一个是"value",即要互动的内容。根据"action"的不同,这里应该是你要执行的命令,或者是要打开的链接。

嗯嗯,看上面的解释是不是有一点乱?没关系,下面的例子会帮助你。

看下面的例子:
  1. /tellraw @a {"text": "点击切换白天", "clickEvent": {"action": "run_command", "value": "/time set day"}}
复制代码
你应当注意到:
  • 我们有写下项目"clickEvent",但是其值并不是字符串也不是布尔值,而是一个对象。
  • 对象内有"action"指定了互动内容为"run_command",即执行命令。
  • 对象内还有"value"指定了要执行哪一条命令,我们执行的是"/time set day",即“将时间更改为白天(关于本命令请见本系列第3帖)”。
  • 而整个  {"action": "run_command", "value": "/time set day"}  都是"clickEvent"的值,即“执行命令/time set day”

本命令的效果为:
run_command_1_deopsaved.ws.1.gif

看懂了么?
或者,我们可以再用表格类比一下"clickEvent":
2..2.png
这张图有没有帮助你理解逻辑?


当然。你可以任意更改文字和要执行的命令,比如这样:
  1. /tellraw @a {"text": "给我一个苹果谢谢", "color": "yellow", "clickEvent": {"action": "run_command", "value": "/give @s apple 1"}}
复制代码

这回我们把执行的命令变成了"/give @s apple 1",即“给自己一个苹果”(关于本命令请见本系列第13帖):
效果:
run_command_2_deopsaved.ws.131.gif



行,我们都举了两个例子了。别愣着别愣着,自己试一试玩一玩再回来接着读。

对于执行命令,你需要注意:
  • 请务必在命令前加上斜线"/"。是的,在聊天框中的JSON文本内,执行的命令不加斜线会被视为聊天信息。【总是加斜线不会有错】
  • 执行的命令是以点击的玩家的身份与位置执行的。如果你不理解这句话的意思没关系,我们还没讲到。


那我们继续看下一个例子。
这次我们不再"run_command"执行命令,而是"open_url"打开链接:
  1. /tellraw @a {"text": "需要我帮你百度一下么?", "clickEvent": {"action": "open_url", "value": "https://www.baidu.com"}}
复制代码

我们把"action"从"run_command"执行命令改成了"open_url"打开链接。
此时"value"应该填写要打开的URL。我们填写的是千度的网址。

效果:
open_url_1_deosaved.ws.351.gif


这样,就可以打开网页了。
不过要注意网址必须是完整的,比如以https://开头。想要打开百度你需要将"value"写为"https://www.baidu.com"而非"www.baidu.com"后者没有效果。


对于这种格式我就不讲太多了,讲太多反而可能让你混乱。
老规矩,上例子:




4. JSON小结与语法树


首先恭喜你,JSON文本小学毕业了。
本教程会送你到中学毕业,所以还没完。
但是后面的内容都是重复的,照着填就好了。主要的格式与逻辑已经探讨完了。

但是在继续之前,让我先对上面说的所有东西做一个小结,免得你模糊或者心里发虚:

  • JSON文本有一个或数个对象(Object)组成,若可以有数个对象,则由列表"[ ]"包含。
  • 每个对象包含数个键值对,并以花括弧"{ }"包含。
  • 每个键值对,或并列的项目之间以逗号相隔。
  • 键值对的格式类似于"key": <value>。
  • 值“<value>”有数种不同的类型。
    • 可以是字符串,格式为"key":"value",比如"text": "1a2s3d""color":"red"。字符串总是由双引号包围。
    • 可以是布尔值,格式为"key": true或者"key": false。比如"bold": true。注意没有双引号。
    • 可以是数值,格式为"key":<数值>,没有双引号。但JSON文本基本没有使用数值,这里不讨论。
    • 可以是一个对象,<value>应该是一个由{}开头与结尾的完整对象。比如"clickEvent": {"action": "open_url","value":"https://www.example.com"}
    • 可以是列表。<value>应该是一个完整的列表,内含数个并列的项目。在JSON文本中,只使用并列对象,比如"extra":[{"text": "a"}, {"text": "b"}]
  • 若有重复的项目,后面的覆盖前面的。


以上其实就是上面讲的所有格式。
但注意是“格式”。想要知道哪里该填什么,请看下米娜。
你应该看得懂,下面描述了目前讲过的JSON文本可包含的所有键值对及其结构:

JSON文本可能是一个列表,列表内包含了一个或数个对象。然而不是在所有的地方都允许在最外侧使用列表。在tellraw中当列表内只有一个对象时,方括号[]可以省略,然而在有些地方最外侧列表是必须的。
[      
{        一个对象:
—  "text":     字符串   要显示文字    必填
—  "color":         字符串     文字的颜色,可以为十六种标准色或是"#<hex>"
—  "bold":         布尔值      是否为粗体
—  "italic":         布尔值      是否为斜体
—  "underlined":         布尔值      是否带有下划线
—  "strikethrough":         布尔值      是否带有删除线
—  "obfuscated":        布尔值      是否为乱码
—  "clickEvent":    对象     点击互动事件
— —  {
— — —  "action":    字符串      互动的方式,可以是"run_command"执行命令,或"open_ur"打开链接
— — —  "value":     字符串        互动的内容,根据互动方式不同应该是执行的命令或是打开的链接
— — }
—  "extra":     对象列表         对象的附属项
— —  [
— — —  { ... }           列表内包含一个或数个完整的JSON文本对象,会继承上级属性,除非重新指定
— —  ]
}
]

上面的语法书展示了目前为止所有提到过的属性。
所以,比如当你想要写一行红色的“Dahesor很可靠”时,只需要看:啊,首先我们需要{,然后要写必填的"text",然后想要红色,就是"color",最后}结尾。
你的命令就写出来了:
  1. /tellraw @a {"text": "Dahesor很可靠", "color": "red"}
复制代码

怎么样?上面的语法树会不会看?
请把它弄懂,下面都是这种东西。
我们要加速了——




5. JSON文本完整格式



在上一节,你看到了一个语法树。
首先,你要知道的是,这个语法书并不完整。因为上面我都是在讲格式,只选择了那些易于举例的属性来讲。
但JSON文本还可以有很多很多属性我还没提到,它们有着相同的格式,只是影响的属性不同。(就像"bold"和"italic"的区别)
所以,只要你理解了格式且看得懂语法树,那么就没有难度了。
跟我领略一下MC无尽可能性的一小部分吧:


5.1 显示文字(text)完整语法树:


{         一个对象:
—  "text":     字符串   要显示的文字    必填
通用格式:
—  "color":         字符串     文字的颜色,可以为十六种标准色或是"#<hex>"
—  "bold":         布尔值      是否为粗体
—  "italic":         布尔值      是否为斜体
—  "underlined":         布尔值      是否带有下划线
—  "strikethrough":         布尔值      是否带有删除线
—  "obfuscated":        布尔值      是否为乱码
—  "font":            字符串           文字的字体。内置有"default"(默认)"alt"(附魔台)"uniform"(Unicode)
—  "insertion":      字符串     按住Shift并点击文字,会把本项包含的信息插入到聊天框中。仅生效于聊天框
—  "clickEvent":    对象          点击互动事件
— —  {
— — —  "action":    字符串    互动的方式,可以是:
                                                   "open_url"  
打开链接
                                                 "run_command"  执行命令
                                                  • "suggest_command"  不直接执行命令,而是“建议”命令
                                                   "change_page"   仅在命令书中生效:跳转到指定页码
                                                   "copy_to_clipboard"    复制"value"的内容
                                                   "open_file"  打开计算机上的文件。由于安全问题不可以由玩家使用

— — —  "value":     字符串     互动的内容,根据互动方式不同应该是执行或建议的命令,                                                   打开的链接,要跳转的页码,要复制的内容,或文件路径。
— — }
—  "hoverEvent":    对象      悬停互动事件,将鼠标悬停到文字上可看到信息
— —  {
— — —  "action":    字符串    互动的方式,可以是:
                                                   "show_text"  显示另一串JSON
                                                   "show_item"  显示一个物品的信息
                                                  • "show_entity"  
显示一个实体的信息
— — —  "contents":    对象   /  对象列表   要显示的内容。根据"action"的不同"contents"也会变化。
                                  若"action"是"show_text","contents"可以为列表,其他两种都为对象
             如果"action"为"show_text":
— — — —  [
— — — — —  { ... }    一串完整的JSON文本,就像你在"extra"中做的那样。可以不用列表而用对象。
— — — — ]
             如果"action"为"show_item":
— — — —  {
— — — — —  "id":    字符串    物品的ID   必填
— — — — "count":    数值    物品的数量
— — — — —  "tag":    字符串   物品的NBT   
— — — — }
             如果"action"为"show_entity":
— — — —  {
— — — — — "type":    字符串    想要显示的实体的种类,应为一个实体ID    必填
— — — — —  "name":    对象    要显示的实体的名字,若不规定显示为原名(比如“僵尸”)
— — — — — —  { ... }    一个JSON文本对象,不能是列表
— — — — —  "id":    字符串   显示的UUID,不需要真实存在  必填
— — — — }
— — }
—  "extra":     对象列表         对象的附属项
— —  [
— — —  { ... }           列表内包含一个或数个完整的JSON文本对象,会继承上级属性,除非重新指定
— —  ]
}

在看完上面的语法树后,你有没有看懂?
hoverEvent和"contents"有没有把你搞糟?
可能有可能没有。
没关系,下面是示例以及各种互动的效果图:





5.2 显示分数完整语法树:

你以为结束了?
没!
Java版的JSON文本十分强大!它不止可以显示文本,还可以显示分数!
注意!你需要知道计分板这个东西才可以读懂下面的内容。
记分板在本系列第5帖讨论过。如果你不知道的话也没关系,这里可以直接跳过,对后续没有任何影响。

想要显示一个分数,格式大体上和原来的一样。只是"text"被换了一下而已。其他的属性都是公用的:

{         一个对象:
—  "score":     对象     显示一个分数    必填
— —  {
—  —  —  "objective":         字符串要显示的记分板ID    必填
—  —  —  "name":         字符串分数的所属者,可以是ID,选择器,或"*"  只能指定一个实体    必填
—  —  —  "value":        字符串若指定了本项,无论实际分数多少都显示为本分数
— — }
通用格式:
}

本命令可以显示一个分数,换句话说,根据分数的不同,显示的东西也有所不同。
比如命令:
  1. /tellraw @a {"score":{"objective":"data", "name": "test"}}
复制代码
本命令的效果是,显示test在data上的分数,所以当test有1分时运行本命令就会显示“1”,有23分时运行就会显示“23”。
注意空分什么都不会显示,而不是0。

如果把"name"指定为*,则所有玩家会看到自己的分数,比如:
  1. /tellraw @a {"score":{"objective":"data", "name": "*"}}
复制代码
运行后,如果我在data记分板上有1分我就会看到1,但是如果你有10分,你就会看到10。
注意这个功能不适用于告示牌或者类似的地方,因为有可能有很多人同时盯着告示牌。
(告示牌又不会薛定谔的猫)

哦还有,你可以在上面看到有一个"value",这玩意啥用没有,至少对你啥用没有。


示例:

1. 假设我在记分板"death"上有10分:
  1. /tellraw @a {"score":{"objective":"death", "name": "@p"}}
复制代码

这条命令就会显示“10”。
当然,你可以用列表将分数与文字结合:
  1. /tellraw @a [{"text": "Dahesor的死亡次数是:", "color": "red"}, {"score":{"objective":"death", "name": "@p"}}]
复制代码
效果:
Dahesor的死亡次数是:10

注意:分数一次只能显示一个目标的,所以选择器只能是@p,@r,@s,或者是添加了限制条件"limit=1"(这部分在系列第6帖提到)




5.3 显示按键完整语法树:


当然,JSON文本还没完。
它除了可以显示固定的文字,可变的分数外,还可以显示绑定键。
比如你写了一个小游戏,需要玩家按丢弃键“Q”释放技能,但问题是有些玩家的丢弃键不是"Q",这是下面的内容就派上用场了:
{         一个对象:
—  "keybind":         字符串      应该使用键位标识 (见下列表) 符指定一项操作, 将显示当前绑定按键。
                                                      如“key.inventory”为打开背包,默认键位下会显示为“e”。   必填
通用格式:
}

上面的格式允许在玩家设置了不同按键时可以看到不同的内容。
比如:
/tellraw @a {"keybind": "key.inventory"}
"key.inventory"是打开背包按键的id,默认是E,所以上面的命令正常会看到“e”,但如果你设置的"R"打开背包,那么你就会看到"r"。

按键id列表:



实例:
  1. /tellraw @a {"keybind":"key.chat"}
复制代码
key.chat是聊天键,默认为T。
所以在使用默认设置的玩家处,会看到"t"。

当然,你也可以使用列表(或"extra")将其与文本或分数结合:
  1. /tellraw @a [{"text": "按【", "color": "blue"}, {"keybind":"key.drop"}, {"text": "】释放剑气"}]
复制代码
"key.drop"是丢弃键。
(默认)效果:
按【q】释放剑气

5.4 显示实体名完整语法树:


当我告诉你JSON文本还有更多的时候,你大概已经不会再惊讶了。
下面的内容包含了如何显示可变的实体名,比如当Dahesor靠近时显示“Dahesor成功了!”,而当Dianliang233靠近时同一条命令则会显示“Dianliang233成功了”:
{         一个对象:
—  "selector":         字符串         要显示的实体,应为玩家ID,选择器,或UUID    必填
—  "separator":         对象      若选择了多个NBT,不同的NBT之间将使用分隔符分隔
— — { ... }    一串完整的JSON文本,指定了分隔符,若不指定默认为灰色逗号
通用格式:
}

示例:
  1. /tellraw @a {"selector": "@p"}
复制代码

会显示你的名字。


  1. /tellraw @a {"selector": "@a"}
复制代码

会显示所有玩家的名字。
如果世界中有多名玩家,则名字之间会用灰色的逗号相隔,比如:
a,b,c,Dahesor

这个灰色逗号是默认分隔符。


这个分割符可以像下面一样修改:
  1. /tellraw @a {"selector": "@a", "separator": {"text": " | ", "bold": true}}
复制代码

我们将分隔符改成了{"text": " | ", "bold": true},即“ |
所以现在效果变成了:
a | b | c | Dahesor

注意分隔符是一个完整的JSON,所以你可以用任何JSON来当分隔符。
比如拿一个分数:
  1. /tellraw @a {"selector": "@a", "separator": {"score": {"objective": "example", "name": "@s"}}}
复制代码

或者拿一个按键:
  1. /tellraw @a {"selector": "@a", "separator": {"keybind": "key.use", "color": "red"}}
复制代码

甚至,拿另一个实体名:
  1. /tellraw @a {"selector": "@e", "separator": {"selector": "@e"}}
复制代码

我真是个魔鬼:
  1. /tellraw @a {"selector": "@e", "separator": {"selector": "@e", "separator": {"selector": "@e", "separator": {"selector": "@e"}}}}
复制代码
2021-10-01_22.36.31.png





5.5 显示NBT完整语法树:


你还可以显示NBT,不过如果你不知道什么是NBT的话可以跳过此段,或者去看本系列教程第X第12帖
{         一个对象:
—  "entity":         字符串         要显示的NBT所属的实体,应为玩家ID,选择器,或UUID
                                                      不应与或"block"或"storage"同时存在

—  "block":         字符串          要显示的NBT所属的方块坐标
                                                      不应与"entity"或"storage"同时存在
—  "storage":         字符串       显示的存储NBT
                                                      不应与"entity"或"block"同时存在
—  "nbt":         字符串                 显示的NBT路径    必填
—  "interpret":         布尔值                 若设为真,将尝试把获取到的nbt当成一个JSON文本解析,
                                                                若成功将直接输出结果而非原始代码
—  "separator":         对象      若选择了多个NBT,不同的NBT之间将使用分隔符分隔
— — { ... }    一串完整的JSON文本,指定了分隔符,若不指定默认为灰色逗号
通用格式:
}

5.6 显示可翻译文字完整语法树:


语言是个令人类很头疼的东西。
但是JSON文本的这一项功能被叫做“翻译文本”,简单来说,就是只要你输入一串游戏自带文字的id“本地化键名”,游戏就会自行将其翻译成阅读这串文字的玩家所选择的语言。
比如,
"item.minecraft.diamond_sword"是钻石剑的本地化键名,所以当你使用本功能翻译后,使用简体中文的玩家会看到"钻石剑",繁体中文玩家会看到"鑽石劍",英文玩家则会看到"Diamond Sword",以此类推。

{         一个对象:
—  "translate":         字符串         一个包含翻译标识符的字符串,将以玩家的语言显示对应文字    必填
—  "with":         对象列表      为"translate"中指定的参数填上对应的文本
— — [   

— — { ... }     一串完整的JSON文本
— — ]
通用格式:
}

示例:
  1. /tellraw @a {"translate": "item.minecraft.apple"}
复制代码
如果你的语言为中文就会显示“苹果”但如果是英文会显示“apple”,文言文则会显示"林檎"



  1. /tellraw @a {"translate": "death.attack.magic"}
复制代码
会显示“被魔法杀死了”
但是
  1. /tellraw @a {"translate": "death.attack.magic", "with":[{"text":"Dahesor"}]}
复制代码
则会显示“Dahesor被魔法杀死了”

当然,配合选择器更好:
  1. /tellraw @a {"translate": "death.attack.magic", "with":[{"selector":"@p"}]}
复制代码




6. 终幕

恭喜JSON文本中学毕业。
坏消息是,我们还没结束。
好消息是,那是下期教程的事了!

我可以偷偷吐露下下期讨论什么。
来,尝试将下面的东西用JSON文本输出:
Dahesor最喜欢的符号就是双引号"和反斜线\了!

呵呵。
下期我们来就来说,JSON文本在nbt中的应用,与转义符号




     后记


结束了,结束了。
我写了一个月的JSON。
本来上周已经写完了,但是对第3部分严重不满意,看似写很多实际上啥也没有,就推倒重写了,也正好赶上10.1。
说真的,我为自己写完了本教程感到自豪。若我帮助了你,我会更自豪的。
下一期教程是关于JSON在NBT中的应用,与转义相关的事情。
那么,就下期再见了。本文剩下的部分是包含了所有提及命令的涉及命令列表,与本系列教程目录。



啊等等,先别走。
本文有帮到你么?
没有的话,我深感抱歉。
如果有的话:
如果你的用户组有权限评分:
  • 那么请给我人气,作为支持
  • 金粒也行,我来者不拒
  • 你喜欢贡献么?真巧,我也喜欢
  • 啥?今天限额用完了?先点个赞,明天补?
  • 啊啊,是大佬啊,看我多可爱(bushi)
如果你没权限评分:
没关系,上面的评分都是虚的,我最需要的是收藏,毕竟评分只是多少人认可我,但收藏是我帮了多少人

以上。



     附录


格式代码:当你在问答版需要给别人一个JSON文本的格式时,可以直接把下面的代码粘上去,会生成5.1 显示文字(text)完整语法树:


#更新日志
Java 1.18/a 1.18版本升级完成

前往来自 麻瓜草稿簿系列教程索引

下一篇:


评分

参与人数 8人气 +13 金粒 +108 贡献 +1 收起 理由
机器人WBW + 2 + 32 MCBBS有你更精彩~
玄素 + 1 毅力可嘉
磨砺 + 2 + 50 MCBBS有你更精彩~
mGHLy + 2 Ssssssssssssssssssss
_23333_ + 1 MCBBS有你更精彩~
2016菜菜菜 + 2 + 6 期待下篇的nbt应用
△@← + 1 + 20 👍🏻
⚡️👮 + 3 好!

查看全部评分

漩涡188 当前离线
积分
61
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-9-21
查看详细资料
发表于 2021-10-3 16:23:03 | 显示全部楼层
支持支持!!!
回复

使用道具 举报

假飘piao 当前离线
积分
140
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-8-10
查看详细资料
发表于 2021-10-3 17:39:34 | 显示全部楼层
支持一下!
回复

使用道具 举报

2016菜菜菜 当前离线
积分
1278
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-31
查看详细资料
发表于 2021-10-4 10:48:55 | 显示全部楼层
先支持后看~
回复

使用道具 举报

2016菜菜菜 当前离线
积分
1278
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-31
查看详细资料
发表于 2021-10-5 10:00:38 来自手机 | 显示全部楼层
本帖最后由 2016菜菜菜 于 2021-10-5 11:54 编辑
2016菜菜菜 发表于 2021-10-4 10:48
先支持后看~

补充了很多之前不知道的.
回复

使用道具 举报

duzhaoyang0922 当前离线
积分
262
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-6-7
查看详细资料
发表于 2021-10-6 09:28:27 | 显示全部楼层
这就是新手党福利,看了半小时
回复

使用道具 举报

Fantasys 当前离线
积分
132
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-10-29
查看详细资料
发表于 2021-10-6 12:30:52 | 显示全部楼层
新手福利,支持!!
回复

使用道具 举报

LLK520 当前离线
积分
32
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-4-19
查看详细资料
发表于 2021-10-8 18:36:52 | 显示全部楼层
非常感谢分享
回复

使用道具 举报

打金者 当前离线
积分
1061
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-9-12
查看详细资料
发表于 2021-10-10 12:45:18 | 显示全部楼层
非常感谢分享
回复

使用道具 举报

307250302 当前离线
积分
419
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-3-28
查看详细资料
发表于 2021-10-31 12:36:29 | 显示全部楼层
活到老学到老啊
回复

使用道具 举报

蛋挞菌~ 当前离线
积分
313
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-6-25
查看详细资料
发表于 2021-10-31 12:55:33 | 显示全部楼层
支持!支持!(特地在服务器里试了一下。虽然error了。。看不懂)
回复

使用道具 举报

lzt520 当前离线
积分
851
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-8-26
查看详细资料
发表于 2021-10-31 22:36:17 | 显示全部楼层
好长的教程!辛苦啦!
回复

使用道具 举报

592643125 当前离线
积分
716
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2012-6-30
查看详细资料
发表于 2021-11-2 13:18:49 | 显示全部楼层
什么时候讲 execute的内容呢
回复

使用道具 举报

yzqdev 当前离线
积分
222
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-11-22
查看详细资料
发表于 2021-11-2 21:02:28 | 显示全部楼层
这个太好用了,nbt编辑永远的神
回复

使用道具 举报

mc小凯 当前离线
积分
500
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-2-25
查看详细资料
发表于 2021-11-3 09:34:50 | 显示全部楼层
这也太详细了,感谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2022-1-27 11:07 , Processed in 0.116615 second(s), Total 30, Slave 28 queries, Release: Build.2021.11.26 1022, Gzip On, Redis On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2020 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表