河豚的技能 - MT 背包负重

河豚的技能 - MT 背包负重

它允许玩家的技能成长提升最大负重上限。

游戏机制

Pufferfish's Skills InventoryWeight

Pufferfish's Skills InventoryWeight 是一款服务器端模组,可将 MT Inventory Weight 与 Pufferfish's Skills 连接起来。

它允许玩家的技能进度以两种方式增加其最大库存重量容量:

  1. 属性奖励(数据驱动)——技能节点直接授予库存重量属性。无需 Java;这就是捆绑的“搬运“技能树的工作方式。
  2. Java 事件连接器——此模组读取技能类别的经验等级,并通过 MT Inventory Weight 的事件修改最大重量。

它还附带一个可选的、内置的“搬运”技能树,你可以按世界启用。

此模组不能独立运行。

MT Inventory Weight 注册了一个原版风格的属性:

inventoryweight:generic.max_weight

Pufferfish's Skills 可以通过其 puffish_skills:attribute 奖励授予任何已注册的属性,因此技能节点可以直接授予最大重量。


1. 属性奖励(数据驱动,无需 Java)

在类别的 definitions.json 中,技能定义列出了奖励。将 puffish_skills:attribute 奖励指向 inventoryweight:generic.max_weight:

{
    "type": "puffish_skills:attribute",
    "data": {
        "attribute": "inventoryweight:generic.max_weight",
        "value": 200.0,
        "operation": "addition"
    }
}
operation 效果
addition / add / add_value 直接加值(例如 +200)。推荐使用。
multiply_base / add_multiplied_base 增加属性基础值的一个分数。
multiply_total / add_multiplied_total 乘以当前总数。

优先使用 addition。如果属性基础值为 0,multiply_* 操作可能效果甚微或无效。

2. Java 事件连接器(基于等级的缩放)

此模组监听 MT Inventory Weight 的最大重量事件:

InventoryWeightEvents.MODIFY_MAX_WEIGHT

并根据技能类别的经验等级来缩放容量,该等级通过 Pufferfish's SkillsAPI(Category.getExperience().getLevel(player))读取。请参阅下面的配置。

如果节点授予了属性(路径 1),并且你按等级缩放了相同的值(路径 2),则奖励会叠加。


内置的“搬运”技能树

此模组绑定了一个可选的 Pufferfish 类别 carrying:

  • 在 jar 文件中以 Fabric 内置数据包的形式注册于 resourcepacks/carrying/,因此会出现在世界创建界面的数据包屏幕中,默认禁用。
  • 节点授予 inventoryweight:generic.max_weight(固定值和百分比),带有一个小的移动速度节点和一个终极节点。
  • 通过挖掘方块和合成物品获得经验。
  • 强力的百分比/移动节点位于树的更深处,需要先通过几个固定值节点。

启用方法:

  • 新世界 → 创建世界 → 数据包 → 将“搬运技能树”移动到启用侧,或者
  • 已有世界 → /datapack list,然后 /datapack enable "<id>"。

打开技能界面(默认按键 K)即可看到搬运类别。

默认包 vs. 自定义包(整合包开发者 / 服务器管理员)

你不必局限于捆绑的技能树:

  1. 使用默认包——启用内置的“搬运技能树”包。无需任何文件。
  2. 覆盖它——提供一个数据包,在 puffish_skills 命名空间下重新定义 carrying 类别。后加载的包会覆盖内置文件(按文件粒度,后加载的包获胜)。保持内置包禁用以避免混合。
  3. 添加独立的技能树——使用不同的 ID(以及你自己的命名空间)定义一个新的类别,并保持内置的 carrying 包关闭。这是整合包最干净的选择:无冲突。

无论哪个包的 config.json 最终生效,它都必须列出你想要加载的所有类别。


配置(Java 事件路径)

通过 fzzy_config 同步的服务器端配置:

config/pufferfishs-skills-inventoryweight/server-config.*

通用

选项 默认值 描述
enabled true 主开关。
minimumMaxWeight 1.0 最终最大重量的下限。

category(默认启用)

根据一个已配置类别的经验等级进行缩放。

选项 默认值 描述
category.enabled true 启用基于类别的缩放。
category.categoryId puffish_skills:adventure 要读取的类别 ID。如果省略,命名空间默认为 puffish_skills。
category.additivePerLevel 0.0 每类别等级的固定加成。
category.multiplierPerLevel 0.05 0.05 = 每级 +5%。

totalLevel(默认禁用)

根据所有类别经验等级的总和进行缩放。

选项 默认值 描述
totalLevel.enabled false 启用组合等级缩放。
totalLevel.additivePerLevel 0.0 每组合等级的固定加成。
totalLevel.multiplierPerLevel 0.0 0.01 = 每组合等级 +1%。

计算公式

result = (currentMaxWeight + additive) * multiplier
result = max(minimumMaxWeight, result)

currentMaxWeight 是 MT Inventory Weight 已经计算出的值,因此这会与基础配置、护甲口袋以及其他 Inventory Weight 模组叠加。

示例

基础最大重量:             100
类别等级 (冒险):           10
category.multiplierPerLevel: 0.05

multiplier = 1 + 10 * 0.05 = 1.5
result     = (100 + 0) * 1.5 = 150

备注

  • 如果某个类别不存在或没有经验来源,则其贡献值为 0。
  • 负的配置值将被钳制为中性值。
  • 在你的 Pufferfish's Skills 数据包/配置(puffish_skills:<id>)中查找类别 ID。
  • 内置技能树是 NORMAL 类型(默认关闭);请在数据包界面中启用它。

故障排除

  • 技能不提供任何重量加成——确认属性 ID 精确为 inventoryweight:generic.max_weight,优先使用 operation: addition,并在编辑奖励后重置技能,以便修饰符重新应用。
  • 内置技能树缺失——它默认是禁用的;请启用它。检查日志中是否出现 Registered built-in 'carrying' datapack: true。
  • pack.mcmeta 无法加载——描述必须是严格的 JSON 格式(不能使用智能引号/尾随逗号)。
  • experience.json 中出现 Unknown variable 'true' ——条件必须引用已定义的变量;对于无条件经验,请使用纯字符串,例如 "experience": "1"。

文档

完整文档:参见 docs/pufferfishs-skills.md(或在线文档站点)。