三学科

三学科

一个工具顶三个:万能工具能挖掘镐、斧和铲各自能挖的所有东西,并且像它们一样剥皮、刮削、除蜡、耕作和熄灭。它由这三种工具制成,所以它的使用寿命是这三者的总和。

Trivium 添加了一种多功能工具(paxel):一把能挖掘镐、斧和锹各自能挖掘的所有方块的工具,并且右键点击时能执行这三者各自的全部操作。它有六种原版材质——木头、石头、铁、金、钻石和下界合金——每一种都能以对应家族专属工具完全相同的速度挖掘该家族的方块。

它能挖掘什么

镐、斧和锹可挖掘列表中的所有方块,以及锄的列表:树叶、干草、幽匿和苔藓也一并包含。其他模组添加到这些相同列表中的方块也被覆盖,无需一行代码提及任何模组。

它右键点击时做什么

给原木去皮、刮削铜、除蜡、耕地和熄灭营火。

它会耕地,但不会压出小径。这两者在相同的方块上响应相同的点击,都需要上方有空间,且点击本身无法将它们区分开来——所以必须舍弃其中之一,而不是让一个从属于另一个。耕地比小径更有价值,而小径只需用锹即可获得。

合成

一把镐、一把斧和一把锹,材质相同,且三者均未受损。多功能工具是组装而非升级——没有锻造配方——并且它承载三把工具合计的耐久度。破坏方块仍然消耗一点耐久,因此在可破坏方块数量上收益是持平的:所获得的是物品栏格子以及无需切换,而非更长的续航。

锄是赠品。它不在配方中,因此不消耗第四把工具,也不延长任何东西,但多功能工具仍能达到锄所能达到的一切,并耕种锄所能耕种的一切。

木制多功能工具可以在熔炉中燃烧,燃烧时长与其制作所用的木镐相同。原版的燃料表逐一列出木制工具而非读取标签,因此这一点必须明确说明而非继承而来。

底层实现

多功能工具能挖掘什么由数据决定,而非代码。自 1.20.5 起,工具的挖掘能力存在于 Tool 数据组件中,表现为一组针对方块标签的规则列表,因此多功能工具是一个组件,为每个家族携带一条挖掘规则,而非对工具类型进行分派。右键行为通过 BlockState.getToolModifiedState 解析,这是原版物品调用的钩子,也是其他模组覆写的钩子,因此那里也没有任何重新实现。这正是其他模组的方块无需逐模组代码即被覆盖的全部原因。

多功能工具属于 #pickaxes、#axes 和 #shovels。这正是效率、时运、精准采集、耐久和经验的修补生效的原因:1.21 中的每个附魔都指定一个物品标签作为其可附着的对象,而原版的可附魔标签正是由这三个标签构建而成。把真实情况说一次——多功能工具是这三者——也正是让之后添加的标签无需在此更改即可覆盖多功能工具的原因。

需求

Minecraft 1.21.1 上的 NeoForge。无其他依赖。MIT 许可。