其中的type标签不用管,除非你想要给村民弄点儿不一样的衣服。我们重点看看level标签。举个例子:
/summon villager ~~~{VillagerData:{profession:“minecraft:farmer“,level:5}}
这将会生成一个大师级别的农民。等等,怎么不变回无职业了?
正常情况下,level字段只能由交易改变,也就是说玩家是个关键因素。新版本的村民虽然有『工作站没掉就失业』的性质,但如果游戏发现这个村民好像和其他玩家交易过,就不会让这个村民失业。在这边,由于我们改变了level标签的值,导致游戏认为这个村民已经和玩家交易过了,所以这个村民不会失业。
上面这些也是1.14更新后与自定义交易关系相当大的内容,接下来我们来看看同样也是1.14更新后自定义交易的核心:Offers标签。
Offers标签的内容其实变化并不大,我们在第一百五十四章所讲的内容可以完美适配过来,因此这里就不细讲那些重复的内容。我们就重点来看看1.14更新后,在交易项目中添加的4个新标签:
xp(Int整形)——村民每次交易能从该交易项目中获取的经验值
demand(Int整形)——价格调整因素之一:供需关系
specialPrice(Int整形)——价格调整因素之二:特惠
priceMultiplier(Float单精度浮点数)——价格调整因素之三:价格乘数
xp标签我们就不讲了,做自定义交易干嘛要管村民升级。我们重点来看看后面三个标签,这三个标签十分重要,因为它们关系到一个非常重要的东西:价格
小主,
在村庄与掠夺更新后,每个交易项目的第一个收购项,也就是buy复合标签所规定的物品,其数量,也就是价格,会发生变化。所以我们有一个专门的公式来计算村民收购的第一个物品的最终数量,也就是价格的计算公式:
(此公式更新于2022年12月28日,仅适用于Java版)
当a≥0且V≥1时
e=-〔(5A + B + C - D - 5E)× p〕-〔((V-1)×0.0625+0.3)×m〕+f
y = clamp(〔a×p×m〕+m +e, 1 ,M)
当a<0且V≥1时
e=-〔(5A + B + C - D - 5E)× p〕-〔((V-1)×0.0625+0.3)×m〕+f
y = clamp( m +e, 1 , M )
当a≥0且V<1时
e=-〔(5A + B + C - D - 5E)× p〕+f
y = clamp(〔a×p×m〕+m +e , 1 , M )
当a<0且V<1时
e=-〔(5A + B + C - D - 5E)× p〕+f
y = clamp( m +e , 1 , M )
参数列表
a······该交易项目demand标签的值
f······该交易项目specialPrice标签在玩家打开交易界面之前的值
p······价格乘数
m······原价
y·······最终价格
e······该交易项目specialPrice标签的值
A······major_positive类言论强度
B······minor_positive类言论强度
C······trading类言论强度
D······minor_negative类言论强度
E······major_negative类言论强度
M······村民收购的第一个物品的堆叠上限
V······玩家的村庄英雄效果等级(V 1即无村庄英雄效果)
其中,作者自己定义的六角括号〔〕,代表此括号内的运算在得出结果后会被去除小数部分,只保留整数部分。比如〔18.5〕=18、〔-64.12〕=-65、〔0.1〕=0
上面的clamp(a,b,c)函数,则用来限制a介于b、c之间(b≤c)。比如:
clamp(34,1,3)=3
\\ 34超过了最大值3,所以输出3\\
clamp(12,8,88)=12
\\ 12介于8和88之间,所以还是输出12\\
clamp(-44,9,73)=9。
\\-44低于最小值9,所以输出9\\
你可能会感到疑惑:唉这个公式怎么和上一章的公式完全不一样啊?
这个问题很有趣。首先,上一章的公式仅仅只考虑了言论对价格的影响。仔细观察,你也会发现这里的公式中含有上一章的公式。那这有趣究竟在哪里呢?
上一章的公式来自Minecraft Wiki。在中文Minecraft Wiki的村民页面上,还有另一个价格计算公式。而这个公式,对于声望的计算,是完全不一样的!
y = m -〔(5A + B + C - D - 5E)× p〕
\\仅考虑言论的价格公式\\
y =〔a×p×m〕+〔p×D〕-〔p×C×10〕+e+m
a······该交易项目demand标签的值
p······价格乘数