自定义熔炉

自定义熔炉

为整合包开发者打造的完全自定义熔炼机器,拥有独立配方,可实现对进度发展的真正控制。

处理中

开始之前的一点说明: Custom Smelters 本身不会做任何事。它是一个专门为整合包开发者打造的、配合 KubeJS 使用的工具,为你提供构建模块,让你可以完全按照自己的想法设计熔炼进度。

该模组添加了三种不同的熔炉:Primitive Smelter(原始熔炉)、Iron Forge(铁锻炉,与 Primitive Smelter 在功能上没有区别;添加它只是为了让整合包开发者可以自行将不同等级的熔炼配方进行门控),以及 Alloy Smelter(合金熔炉),它有两个原料槽位,用于将两种不同的原料合成为一种产物。

问题所在

原版熔炼配方在原料数量方面可配置性很差,默认只能为一种。

第二个问题

在原版 Minecraft 中,所有熔炼配方都被归入同一个共享类别。这意味着你定义的“自定义”熔炼配方可以在任何熔炉方块中被烧炼,比如原版熔炉、高炉,或者其他模组添加的任何高级熔炉,而不管你到底是为哪一种熔炉设计的。

实际上,这意味着你无法把高级配方锁在进度之后。即使你刻意把原版熔炉配方做得复杂或昂贵来阻止早期使用,玩家也可以直接找一个村庄里的熔炉,完全绕过你设计的进度。

解决方案

Custom Smelters 通过为你提供完全独立的熔炼配方来解决这个问题,让你可以完全控制每一个变量:原料数量、完成所需的 tick 数,以及完成时给予的 经验值。这些都可以按配方单独配置,而不是在整个模组范围内固定。

同样重要的是,这些自定义配方完全存在于它们自己独立的类别中。你为 Custom Smelters 的机器编写的配方不会出现在原版熔炉、高炉或任何其他模组的熔炉方块中。如果你为 Iron Forge 注册了一个配方,那么只有 Iron Forge 能处理它。

**设置配方

熔炉配方**

首先,请确保你在整合包中安装了 KubeJS;它能让一切变得更容易。之后,你需要为该模组添加的熔炉设置配方。一共有三种熔炉,但你可以只添加你想要的那一种,也可以一次全部添加;这取决于你,以及你想如何设计整合包的进度。在我的情况下,我只想把 Primitive Smelter 加入我的整合包,这样我就可以围绕它构建早期游戏进度。下面是我设置为 primitive_smelter.json 的 JSON 文件。

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "B B",
    "BCB",
    "BBB"
  ],
  "key": {
    "B": {
      "item": "minecraft:bricks"
    },
    "C": {
      "item": "minecraft:campfire"
    }
  },
  "result": {
    "id": "customsmelters:primitive_smelter",
    "count": 1
  }
}

这个文件要放在你的整合包中的这里:kubejs/data/customsmelters/recipe/primitive_smelter.json

现在你可以在游戏里制作你的 Primitive Smelter 了。请记住,这个配方可以随你喜欢进行更改。完全取决于你的想象力,放手去做吧!你可以创建其他 JSON 文件来为其他熔炉添加工艺配方。只需要把产物 id 改成 Iron Forge 的 "customsmelters:iron_forge",以及 Alloy Smelter 的 "customsmelters:alloy_smelter"。

熔炼配方

接下来,我们需要为 Primitive Smelter 设置一个自定义熔炼配方。对于我的整合包,我想为铜熔炼创建一个自定义配方。不过,与原版熔炼不同,我想让玩家消耗 4 个粗铜来产出 1 个铜锭。我还想把这个过程获得的经验值提高到 4,并把时间从 10 秒增加到 20 秒。所以我把我的 JSON 文件设置在:

kubejs/data/customsmelters/recipe/copper_smelting_primitive.json

(这里的文件名完全由你决定)

{
  "type": "customsmelters:smelting",
  "tier": 1,
  "ingredient": {
    "item": "minecraft:raw_copper"
  },
  "count": 4,
  "result": {
    "id": "minecraft:copper_ingot",
    "count": 1
  },
  "ticks": 400,
  "experience": 4.0
}

