Minecraft指令手册

你好MC

首页 >> Minecraft指令手册 >> Minecraft指令手册最新章节(目录)
大家在看 男神,请克制! 万族图鉴:你管这叫F级天赋? 丑女翻身:专宠嚣张妃 空间灵泉:穿越大佬独宠小夫郎 砺刃! 斩神:从恶魔代理人开始 海贼:向元帅大人献上忠诚 军团召唤 绝世无双 非常识性主神游戏
Minecraft指令手册 你好MC - Minecraft指令手册全文阅读 - Minecraft指令手册txt下载 - Minecraft指令手册最新章节 - 好看的游戏小说

第六十章 基岩版的JSON文本(破200收藏纪念)

上一章 书 页 下一章 阅读记录

JSoN文本在Java版很常用。在基岩版虽然能用的地方少了很多,但仍然很有用处。

基岩版的JSoN文本主要用于指令、书与笔的文本和告示牌的文本上。由于基岩版指令的限制,我们只能在\/tellra和\/titlera两个指令中用到JSoN文本。虽然能用的地方极其少,我们仍然得学习学习,就因为\/tellra这条指令极其有用。

基岩版的JSoN文本的基础格式如下:

{“ratext“:[]}

在基岩版中,每串JSoN文本的最外层必然是ratext组件。ratext的值是JSoN对象列表,也就是由多个JSoN对象组成的列表。你可以把JSoN对象看作是Nbt中的复合标签(两者其实没多大差别),方便理解。

基岩版的JSoN文本组件相比Java版要少许多。不算ratext的话,基岩版一共只有五个组件:

\\\\内容组件\\\\

text(值:文本)

selector(值:文本)

translate(值:文本)

score(值:JSoN对象,相当于Nbt的复合标签)

\\ranslate配套组件\\\\

ith(值:由多个文本组成的列表)

最基础的组件还是text,用法和Java版的一模一样:

{“ratext“:[{“text“:“hello!“}]}

这解析后会变成:hello!

你有没有注意到,基岩版甚至连文本颜色格式组件都被阉割了,也就是我们无法使用color组件来修改文字颜色。既然我们无法使用color之类的组件,那么我们该如何修改文本的颜色和格式?

你是不是忘记了一个东西:§

由于基岩版可以自由使用§来修改文本的颜色和格式,因此mojang就把color之类的文本颜色格式组件给切了。

在基岩版的JSoN文本中使用§,需要注意两点:

1§必须要放在内容组件的值中,不能放在组件名等其他地方。虽然放在其他地方在命令方块中也会生效,但JSoN文本就无法被游戏正确识别并输出了。

2使用§后记得要及时用§r来重置文字样式,不然会把§右边的所有文本都修改了样式。比如:

{“ratext“:[{“text“:“§ehello!“},{“text“:“minecraft“}]}

这将会输出:hello!minecraft(都是黄色)

如果是{“ratext“:[{“text“:“§ehello!§r“},{“text“:“minecraft“}]},则只会把“hello!”一段变成黄色。

selector组件可以输出实体名称,其值必须填的是目标选择器。比如:

{“ratext“:[{“selector“:“@p“}]}

这将会输出距离执行地点最近玩家的名称。假设距离执行地点最近的玩家叫做『phigros』,那么这将会输出:phigros

selector的使用还是很简单的。但请注意,你不能把selector当做text一样使用。原因很简单:其值必须是个目标选择器。

如果你把selector当做text一样用,比如这样子填写:

{“ratext“:[{“selector“:“hellominecraft“}]}

你会惊奇地发现执行指令后,没有任何的文本输出,也没有任何的报错信息。

这是为什么呢?因为selector的值必须是个目标选择器,你这样填就相当于要输出玩家hellominecraft的名称,而游戏中又没有叫做hellominecraft的玩家,自然就不会输出。但如果真的有一个叫做hellominecraft的玩家且在线,就会正常输出『hellominecraft』。

translate组件是这五个组件中最难的一个,因为它有些涉及到minecraft的模组、资源包开发。为何这么?因为translate组件可以让一段文字以目标玩家的语言输出。

在学习translate的用法之前,我们要了解一个东西:本地化键(也称『翻译识别符』)

每一种语言都有自己对应的语言文件,比如美式英语对应的就是en_us.lang,中文简体对应的就是zh_cn.lang。游戏中同一个地方的文本会翻译成不同的语言。这时候问题来了:我们该如何在不同的语言文件中正确找到用于这个地方的文本呢?

