首页 男生 游戏竞技 Minecraft指令手册

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

Minecraft指令手册 你好MC 5678 2024-07-09 15:29

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

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

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

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

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

  钻石剑——钻石剑的名称

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

  7 攻击伤害

  1.6 攻击速度

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

  NBT : 1个标签

  (配图:104-1)

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

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

  disbr /lay这个复合标签内,有两到三个标签:

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

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

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

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

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

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

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

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

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

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

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

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

  /give @s minecraft:diamond{disbr /lay:{Name:“111“}}

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

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

  /tellraw @s 114514

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

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

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

  /give @s record_13 1 0 {disbr /lay:{Lore:[“Never Gonna Give You Ubr /“]}}

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

  /give @s music_disc_13{disbr /lay:{Lore:[“Never Gonna Give You Ubr /“]}}

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

  /give @s music_disc_13{disbr /lay:{Lore:[“\“Never Gonna Give You Ubr /\““]}}

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

  /give @s music_disc_13{disbr /lay:{Lore:['“Never Gonna Give You Ubr /“']}}

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

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

  /give @s music_disc_13{disbr /lay:{Lore:['{“text“:“Never Gonna Give You Ubr /“,“color“:“red“}']}}

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

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

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

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

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

  Never

  Gonna

  Give

  You

  Ubr /

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

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

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

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

  R×65536+G×256+B×1

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

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

  B······Blue蓝色值,0~255

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

  255×65536+255×256=16776960

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

  /give @s minecraft:leather_helmet 1 0 {disbr /lay:{color:16776960}}

  \\Java1.13之前\\

  /give @s minecraft:leather_helmet{disbr /lay:{color:16776960}}

  \\Java1.13及之后\\

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

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

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

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

  HideFlags(Int整形)

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

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

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

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

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

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

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

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

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

  /give @s minecraft:leather_helmet{disbr /lay:{color:16776960},HideFlags:64}

  \\Java1.16.2及之后\\

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

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

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

  /give @s minecraft:leather_helmet{disbr /lay:{color:16776960},Enchantments:[{id:“br /rotection“,lvl:255}],HideFlags:65}

  \\Java1.16.2及之后\\

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

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

  这就是本章的全部内容。

  附录①:本章相关历史

  Java

  1.8——加入了HideFlags标签和能够用来自定义显示属性的disbr /lay标签。

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

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

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

  附录②:LocName标签用法

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

  /give @s diamond 1 0 {disbr /lay:{LocName:“item.combr /ass.name“}}

  \\Java1.13以下版本\\

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

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

  ......

  ......

  ......

  ......

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

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

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

  『你自己看』

  张三把苹果丢给了李四。

  『这没写啊?』

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

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

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

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

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

  李四被张三用苹果杀死了

目录
设置
手机
书架
书页
评论