简易自定义合成(兼容所有模组)

简易自定义合成(兼容所有模组)

一个Minecraft Forge模组,允许管理员在游戏中创建自己的配方——无需文件,无需JSON。配方按世界/服务器存储,并即时应用。

Easy Custom Craft

一款适用于 Minecraft Forge 1.20.1 的模组,让管理员能够在游戏中创建自己的合成配方——无需文件,无需 JSON。配方按世界/服务器存储,并即时生效。

功能特性

  • 工作台 – 有序与无序合成(命令 + 3×3 图形界面)
  • 烧炼 – 熔炉、高炉、烟熏炉、营火(含经验值与烧炼时间)
  • 锻造台与切石机
  • 标签 – 在任何地方使用 tag:… 作为材料,并可创建自定义标签
  • 任意模组机器(机械动力、通用机械、热力膨胀等)– 扫描所有配方类型,检测其选项,支持命令自动补全、多输入和流体——完全无需 JSON
  • 支持 NBT 输出和模组物品

命令 (/ecc)

  • 公开命令: list、preview <name>
  • 管理员(OP)命令: reload、remove <name>,以及 create …:
    • create craft_with_gui
    • create craft crafting_table shaped|shapeless …
    • create craft furnace|blastfurnace|smoker|campfire|smithing|stonecutting …
    • create tag <name> <values…>
    • create modded_craft types [filter]
    • create modded_craft <type> <name> <input[,input2,…]> <output> [count] [key=value…]

文档(高级)

值语法

每个“材料”位置接受:

语法 含义
minecraft:stick / stick 物品(命名空间默认为 minecraft)
tag:<ns:path> 物品标签 → {"tag":"…"}
empty / air 空白合成格(仅限有序合成)

输出位置接受具体物品(通过原版物品参数,因此支持 NBT,如 minecraft:diamond_sword{…})。仅在 modded_craft 中,key=value 的值额外接受:fluid:<ns:path>[:amount](默认量 1000)、true/false、数字、纯字符串以及逗号列表 a,b,c(→ JSON 数组)。

配方名称会被规范化为 [a-z0-9/._-](其他字符 → _)。

工作台

  • 有序合成 <name> <s1>[ s2..s9] result <item> [count]
    • 材料先写;字面量 result 表示合成网格结束。末尾的空格可省略;仅在内部空缺处使用 empty/air。
    • 按从左到右、从上到下填充网格;模式会被自动裁剪至其边界框。最多支持 16 种不同材料。
  • 无序合成 <name> <ing1>[ ing2..ing9] result <item> [count]
  • count 为可选(默认 1,最大 64)。

烧炼

<station> <name> <ingredient> <result> [experience] [cookingtime]

  • 工作站及默认烧炼时间:furnace 200、blastfurnace 100、smoker 100、campfire 600 刻。
  • experience 默认值为 0.0。输出支持数量 + NBT(Forge 对象结果)。

锻造与切石

  • 锻造 <name> <template> <base> <addition> <result> [count] → minecraft:smithing_transform;三个输入均必需(1.20.1 规则)。支持输出数量/NBT。
  • 切石 <name> <ingredient> <result> [count] → 结果是纯物品 ID,因此不支持输出带 NBT(原版序列化器限制)。

标签

create tag <name> <value1> [value2…] 写入 data/easycustomcraft/tags/items/<name>.json(replace:false)。值可以是物品或 tag: 引用(嵌套为 #ns:path)。该标签可在任何地方以 tag:easycustomcraft:<name> 的形式使用。引用不存在的标签会报错(会针对实时的标签管理器进行验证)。

模组配方 (modded_craft)

探索发现

  • 不带过滤器的 types → 每行显示一个模组及其配方类型数量。
  • 带过滤器的 types <filter> → 显示匹配的类型 ID;单个匹配项会输出完整分析:输入/输出字段名称、流体使用情况以及每个检测到的选项及其观察到的值(例如 heatRequirement = heated, superheated)。
  • 输出后的 Tab 补全会提示所有检测到的选项键,然后是它们的值。

创建 <type> <name> <input[,…]> <output> [count] [key=value…] 构建器通过学习一个该类型的真实配方并进行编辑来工作:

  1. 选择该类型的一个模板配方,优先选择类型自身命名空间内的且不含 conditions 的配方。
  2. 移除 conditions(这样你的配方永远不会继承其他模组的 forge:mod_loaded 依赖)。
  3. 用你的列表替换物品输入(保留模板中的流体输入);用你的物品替换第一个物品输出(保留副输出/流体输出)。
  4. 将每个 key=value 覆盖应用到 JSON 上(任何顶层字段;列表通过逗号分隔)。
  5. 使用模组自身的 RecipeSerializer 进行验证——无效配方会被模组的错误信息拒绝,永远不会写入。
  6. 写入并重新加载,然后报告从示例中保留的选项(例如 heatRequirement=heated),以便你可以覆盖它们。

范围与限制

  • 最适合1→N 物品的机器加上标量/枚举选项;机械动力的混合风格配方通常需要**≥2 个输入或热量**。
  • 模式仅从已加载的配方中学习(Forge 1.20.1 的序列化器不可内省),因此从未被任何已安装配方使用过的字段将不会被建议——但你仍然可以手动输入任意 key=value。
  • 完整的类型模式会在一次遍历所有配方时构建并缓存(首次使用 types/Tab 可能需要片刻);具有超过 16 个不同取值的字符串字段将被视为自由格式。

存储与运行时

  • 每个配方都是一个数据包文件,位于 <world>/datapacks/easycustomcraft/data/easycustomcraft/recipes/<name>.json。
  • 每次创建/移除后,该模组会执行一次程序化的资源重载,镜像原版 /reload 命令,并在首次使用时自动启用数据包——更改会即时生效,无需重启。
  • 这使得配方本质上是按世界(单人游戏)或按服务器(专用服务器)的。

权限与端

  • 根命令 /ecc 是公开的;list/preview 对所有人开放。create 下的所有命令,以及 reload/remove,需要权限等级 2(OP)。
  • 自定义命令参数类型(ingredient、ingredients)已使用 Forge 注册,因此命令树能正确同步。在服务端安装以获取功能,在客户端安装以获取图形界面和命令自动补全。