就这样。请记住,count(默认值:1)、ticks(默认值:200)和 experience(默认值:0)都是可选字段。

现在假设我想用另一种方块(Iron Forge)为铜熔炼添加一个更高级的配方。我需要做的就是再创建一个 JSON 文件,比如 kubejs/data/customsmelters/recipe/copper_smelting_advanced.json,并像这样设置:

{
  "type": "customsmelters:smelting",
  "tier": 2,
  "ingredient": {
    "item": "minecraft:raw_copper"
  },
  "count": 1,
  "result": {
    "id": "minecraft:copper_ingot",
    "count": 2
  },
  "ticks": 25
}

如你所见,把 tier 数字改为 2 会让配方改为在 Iron Forge 中可用。请记住,tier 1 和 tier 2 的配方是完全独立的,所以不存在 Iron Forge 会自动继承 Primitive Smelter 配方这种事情。

合金配方

这个模组最后能做的一件事就是使用合金配方,它可以将两种材料合成为一种。举个例子,下面是我使用一些其他模组制作的一个钢配方,位于:kubejs/data/customsmelters/recipe/steel.json:

{
  "type": "customsmelters:alloying",
  "ingredientA": {
    "item": "minecraft:iron_ingot"
  },
  "ingredientB": {
    "item": "minecraft:coal"
  },
  "result": {
    "id": "createmetallurgy:steel_ingot",
    "count": 1
  },
  "ticks": 200
}

方块自定义

重命名熔炉名称

现在假设你想更改熔炉的名称。你只需要在以下位置创建一个 JSON:kubejs/assets/customsmelters/lang/en_us.json,然后像这样写入名称:

{
  "block.customsmelters.primitive_smelter": "Your New Name Here",
  "block.customsmelters.alloy_smelter": "Your New Name Here",
  "block.customsmelters.iron_forge": "Your New Name Here"
}

更改纹理

要替换机器的纹理,请把一个新的 PNG 文件放在该模组内部使用的完全相同路径下。例如,要替换 Primitive Smelter 的侧面纹理:kubejs/assets/customsmelters/textures/block/primitive_smelter_side.png

每台机器的完整纹理文件列表:

Primitive Smelter: primitive_smelter_top.png、primitive_smelter_top_active.png、primitive_smelter_side.png、primitive_smelter_front.png、primitive_smelter_front_active.png

Iron Forge: iron_forge_top.png、iron_forge_side.png、iron_forge_front.png、iron_forge_front_active.png(以及用于其动画的 iron_forge_front_active.png.mcmeta)、iron_forge_bottom.png

Alloy Smelter: alloy_smelter_top.png、alloy_smelter_side.png、alloy_smelter_bottom.png、alloy_smelter_front.png、alloy_smelter_front_active.png(以及用于其动画的 alloy_smelter_front_active.png.mcmeta)

关于动画纹理的说明: 如果你只替换动画纹理文件(iron_forge_front_active.png 或 alloy_smelter_front_active.png),而不改动其匹配的 .mcmeta 文件,动画仍然会正常工作,因为 Minecraft 会独立加载每个文件,所以你的新纹理会自动使用模组原始的动画时序。

唯一的要求是:你的替换图像必须保持与原版相同的堆叠帧尺寸(Iron Forge 的动画正面是 16×48,由 3 帧组成;Alloy Smelter 的是 16×32,由 2 帧组成)。如果你想更改动画速度、帧数或行为本身,你还需要在同一路径覆盖匹配的 .mcmeta 文件,并使用你自己的 frametime/frames/interpolate 值。

鸣谢

Iron Forge 的纹理基于 malcolmriley/unused-textures 中的资源,授权协议为 CC BY 4.0。 其中一些纹理已为 Custom Smelters 的使用进行了修改。请查看他的仓库,看看他多年来所做的令人难以置信的作品。

📦 整合包与权限

你可以自由地在任何整合包中使用 Custom Smelters!唯一的条件是该模组文件必须通过 CurseForge 或 Modrinth 下载。