亲,欢迎光临天天书吧!
错缺断章、加书:站内短信
后台有人,会尽快回复!
天天书吧 > 玄幻魔法 > Minecraft指令手册 > 第一百零四章 物品的显示属性
  • 主题模式:

  • 字体大小:

    -

    18

    +
  • 恢复默认

第一百零四章 物品的显示属性

在minecraft中,每个物品都有自己的名字。比如『minecraft:diamond』这个物品就叫做『钻石』、『minecraft:air』就叫做空气......但物品的名字并不是一直都不变的,我们可以通过铁砧来更改物品的显示名称,比如把『钻石』更改为『煤炭』,把『空气』更改为『黄金』.......

但用铁砧改名字十分麻烦,那有没有一种方法,能够通过指令更改物品的名称呢?

在Java版中,是有的。这种方法就是:指定或修改物品的显示属性。

什么是物品的显示属性?我们知道,一个物品有自己的名称,自己的图标(方块类物品除外),还有这个物品显示出来的信息。比如这把钻石剑,它就具有如下的显示属性:

[图标]——钻石剑的图标,是一把蓝色的剑

钻石剑——钻石剑的名称

在主手时:——这个和下面这些都是该物品的信息

7 攻击伤害

1.6 攻击速度

minecraft:diamond_sword ——这个和下面的是打开高级提示框后才会显示的信息

Nbt : 1个标签

(配图:104-1)

那我们该如何指定或修改物品的显示属性呢?很简单,通过物品的Nbt标签来修改。

物品的display标签,是一个复合标签,用来自定义该物品的显示属性。大部分物品并没有这个标签,因为对于游戏来说显示属性弄个默认值就好。

display这个复合标签内,有两到三个标签:

color(Int整形)——这个标签仅仅对皮革盔甲才有用,它可以指定皮革盔甲是什么颜色。

Name(文本)——该标签对任何物品都管用,它可以自定义该物品的名称。这东西必须要使用JSoN文本。在Java1.13以下版本中,可直接使用普通文本,但无法使用JSoN文本。

Lore(文本列表)——该标签对任何物品都管用,它可以自定义该物品的描述。列表中的文本必须要使用JSoN文本。在Java1.14以下版本中,可直接使用普通文本,但无法使用JSoN文本

看起来还是很简单的,让我们试试能不能获得一个名为『这不是钻石』的钻石:

\/give @s minecraft:diamond 1 0 {display:{Name:“这不是钻石“}}

\\\\适用于Java1.8~1.12.2\\\\

\/give @s minecraft:diamond{display:{Name:“\\“这不是钻石\\““}}

\\\\适用于Java1.13~今\\\\

\/give @s minecraft:diamond{display:{Name:'“这不是钻石“'}}

\\\\适用于Java1.14~今\\\\

上面给出了三条指令。这三条指令所适用的版本范围各有所不同,但功能都是一样的:会给你一个名叫『这不是钻石』的钻石。

值得注意的是,对于Java1.13及以上版本来说,Name的值虽然说『必须是一个JSoN文本』,但如果你尝试下面的指令:

\/give @s minecraft:diamond{display:{Name:“111“}}

这将会给你一个名叫『111』的钻石。注意!『111』在这并未使用JSoN文本,但游戏成功识别了它。这是怎么一回事?

其实不止Name标签,在minecraft Java版中任意必须使用JSoN文本的地方,都具有类似的特性:当使用阿拉伯数字时,可不使用JSoN文本。不信?试一试下面的指令:

\/tellraw @s

你会发现你正常收到了这条消息,游戏并未报错。对了,基岩版则没有类似的特性,所以如果你在基岩版运行上面的指令还是会报错的。

回到正题。既然Name标签我们会使用了,那Lore标签呢?

也一样简单。比如我们要获取一个描述为『Never Gonna Give You Up』的13号唱片,只需要:

\/give @s record_13 1 0 {display:{Lore:[“Never Gonna Give You Up“]}}

\\\\适用于Java1.8~1.12.2\\\\

\/give @s music_disc_13{display:{Lore:[“Never Gonna Give You Up“]}}

\\\\适用于Java1.13.x\\\\

\/give @s music_disc_13{display:{Lore:[“\\“Never Gonna Give You Up\\““]}}

\\\\适用于Java1.14~今\\\\

\/give @s music_disc_13{display:{Lore:['“Never Gonna Give You Up“']}}

\\\\适用于Java1.14~今\\\\

获取到后,你会发现物品的描述并不是白色的文字,而是紫色的文字。在Java1.14以下版本中,由于Lore无法使用JSoN文本,自然也就改不了颜色(除非你有办法在Nbt中使用§)。但在Java1.14及以上版本中,我们就可以试一试改下颜色:

\/give @s music_disc_13{display:{Lore:['{“text“:“Never Gonna Give You Up“,“color“:“red“}']}}

上述指令将会给你一个带有红色『Never Gonna Give You Up』描述的物品。

Lore作为一个文本列表,我们这么用还是太屈才了。让我们试试把『Never Gonna Give You Up』拆开:

{Lore:['“Never“','“Gonna“','“Give“','“You“','“Up“']}