这时候本地化键就出场了。

把一个地方的文本在不同语言中的翻译都绑定到一串不变的Id上,根据Id找到对应的翻译文本,不就解决这个问题了吗?

举个例子,在下面两个不同的语言文件中分别有这么一行:

en_us.lang:

server.help.getgold=You can get gold by selling items and playing games.For example, you may get 500 coins if you in a game of bed ar.#

zh_cn.lang:

server.help.getgold=您可以通过售卖物品、玩游戏来获得金币。比如当你赢得一局起床战争时,您可能会获得500枚金币。#

我们只需要在需要用到这一串文本的地方放上『server.help.getgold』,游戏就会自动根据不同的语言将这一串本地化键替换成对应语言的文本。

JSoN文本内的translate组件就是干这行的。在translate的值内写上本地化键,游戏就会根据不同的语言将对应的内容呈现出来。比如:

{“ratext“:[{“translate“:“server.help.getgold“}]}

如果你使用的是中文简体,最终这将会输出:『您可以通过售卖物品、玩游戏来获得金币。比如当您赢得一局起床战争时,你可能会获得500枚金币。』

如果你使用的是美式英语,这反而会输出:『You can get gold by selling items and playing games.For example, you may get 500 coins if you in a game of bed ar.』

现在你明白了吗?

(注:上面这个server.help.getgold本地化键是编的,但接下来的几个本地化键都是真实存在于游戏中的。)

translate的使用肯定没有这么简单,这只是最基础的用法而已。有时候,本地化键对应的文本内会有一些特殊的部分。比如『death.attack.onFire』,如果你只是这么用它:

{“ratext“:[{“translate“:“death.attack.onFire“}]}

最终它会输出:

%1$s 被烧死了

这是怎么回事?因为我们没有指定死亡的东西是什么。如果我们要指定,就得用到translate的配套组件:ith

ith的值是由多个文本组成的列表。至于为什么是个列表,是因为有些时候会有多个特殊的部分,这时候就需要使用列表来分别指定每个部分是什么。

我们待会再研究具有多个特殊部分的情况。先来试试使用ith指定死亡的东西是『张三』:

{“ratext“:[{“translate“:“death.attack.onFire“,“ith“:[“张三“]}]}

这将会输出:张三被烧死了

现在我们再来看看有多个特殊部分的情况:

{“ratext“:[{“translate“:“death.attack.arro.item“}]}

这将会输出:%1$s 被%2$s 用%3$s 射杀

这句话虽然很短,但有三个特殊的部分。如何正确指定这三个特殊部分呢?按照从左到右的顺序指定:

{“ratext“:[{“translate“:“death.attack.arro.item“,“ith“:[“枯藤“,“老树“,“昏鸦“]}]}

这会输出:枯藤被老树用昏鸦射杀

一般情况下,特殊部分会按照从左到右的顺序一一对应列表内的元素。在上面的例子中,%1$s最靠左,“枯藤”也在列表的最左边,因此%1$s就被“枯藤”替换了。剩下的%2$s和%3$s同理。

这就是translate组件一般的用法。除了这个用法外,translate还能被当做text组件一样用,且比text组件多出了一个没啥用的功能:自定义特殊部分

特殊部分有两种自定义的格式:

%%s

%%#(#为列表内元素从左到右排列的序号)

先来%%s。%%s的用法和上面的%1$s、%2$s之类的一模一样,都是从左到右一一对应。比如:

{“ratext“:[{“translate“:“你好%%s!这里有一些关于%%s的明。“,“ith“:[“新手“,“空岛战争“]}]}

这会输出:你好新手!这里有一些关于空岛战争的明。

%%#的功能和%%s比较不一样。%%#的#实际上是列表内各个元素从左到右的排列数字。比如%%1在上面的列表中就代表着『新手』。也就是,如果这样子填写:

{“ratext“:[{“translate“:“你好%%1!这里有一些关于%%1的明。“,“ith“:[“新手“,“空岛战争“]}]}

最终会输出:你好新手!这里有一些关于新手的明。

上面的例子中,%%s和%%#都是独立使用。如果两者一起使用会发生什么呢?

来看看下面这个例子:

{“ratext“:[{“translate“:“欢迎来到%%s,%%1!您今日的%%s还未领取!“,“ith“:[“Easecation“,“每日签到奖励“,“一个普通的路人“]}]}

