- 低代码
- 代码生成
- 桌面应用
- 游戏开发
【免费下载链接】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.
导读
本篇技术指南聚焦 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内部类中:
| 字段 | 默认值 | 范围 | 作用 |
|---|---|---|---|
countPrice1 | 1 | 1–99 | 第一价格物品数量 |
countPrice2 | 1 | 1–99 | 第二(可选)价格物品数量 |
countOffer | 1 | 1–99 | 售出物品数量 |
level | 1 | 1–5 | 解锁该交易所需的村民职业等级 |
maxTrades | 10 | 1–72000 | 不补货前该交易可进行的最大次数(max_trades 文档) |
xp | 5 | 1–72000 | 村民获得的经验值(xp 文档) |
priceMultiplier | 0.05 | 0–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.
相关推荐
MCreator 护甲耐久参数 max_damage_absorbed 详解:部件倍率、原版对照与源码实现
MCreator 护甲耐久参数 max_damage_absorbed 详解:部件倍率、原版对照与源码实现 本文围绕 MCreator 护甲(Armor)元素中
低代码代码生成桌面应用游戏开发MCreator 村民职业 Hat(帽子)参数详解:类型帽子与职业帽子的渲染判定逻辑
MCreator 村民职业 Hat(帽子)参数详解:类型帽子与职业帽子的渲染判定逻辑 这篇指南围绕 MCreator 中「村民职业(Villager Profe
低代码代码生成桌面应用游戏开发MCreator 基岩版方块摩擦力(Friction)参数详解:作用机制、取值范围与源码实现
MCreator 基岩版方块摩擦力(Friction)参数详解:作用机制、取值范围与源码实现 本篇指南围绕 MCreator 的 Bedrock 附加包(Add
低代码代码生成桌面应用游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考