y=m-〔(5A B C-D-5E)×p〕
\\\\上一章的,不做解释\\\\
y=〔a×p×m〕 〔p×D〕-〔p×C×10〕 e m
a······该交易项目demand标签的值
p······价格乘数
e······该交易项目specialPrice标签的值
m······原价
D······minor_negative类言论强度
C······trading类言论强度
仔细观察这两个公式,你会发现第一个公式仅仅只有言论强度和价格乘数的影响,第二个公式虽然用到了交易项目内三个用于影响价格的标签,但言论仅仅只有trading和minor_negative会影响到结果。而根据作者实测,五个言论的强度以及三个用于影响价格的标签均会对最终价格造成影响,所以这两个格式是错误的。
但其实也并没有完全错。如果你仔细对比这三个公式,就会发现我总结出来的公式是由这两个公式结合而成,所以这两个公式还是有一定的参考价值。
我在Java1.14.4版本和1.19版本中对新公式进行了验证,没有任何问题。至于为什么MinecraftWiki会有这个错误的公式(还放了好久没人管,英文页面也是错的),也许是在比较早期的快照版本中推导出来的。至于在基岩版中新公式是否适用,还待验证。
这个错误是一个较为严重的错误,因为它已经存在了很长时间,并有许多教程引用了这个公式,影响范围较大。当然,至于这个错误是否真的存在,虽然我自己认为有99%的可能性是存在的,但万一是我自己错了呢?所以这个故事告诉我们一件事情:不要盲目迷信权威
如果你有时间的话,可以帮忙尝试验证一下这个新公式是否通用,并验证这两个很有可能是错误的公式是否真的是错的,还是在某些版本是正确的。
回到正题。我们肯定不希望我们自定义的商品价格被随意改变,所以我们该怎么办呢?
不管是在新公式还是在疑似错误的两个公式中,p价格乘数都是一个及其重要的变量。既然是乘数,如果我们把这东西改为0,那是不是问题就解决了?
试一试!当p=0时
y=〔a×p×m〕 m-〔5A B C-D-5E)×p〕 e=0 m-0 e=m e
y=m-〔5A B C-D-5E)×p〕 e=m-0 e=m e
y=m-〔(5A B C-D-5E)×p〕=m-0=m
y=(a×p×m) (p×D)-(p×C×10) e m=0 0-0 e m=m e
不难发现,就算p=0解决了大多数问题,但还有一个e,也就是specialPrice没有解决。但其实这个东西很好解决——specialPrice仅仅会在村民补货时更新,只要我们把交易项目能够使用的次数改为非常大,就不会有这个问题。
总结下来,相比更新之前,我们在新版本中自定义村民交易,还需要注意将价格乘数priceMultiplier设为0.0。举个例子:
/summonvilger~~~{VilgerData:{level:6,profession:“minecraft:farmer“},Offers:{Recipes:[{rewardExp:1,maxUses:150000,buy:{Count:1,id:“minecraft:diamond“},buyB:{Count:10,id:“minecraft:emerald“},sell:{Count:1,id:“minecraft:diamond_sword“,tag:{Enchantments:[{id:“minecraft:sharpness“,lvl:10}]}},priceMultiplier:0.0}]}}
这个例子是我们第一百五十四章的一个旧版例子的新版写法,只不过将暮色森林Mod的幻影骑士战利品换成了普通的钻石。
上面这条指令将会生成一个等级为6的农民,并带有一个具有15万次使用次数、每次交易返回1点经验值、价格乘数为0.0、能够用1钻石加上10绿宝石买一个附魔有锋利X的钻石剑的交易项目。
村庄与掠夺更新后的自定义交易到此就结束了,你现在可以尝试去自定义一个新版本的村民,看看效果如何。另外,其实specialPrice标签并不一定说没有应用场景,这个标签有一个特性:当玩家打开又关闭交易界面后,这个specialPrice就会被重置为0。所以如果你运用得好,也是可以通过该标签弄出特价的效果来。
附表:新版本村民历史
Java
1.14——对村民进行了大改
1.14.3/1.14.4——优化
1.15——傻子村民现在没有徽章,村民会被玩家赶下床
1.16——优化
1.16.2——工作站点优化
携带/基岩版
1.10.0——大改
1.11.0——优化
1.13.0——村民现在会在战胜袭击后欢呼
1.16.220——村民现在不再能够穿墙过去睡觉
1.18.10——村民现在会发射烟花火箭庆祝,交易时头顶不会再出现绿宝石图标
1.18.30——优化