☰
MCreator 村民交易价格倍数(Price Multiplier)详解:机制、参数与源码实现
2026/10/17 2:07:37 网站建设 项目流程
  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】MCreator

MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

导读

本篇技术指南聚焦 MCreator 中"村民交易(Villager Trade)"元素的**价格倍数(Price Multiplier)**参数,对应帮助文档villagertrades/price_multiplier中"定义重复交易同一物品时的价格涨幅值"这一核心设定。文章将带你理解该参数在 Minecraft 交易经济系统中的真实含义、MCreator 界面中的取值范围与默认值,并从源码与代码生成模板层面剖析它最终如何落入 NeoForge 模组与数据包输出,帮助你精确调校自定义村民交易的物价曲线。

一、Price Multiplier 是什么

在 Minecraft 原版交易机制中,村民的定价并非一成不变:当玩家反复购买同一件商品时,价格会逐步上涨;而当玩家通过交易提升好感度(声望)后,价格又会得到折扣。**Price Multiplier(价格倍数)**正是控制这一动态调价幅度的核心系数。

在 MCreator 中,它属于"村民交易(Villager Trade)"元素下**每条独立交易记录(Trade Entry)**的一个字段。官方帮助文档(de_DE 原文档)的描述为:

Legt die Preiserhöhung fest, wenn der Spieler den gleichen Gegenstand mehrmals handelt.

即"定义当玩家多次交易同一物品时的价格上涨幅度"。英文默认文档(default 版本文档)与中文文档(zh_CN 版本文档)表述一致:"在此定义重复交易同物品时的价格涨幅值。"

简单来说,该值越大,玩家重复购买同一商品时价格攀升得越快,越能抑制"刷交易"行为;该值越小(甚至为 0),价格越稳定。

二、界面位置与参数约束

2.1 在交易条目编辑器中的位置

在 MCreator 的"村民交易"元素编辑界面中,每条交易记录的第二行布局依次为:Level(职业等级)、Max trades(最大交易数)、**XP given to villager(村民获得的经验)**与Price multiplier(价格倍数)。界面标签与帮助按钮的挂载逻辑可见于 UI 源码 JVillagerTradeEntry.java:

line2.add(HelpUtils.wrapWithHelpButton(gui.withEntry("villagertrades/price_multiplier"), L10N.label("elementgui.villager_trade.price_multiplier"))); line2.add(priceMultiplier);

其中gui.withEntry("villagertrades/price_multiplier")正是打开本文所对应帮助文档的入口,而控件本身通过ComponentFromAnnotation.spinner依据TradeEntry类上的@Numeric注解自动生成。

2.2 取值范围与默认值

价格倍数的取值范围与默认值定义在数据模型 VillagerTrade.java 中:

@Numeric(init = 0.05, min = 0, max = 1, step = 0.01) public double priceMultiplier;
属性值
默认值(init)0.05
最小值(min)0
最大值(max)1
步进(step)0.01
字段类型double

默认值0.05与 Minecraft 原版村民交易默认价格倍率一致,即每重复交易一次,价格按基础价的 5% 上浮。步进为0.01,意味着你可以在0.00到1.00之间以 1 个百分点为单位精细调节。将该值设为0可以完全关闭重复购买造成的涨价。

三、Price Multiplier 在生成代码中如何落地

理解了界面参数后,最关键的问题是:这个值最终写进了游戏代码的哪里?MCreator 作为可视化代码生成器,会把该参数注入到生成模组/数据包的模板中。

3.1 NeoForge 模组生成:BasicItemListing构造参数

针对 NeoForge 1.21.1 平台,村民交易通过 villagertrades.java.ftl 模板生成:

