简易自定义合成

简易自定义合成

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

简易自定义合成 (Easy Custom Craft)

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

功能

  • 合成台 – 有序与无序合成(命令 + 3×3 GUI)
  • 烧炼 – 熔炉、高炉、烟熏炉、营火(经验值 + 时间)
  • 锻造台与切石机
  • 标签 – 在任何位置使用 tag:… 作为材料,并可创建自己的标签
  • 任意模组机器(机械动力、通用机械、热力系列……) – 扫描所有配方类型,检测其选项,支持命令自动补全、多输入与流体——全部无需 JSON
  • 支持 NBT 结果与模组物品
  • 命令 (/ecc)
    • 公共list, preview <名称>
    • 管理员 (OP)reload, remove <名称>, 以及 create …
      • create craft_with_gui
      • create craft crafting_table shaped|shapeless …
      • create craft furnace|blastfurnace|smoker|campfire|smithing|stonecutting …
      • create tag <名称> <值…>
      • create modded_craft types [过滤器]
      • create modded_craft <类型> <名称> <输入[,输入2,…]> <输出> [数量] [键=值…]

文档(高级)

值语法

每个"材料"位置接受:

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

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

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

合成台

  • shaped <名称> <格子1>[ 格子2..格子9] result <物品> [数量] 材料在前;字面量 result 结束网格。尾部空白格子可选(可省略);仅内部空缺使用 empty/air。 网格按从左到右、从上到下填充;图案自动裁剪到其包围盒。最多 16 种不同材料。
  • shapeless <名称> <材料1>[ 材料2..材料9] result <物品> [数量] 数量 可选(默认 1,最大 64)。

烧炼

<工作站> <名称> <材料> <结果> [经验值] [烧炼时间]

工作站与默认烧炼时间:熔炉 200,高炉 100,烟熏炉 100,营火 600 刻。 经验值默认为 0.0。结果支持数量 + NBT(Forge 对象结果)。

锻造台与切石机

  • smithing <名称> <模板> <基底> <附加> <结果> [数量] → 对应 minecraft:smithing_transform;三个输入均为必需(1.20.1 规则)。结果支持数量/NBT。
  • stonecutting <名称> <材料> <结果> [数量] → 结果为纯物品 ID,故结果不支持 NBT(原版序列化器限制)。

标签

create tag <名称> <值1> [值2…] 写入 data/easycustomcraft/tags/items/<名称>.jsonreplace:false)。值可以是物品或 tag: 引用(嵌套为 #ns:路径)。该标签随后可在任何地方以 tag:easycustomcraft:<名称> 形式使用。引用不存在的标签会大声报错(会对照实时标签管理器进行验证)。

模组配方 (modded_craft)

发现

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

创建

<类型> <名称> <输入[,…]> <输出> [数量] [键=值…]

该构建器通过学习该类型的一个真实配方并加以编辑来工作:

  1. 选择一个该类型的模板配方,优先选择位于该类型自身命名空间内且无条件的配方。
  2. 移除条件(这样你的配方就不会继承对另一个模组的 forge:mod_loaded 依赖)。
  3. 用你的列表替换物品输入(保留模板中的流体输入);用你的物品替换第一个物品输出(保留次要/流体输出)。
  4. 将每个 键=值 覆盖应用到 JSON 上(任何顶层字段;列表通过逗号指定)。
  5. 使用该模组自带的 RecipeSerializer 进行验证——无效的配方会被拒绝并显示该模组的错误,不会被写入。
  6. 写入并重载,然后报告从示例中保留的选项(例如 heatRequirement=heated),以便你进行覆盖。

范围与限制

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

存储与运行时

  • 每个配方是一个数据包文件,位于 <世界>/datapacks/easycustomcraft/data/easycustomcraft/recipes/<名称>.json
  • 每次 create/remove 后,模组会执行一次程序化资源重载,类似于原版 /reload,并在首次使用时自动启用该数据包——更改即时生效,无需重启。
  • 这使得配方本质上是每世界(单人)或每服务器(专用)的。

权限与端

  • 根命令 /ecc 是公共的;list/preview 开放给所有人。create 下的所有命令,加上 reload/remove,需要权限等级 2(OP)。
  • 自定义命令参数类型(材料、材料列表)已向 Forge 注册,因此命令树能正确同步。在服务端安装以获得功能,在客户端安装以获得 GUI 和命令自动补全。