价格标签

价格标签

你背包里所有物品的价值

价格标签

Pricetag 会根据整合包自身的合成配方,计算出整合包中每个物品的价值。
它不添加任何物品、方块或世界生成。它是一个库。


📦 因为其他模组要求而来到这里? 将 jar 文件放入你的 mods 文件夹即可。无需配置,也无需学习——不会添加任何物品,你的游戏也不会发生任何改变。此页面的其余内容是面向整合包和模组开发者的。


它的功能

工作原理

大型整合包的价值表通常要么缺失,要么是手写的,而手写意味着一旦有人添加了模组,它就会过时。Pricetag 没有表格。它读取你的整合包实际加载的合成配方——每一个配方,来自每个模组,包括那些没人愿意去处理的机器类型——并根据物品的合成材料推导出其价值,外加一点加工费用。

那些没有配方生产的物品——从地里挖出的矿石、从生物身上掉落的物品、从陨石中压出的东西——是唯一需要起始数值的物品。这些数值来自三个地方:通过 API 自行声明价格的模组、整合包已有的任何 pe_custom_conversions 数据,以及一个你可以补充的小配置文件。其他所有物品的价值都从配方中推导出来。

结果是,一个完整、自洽的整合包价格列表,无需任何人手动整理。


真实整合包中的数值

All the Mods 11 的真实输出

这是在 All the Mods 11 上执行一条命令的结果,且未进行任何配置:**从 2,979 个配方中为 2,025 个物品定价。** 其中 1,598 个价值是从配方推导出来的,274 个由模组声明,145 个从整合包自带的数据中读取,还有 4 个是根据标签推测的。有 310 个物品未定价,Pricetag 会说明是哪些物品以及原因,而不是为它们编造一个数值。


命令

Pricetag 在游戏内做的所有事情,都通过一条命令完成。这里没有任何内容是游玩所必需的——安装 jar 文件即可正常工作——但如果你想要这个工具,这就是它的全部功能。

命令 功能 权限
/pricetag explain <item> 精确显示某个价值是如何得出的:哪个配方、哪些材料、每样材料贡献了多少以及最终合计是多少。输出中的每个材料都是可点击的,并会依次解释自身,因此你可以将一个可疑的数值一路追溯到它来源的矿石。 所有人
/pricetag export 将整个表格以 pe_custom_conversions 格式的现成数据包形式写入 config/pricetag/export/ 目录。ProjectE 可以读取它,任何遵循该约定的其他东西也可以。你可以将其随整合包一起发布、手动编辑或冻结它。 等级 2
/pricetag report 写入 value-report.json 并告诉你文件路径。其中包含:每个价值的来源、哪些物品仍未定价,以及——最实用的部分——每个产出价值低于其自身材料成本的配方,每条都附有如何修复的提示。 等级 2
/pricetag set <value> [item] 固定一个你不同意的价值,这样就不会重新计算它。默认使用你手中的物品。 等级 2
/pricetag unset [item] 释放一个已固定的价值,让它重新被推导。 等级 2
/pricetag reload 无需重启即可重新推导整个表格。如果扫描失败,它会保留之前的数值,而不是让你一无所有。 等级 2
/pricetag dump 以 JSON 格式输出原始表格,用于对比两次运行的结果。 等级 2

🔍 从 explain 开始。 这是唯一对所有玩家开放的命令,因为它回答疑问而不是改变任何东西——这也是理解 Pricetag 对你的整合包做了什么决定的最快方式。手持一个物品并运行它。


面向整合包开发者

/pricetag report 是你在平衡整合包时需要运行的命令。每个大型整合包都有产出价值高于其消耗的配方,而这些几乎从来都不是有意为之——一个产生四个输出的切石机配方、一个无法回本的压缩循环、一个重复物品的机器配方。在 All the Mods 11 上,该报告发现了一个用一块铜块切出四个铜格栅的问题,每个格栅的价格仅为铜块的四分之一,并且下游的所有物品都继承了这一错误。

/pricetag export 是当你完成后需要运行的命令。它会将整个表格以数据包形式交给你,你可以发布它、手动编辑它,或者冻结它,这样当有人添加模组时它就不会再变动。


面向模组开发者

Pricetag API

公共 API 只有一个类,com.dnomad.pricetag.Pricetag。没有其他内容。询问某物价值几何,为你的模组中无配方可生产的原始材料声明价格,并在表格准备好时获得通知。

在接入之前,有两件事值得了解:

  • 表格是在整合包的配方加载之后构建的,因此在注册阶段它不存在。请在 FMLCommonSetupEvent 中注册你的“种子”,并对任何需要最终值的操作使用 whenReady。
  • seed 有一个接受 LongSupplier 的惰性重载,用于定义一个值,该值依赖于另一个尚不可知的值。

如果你的模组已经有一个可用的配方链,你可能根本不需要做任何事情——Pricetag 会像处理其他物品一样,从配方中为它定价。“种子”仅用于那些基础原始材料。

💡 明确允许依赖它。 许可证包含 API 例外条款:你可以自由地针对此类进行编译、调用它,并发布一个需要 Pricetag 的模组,无需询问。这正是它的用途。


安装与兼容性

  • 需要 NeoForge。仅此而已。
  • 双端——在服务器上安装,如果整合包需要,也请在客户端安装。
  • 不添加物品、方块、实体、世界生成、键位绑定或 GUI。不会与任何东西冲突。
  • 不要求 ProjectE。 如果安装了它,Pricetag 会读取它找到的数据,并能写入它可以读取的数据。如果没有安装,一切仍然正常工作——这种格式只是一种方便搬运表格的方式。

致谢

Pricetag 不包含任何第三方代码、数据或美术资源。

它读取和写入 pe_custom_conversions 数据格式——这是由 ProjectE 建立的约定,并在实践中由 TagnumElite 的 ProjectE-Integration(MIT 许可)所填充。这里不包含他们的任何内容,本模组的任何部分也非源自他们的作品;支持共享格式是互操作性而非使用。但该约定是他们的,值得在此提及。


整合包许可

你可以将 Pricetag 包含在任何整合包中,无论是公开还是私人,免费还是付费,前提是该整合包通过官方平台(CurseForge、Modrinth)分发,且该平台从官方来源下载本模组。无需询问。

欢迎第三方扩展和兼容性补丁,只要它们不捆绑或重新分发本模组的文件。如上所述,使用 API——针对它进行编译并要求依赖本模组——是明确允许的。

完整条款见 jar 文件内的 LICENSE.txt。


作者

由 DNomad 创建并维护。

📦 其他项目:curseforge.com/members/dnomad/projects

错误报告和 API 请求确实很有用——如果你正在基于此开发,并且 API 缺少某些功能,请告知。