第一百五十四章 村庄与掠夺更新前的自定义交易
林地府邸和海底神殿这两个遗迹,一般都生成在几千格远的地方,如果想要单独靠运气寻找那简直是大海捞针。如果有作弊的话用/locate也就罢了,没开作弊或者是在服务器内找,那就必须得找到身着白色服装的制图师换取林地探险家地图和海洋探险家地图。
现在,你找到了一个制图师村民,他希望能用1颗绿宝石换取你的36张纸。你早有准备,与村民进行了一场交易,并获得了些许经验值。村民看起来很高兴,头上冒出绿色的粒子并伴随生命提升效果给你开了一个新的交易项目:用一个指南针换取一颗绿宝石。
为了不死图腾,你又向村民换取了一颗绿宝石。村民更加开心了,继续给你开了一个新的交易........最终,你成功用44颗绿宝石加上两个指南针换取了那两张你梦寐以求的地图。
后来,其他玩家也发现了这个制图师。其中一个玩家携带了大量纸张,将这个村民的第一个交易项目换没了。但当他与该村民进行其他交易项目时,那个没货的交易项目又有货了。
如你所见,村民的交易系统有以下几个特点:
①指定的村民职业具有指定的交易项目
②交易项目会逐步开放,直到没有项目可开放为止
③一个交易项目可以用一到两种物品换取指定的物品。
④交易项目使用后可以获得一些经验
⑤交易项目具有次数限制,次数限制达到后将无法使用该交易项目,需要与村民进行其他交易后才会重新开放。
上面这几个特点分别对应村民NBT标签中的:
①Profession和Career(均为Int整形)
②——CareerLevel(Int整形)
③——一个交易项目中的buy、bugB和sell(均为复合标签)
④——一个交易项目中的rewardExbr /(Byte布尔值)
⑤——一个交易项目中的maxUses(Int整形)
为了能够用NBT自定义村民交易,我们首先需要注意的是Profession和Career标签,这两个NBT标签的作用分别是:
Profession——确定村民的一级职业,即村民的衣服是什么颜色。0为棕色(农民),1为白色(图书管理员),2为紫色(牧师),3为棕色+黑色(铁匠),4为棕色+白色(屠夫)5为绿色(傻子)。如果不填该项游戏会随机赋予村民一级职业。
Career——确定村民的二级职业,即村民的具体职业。如果没有这项或这项为0,当玩家打开该村民的交易菜单时游戏将会刷新该村民的职业并重置CareerLevel为1。如果不填该项游戏会随机赋予村民二级职业。
村民的二级职业ID具体如下:
⓪棕色长袍(农民)——1为农民,2为渔夫,3为牧羊人,4为制箭师;
①白色长袍(图书管理员)——1为图书管理员,2为制箭师;
②紫色长袍(牧师)——1为牧师;
③棕色+黑色(铁匠)——1为盔甲商,2为工具商,3为武器商;
④棕色+白色(屠夫)——1为屠夫,2为皮匠;
⑤蓝色长袍(傻子)——1为傻子。
需要注意,在Java1.13版本中,工具商和武器商的ID进行了交换。也就是在1.13版本中铁匠下面的二级职业ID变为了“1为盔甲商,2为武器商,3为工具商”。
举个很简单的例子:
/summon minecraft:villager ~~~{Profession:0,Career:1}
这条指令将会生成一名普普通通的农民。
CareerLevel直译为“交易水平”。它的作用很简单,就是控制村民开放的交易项目的多少,基本上就相当于村庄更新后的“新手”、“老手”、“大师”各种村民级别,每当完成一次交易就刷新并增加一些。和Career标签一样,如果为0就会重新刷新该村民的职业将CareerLevel设为1。
举个简单的例子,假设有一个农民,游戏给他的交易项目有:
2绿宝石→1西瓜(CareerLevel为1开启)
1闪烁的瓜皮→1绿宝石(CareerLevel为2开启)
1闪烁的西瓜→1绿宝石(CareerLevel为2开启)
10绿宝石→1大鹏(CareerLevel为4开启)
1水果摊+1绿宝石→1生瓜蛋子(CareerLevel为6开启)
2猹→1绿宝石(CareerLevel为10开启)
1秤→5绿宝石(CareerLevel为12开启)
1指南针+15西瓜→30绿宝石(CareerLevel为13开启)
1萨日朗花+10绿宝石→1章鱼哥(CareerLevel为17开启)
此时有一个叫“Liu_Huaqiang”的玩家骑着Heat And Climate(热量与气候)模组中的摩托车(黑)前来买瓜。首先他换取了一个西瓜,使该村民的CareerLevel提升到了2,开放了两个新的交易项目。随后他用闪烁的瓜皮和闪烁的西瓜兑换了2颗绿宝石,进一步使村民的该标签提升到了4,又开放了1个交易。就这样,最终当CareerLevel≥17时,村民才不再开放新的交易项目。
(然后这名玩家来了个跳劈将村民一刀砍死了)
CareerLevel标签对于自定义交易很重要。如果它的值过低,没有超过该职业最后开放的交易项目需要的CareerLevel的值,玩家在进行自定义的交易项目后村民将会开放新的交易项目。
比如某服务器腐竹使用了上面那名卖瓜的村民作为自定义村民的职业,但在编辑自定义交易项目时忘记了将CareerLevel设为大于或等于17的值。这就导致玩家前来与该村民进行交易后,村民又开放了两个新的交易项目,使玩家们很疑惑。
上面这些都是自定义交易相关联的内容,而接下来我们将要学习核心内容:Offers标签。
自定义交易最重要的NBT标签就是Offers(复合标签)和Recibr /es(列表)。具体的格式如下:
{Offers:{Recibr /es:[{一个交易项目},{一个交易项目}]}}
Offers有什么用我们并不知道,似乎去掉这个NBT标签把Recibr /es拿出来也丝毫没有问题,也不知道Mojang为何要在Recibr /es外套一个Offers。
单个交易项目有以下NBT标签:
rewardExbr /(Byte布尔值)——交易成功后是否提供经验球,1为提供,0为不提供。
maxUses(Int整形)——该交易项目能够使用的次数,当交易项目被刷新时会随机增加2~12。
uses(Int整形)——该交易项目已经被使用的次数。如果大于等于maxUses该交易项目将会无法使用。交易项目刷新时maxUses会随机增加,uses就再次小于maxUses,交易项目便重新开启。
buy(复合标签)——该交易项目中村民需要收购的东西,值为物品通用标签。
buyB(复合标签)——该交易项目中村民需要收购的第二个东西,值为物品通用标签。该标签不一定需要。
sell(复合标签)——该交易项目中村民出售的东西,值为物品通用标签。
举个简单的例子:
/summon villager ~~~{CareerLevel:200,Offers:{Recibr /es:[{rewardExbr /:1,maxUses:150000,buy:{Count:1,id:“twilightforest:trobr /hy“,Damage:4},buyB:{Count:10,id:“minecraft:emerald“},sell:{Count:1,id:“minecraft:diamond_sword“,tag:{ench:[{id:16,lvl:10}]}}}]}}
(上面这条指令适用于Java1.13之前的版本)
看起来这个很复杂,但如果你能够把它展开再看就极为简单了。
这条指令将会生成一名CareerLevel为200的村民,他有一个可以使用15万次并且可以提供经验值的交易项目:用1个幻影骑士战利品(暮色森林mod)+10绿宝石换取一把锋利X的钻石剑。
现在你可以尝试自己去自定义一个交易项目。但请注意,最好新建一个txt文件并使用notebr /ad、文本文档之类的程序打开再在里面编写指令(因为这样子可以用换行+tab键以类似于代码的样子编写,极为方便),编写完成后再复制进游戏中执行。不要在游戏内的命令方块、聊天栏内编写,因为这样子很容易出错!
村民的NBT除了上面讲到和交易有关的标签,还有另外三个并不怎么重要的标签:
Riches(Int整形)——直译为“富有的”,游戏内没有使用,会随村民收到绿宝石而上升。
Willing(Byte布尔值)——村民是否愿意繁殖,1为愿意。会在进行一次让交易项目刷新的交易后变为1。
Inventory(列表)——村民的背包,但并没有栏位之分。举个简单的例子:
/summon villager ~~~{Inventory:[{id:“minecraft:emerald“,Count:64}]}
这将会生成一名有64个绿宝石的村民。
村民的背包只有8格,所以如果这个列表内的项目超过了8格,多余的部分将会被清除(除非能够与没有超过的部分堆叠)。
现在,你知道如何自定义村民交易了吧?需要注意,单个村民具有的交易项目最多只能有16项!