event.getTrades().get(${entry.level}).add( new BasicItemListing( ${mappedMCItemToItemStackCode(entry.price1, entry.countPrice1)}, <#if !entry.price2.isEmpty()>${mappedMCItemToItemStackCode(entry.price2, entry.countPrice2)},</#if> ${mappedMCItemToItemStackCode(entry.offer, entry.countOffer)}, ${entry.maxTrades}, ${entry.xp}, ${entry.priceMultiplier}f ) );

可以看到,entry.priceMultiplier被渲染为BasicItemListing构造函数的最后一个参数(附加f后缀表示 float 字面量)。对于流浪商人(Wandering Trader),同一模板中的registerWanderingTrades分支(第 74 行)同样将该值传入BasicItemListing,只是商品被分类到getGenericTrades()/getRareTrades()列表。换言之,无论普通村民还是流浪商人,价格倍数都通过同一个原版构造器生效。

3.2 数据包生成:reputation_discount字段

在面向基岩/数据包体系的 generator-26.3.x 生成器中,价格倍数被序列化为 JSON 交易配方中的reputation_discount(声望折扣)字段,见 villager_trade.json.ftl:

{ "wants": { ... }, "gives": { ... }, "max_uses": ${data.maxTrades}, "xp": ${data.xp}, "reputation_discount": ${data.priceMultiplier} }

值得注意的术语差异:在 NeoForge 的BasicItemListing语境下它叫 price multiplier(涨价系数),而在数据包 JSON 的reputation_discount语境下,它同时参与声望折扣计算——两者本质指向同一输入值,只是游戏底层将其复用在"重复购买涨价"与"声望折扣"两条价格修正路径上。

3.3 数据转换器中的历史兼容

价格倍数还被旧版交易数据的转换器显式读取。在元素转换器 VillagerTradeSplitter.java 中:

entry.priceMultiplier = tradeJson.get("priceMultiplier").getAsDouble();

这印证了priceMultiplier是持久化在.json工作区文件中的一级字段(旧版交易记录迁移到trades列表结构时被原样保留),也说明该参数从旧版本 MCreator 工作区升级到新版本时不会丢失。

四、与其他交易参数的关系与调校建议

价格倍数并非孤立存在,它与同一交易记录中的其他字段共同决定交易经济模型。全部字段定义在 VillagerTrade.java 的TradeEntry内部类中:

字段默认值范围作用
countPrice111–99第一价格物品数量
countPrice211–99第二(可选)价格物品数量
countOffer11–99售出物品数量
level11–5解锁该交易所需的村民职业等级
maxTrades101–72000不补货前该交易可进行的最大次数(max_trades 文档)
xp51–72000村民获得的经验值(xp 文档)
priceMultiplier0.050–1重复交易同一物品时的价格涨幅(本文主题)

调校建议:

  • 模拟"物以稀为贵":把热销商品的priceMultiplier调高(如0.2–0.5),玩家重复购买会快速涨价,限制单次刷取量。
  • 稳定供应型商店:设为0,价格永不因重复交易上涨,适合主城补给站这类体验型交易。
  • 配合maxTrades:maxTrades控制补货前可交易次数,priceMultiplier控制次数内的涨价斜率,两者结合可以精确设计"买几次之后变得昂贵"的梯度。
  • 配合声望折扣:由于该值同时作用于数据包侧reputation_discount,合理取值还能让多次交易的"老顾客"在声望提升后获得可观折扣,形成正向循环。

五、小结

Price Multiplier 是 MCreator 村民交易元素中控制动态物价的核心数值:它在界面层以0.05为默认、0.01为步进的 double 参数呈现;在 NeoForge 模组生成层作为BasicItemListing的最后一个构造参数写入Trades类;在数据包生成层映射为 JSON 配方中的reputation_discount;并在工作区升级转换器中被完整保留。掌握它的语义与生成路径,你就能为自定义村民设计出既平衡又有深度的交易经济系统。

  • 低代码
  • 代码生成
  • 桌面应用
  • 游戏开发

【免费下载链接】MCreator

MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an integrated code editor. It is used worldwide by Minecraft players, aspiring mod developers, for education, online classes, and STEM workshops.

项目地址:https://gitcode.com/gh_mirrors/mc/MCreator
点击查看免费下载

相关推荐

上一篇:Wayback Machine:我的互联网时光机探索之旅
下一篇:Atkinson Hyperlegible 字体全解析:为低视力读者设计的无障碍字体与 Fontsource 接入实践

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询