\\\\这是Java1.14及以上版本的例子\\\\

然后放入指令中运行,你就会发现你获得了一个带有如下描述的13号唱片:

Never

Gonna

Give

You

Up

如你所见,Lore列表内的每一个元素,都代表了一行文本。

这就是Name和Lore的使用方法。那color标签,又该如何使用?

color标签的数据类型是Int整形,也就是一个整数,并不是一个字符串。也就是说,我们并不能使用red、yellow之类的颜色Id,也不能使用RGb或16进制颜色代码。那这个color到底该怎么使用?

color的值要填写的是颜色值。这个颜色值本质上是基于颜色的RGb算出来的,具体公式如下:

Rx+Gx256+bx1

R······Red红色值,0~255

G······Green绿色值,0~255

b······blue蓝色值,0~255

举个例子。标准黄色的RGb值为(255,255,0),我们就可以通过上述公式算出标准黄色的颜色值为:

255x+255x256=

让我们试一试这个值正不正确:

\/give @s minecraft:leather_helmet 1 0 {display:{color:}}

\\\\Java1.13之前\\\\

\/give @s minecraft:leather_helmet{display:{color:}}

\\\\Java1.13及之后\\\\

然后我们就获得了一个颜色为(#FFFF00)的黄色皮革帽子。其中,#FFFF00正是标准黄色的16进制颜色代码。

到这里,物品的显示属性,也就是display标签就讲完了,但这不代表本章到此结束。

如果我们不想要显示某些东西该怎么办?

mojang给了我们一个标签可以用来指定隐藏物品的哪些信息:

hideFlags(Int整形)

hideFlags的使用方式和上面的color有异曲同工之妙。和color类似,hideFlags的值是『信息值』(这名字随便取的),你需要通过以下信息加上具体情况来计算出它的值:

1——附魔信息,对应Enchantments(ench)标签

2——属性修饰符信息,对应Attributemodifiers标签

4——无法损坏信息,对应Unbreakable标签

8——能够破坏的方块信息,对应candestroy标签

16——能够放在哪些方块上的信息,对应canplaceon标签

32——其他大部分信息(包括药水效果、魔咒信息[StoredEnchantments标签]、成书的版本和作者信息[generation和author标签]、烟花火箭的信息[Explosion和Fireworks标签]、地图的信息)

64——[1.16.2版本新增]皮革盔甲的颜色信息,对应上面的color标签

比如我们要隐藏皮革盔甲的颜色信息,只需要:

\/give @s minecraft:leather_helmet{display:{color:},hideFlags:64}

\\\\Java1.16.2及之后\\\\

然后你就会惊喜的发现,相比之前的那个黄色帽子,这个新的黄色帽子没有了颜色信息。

但如果我们还要隐藏掉附魔信息该怎么办?

很简单,加起来就可以了:

\/give @s minecraft:leather_helmet{display:{color:},Enchantments:[{id:“protection“,lvl:255}],hideFlags:65}

\\\\Java1.16.2及之后\\\\

运行上述指令,你将会获得一个附魔有保护255级的黄色帽子,但这个帽子并不会显示自己的颜色和附魔信息,除非你用的版本低于1.16.2才会显示出来颜色信息。

不难发现,上面的hideFlags标签的值为65,是将64和1相加得到的。同理,如果你把上面表格的所有信息对应的值都加起来,得到的127这个值就代表所有信息,将其作为hideFlags的值就可以隐藏掉物品的所有信息。

这就是本章的全部内容。

附录1:本章相关历史

Java

1.8——加入了hideFlags标签和能够用来自定义显示属性的display标签。

1.13——Name标签现在必须使用JSoN文本。原本用来翻译用的LocName标签被合并到了Name标签里。

1.14——Lore标签现在必须使用JSoN文本。

1.16.2——为皮革盔甲的颜色信息加入了64(Flag 64)信息值。

附录2:LocName标签用法

和JSoN文本的translate组件一样,LocName标签在Java1.13以下版本用于物品名称的翻译。比如:

\/give @s diamond 1 0 {display:{LocName:“item.pass.name“}}

\\\\Java1.13以下版本\\\\

这将会给你一个叫做『指南针』的钻石。如果你把游戏切换成英文,那么这个钻石的名称也会变成『pass』(指南针的英文)。在上面的指令中,『item.pass.name』是『指南针』这个物品名称的本地化键名。

虽然我们还未接触到Java版的translate组件,但其实Java版JSoN的translate组件和基岩版的translate组件的用法几乎一模一样。

......

......

......

......

张三又一次大老远的从主城跑了回来。

『嘿,李四,你看这个附了魔的苹果!』

李四很好奇:『附了什么魔?』

『你自己看』

张三把苹果丢给了李四。

『这没写啊?』

张三从李四的手中拿回苹果,然后说道:『我也不知道。但据某位管理说,谁被这个苹果打到,就会获得无限时长的最高等级幸运效果。』

『真的?快打我一下试试!』

『那你待会也要打我一下,不能够你自己独享』

『oK,毕竟咱俩可是兄弟』

『准备好了吗?3——2——1——』

李四被张三用苹果杀死了