猜一猜,最终这会输出什么?

你是不是以为,最终这会输出:欢迎来到Easecation,Easecation!您今日的每日签到奖励还未领取!

如果你这样想,就错了。实际上输出的是:欢迎来到Easecation,一个普通的路人!您今日的每日签到奖励还未领取!

这是怎么一回事?当%%s和%%#一起使用的时候,游戏会优先把%%s替换掉。按照从左到右的原则,第一个%%s被替换成了『Easecation』,第二个%%s被替换成了『每日签到奖励』。然后游戏才会替换%%#。这时候神奇的地方来了,由于%%s使用过的列表元素%%#就不能再使用,因此%%#的顺序得从第三个元素开始算起,最终导致%%1被替换成了『一个普通的路人』。

这就是translate和其配套ith组件的全部内容,你学会了吗?

最后的score组件简单且有用,它可以显示记分板上的分数。

score的值是JSoN对象,你可以把它当做是复合标签。对象内有三个子组件:

name——选择正在被记分板追踪的目标,显示ta的分数,值为文本。必须填写目标选择器或玩家名(假的也可以)。

objective——计分项名称。值为文本。

value[可选]——值为文本。如果指定了该项,不管真实的分数是多少,都会显示为该项的值。

(注:作者实验时发现value组件没用,可能在目前的基岩版最新版中已经删去了该标签。作者实验的版本是基岩版1.18.2)

举个例子。假设玩家Liben在计分项primogems上的分数为2431,我们可以这样输出他的分数:

{“ratext“:[{“score“:{“name“:“Liben“,“objective“:“primogems“}}]}

这将会输出:2431

需要注意,当name选定的目标为多个时,游戏将会按照目标选择器排列的顺序输出每个目标的分数。

现在你会使用基岩版的JSoN文本了吗?注意,一个JSoN对象内不能有多个内容组件。当一个对象内有多个内容组件时,权重高的组件的内容将会覆盖权重低的组件。四个内容组件的权重如下:

score

(注:该权重为作者实验得出)

这就是基岩版JSoN文本的全部内容了。

喜欢Minecraft指令手册请大家收藏:(m.aizhuixs.com)Minecraft指令手册爱追小说网更新速度最快。

上一章 目 录 下一章 存书签
站内强推 炎夏纪元:星际新星 守墓人 让你管封地,没让你治下人均暴富 桃树林里桃花开 送个外卖也能成凯甲 女主一直在遭罪[星际] 时光绘爱:林与陈的千年恋 只会割地送儿媳,我黄袍加身你哭啥 权力之巅 大唐十万里 转生成兽娘被神收编了 皇家小二货 八零:被弃少妇转身随军被娇宠 嫁给凶神后,貌美小夫郎被宠上天 重生另嫁摄政王,屠尽侯府白眼狼 莲花楼之长乐 重生快意人生 重生恶女有空间 耕读小娘子 我能给信徒发放职业
经典收藏 哆啦A梦:大雄的冒险故事 我的舢舨能升级 梦幻西游:系统在手,新区称王 古代贵女生存手札 生存游戏禁止恋爱 豪门盛婚之影后重生 我在欧陆当反派 Apex:世界第一地平线 神奇宝贝:神奥开始【后续】 Minecraft指令手册 最后御主与魔魂龙心 漫漫八重樱:野球计算王 灯光再亮,也抱住你 娱乐女王[古穿今] 相濡以“默” 倾世狐妃 我的合租校花 抵死缠绵:驯服小悍妻 楚先生,请离婚 网游之倒行逆施
最近更新 月河境 龙族:复制言灵,我即无敌 四合院开始修仙 杀怪爆属性,伤害999999亿 三角洲行动之第三次世界大战 JOJO:命运,真的如此牢固吗 普攻必暴击,我的平a即是天罚! 花开:与君长相守 星铁:执念未了,过往依旧 刚到漫威,系统奖励钢铁之躯 全球游戏:开局百亿灵能币 我在异界肝经验 奥术征程 梦幻西游之重返2005 从战场上的英雄到四合院的街溜子 变成病娇校花的小女友 守护你,是我唯一能做事 全球进入数据化 网游:女友竟是神级BOSS 哆啦A梦:大雄的冒险故事
Minecraft指令手册 你好MC - Minecraft指令手册txt下载 - Minecraft指令手册最新章节 - Minecraft指令手册全文阅读 - 好看的游戏小说