跳到正文

CYE: Recipe Control

作者:_MiNuS_

Change, add and disable any recipe or item with one JSON config — applied after datapacks, KubeJS and generated recipes, so your changes always win.

收藏

介绍

中文介绍正在准备中,下面暂时显示原文。

CYE: Recipe Control

Change, add and disable any recipe — and have the last word over datapacks, KubeJS and mods that generate their own recipes.

⚠️ Early development (beta). The mod is still being developed and has so far been tested only on dedicated
servers — singleplayer and most game versions have not been tested in game yet. It is not recommended for
important worlds or public modpacks yet.
Back up your world before using it, and please report any problems.

❗ Fabric / Quilt: Fabric API is required.
Without it the mod does not load. (On Quilt, QFAPI works too.) Forge and NeoForge need nothing else.

One small jar for Fabric, Quilt, Forge and NeoForge. No scripting, no datapack per world: you describe the changes
in one JSON file and the mod applies them directly to the game’s recipe manager every time data is loaded.

Made for CYELauncher (its visual recipe editor writes the config for you), but works on its own
on any client or server — the config is plain JSON.


Why

Datapacks are loaded together with everything else, so a mod or a KubeJS script can override them.
Some mods (for example GregTech CEu) don’t ship recipe files at all — they generate tens of thousands of recipes
while the game loads, so there is nothing for a datapack to override.

CYE: Recipe Control runs after the recipe manager has been filled — after vanilla, datapacks, KubeJS scripts and
generated recipes — and edits the final result. The changed recipes are then sent to players as usual, so recipe
viewers that read the server’s recipes (JEI / EMI / REI, the recipe book) should show them too — this part has not been
tested in game yet.

Features

  • Replace any recipe by its id — vanilla, modded or generated at runtime.
  • Add new recipes.
  • Disable recipes.
  • Disable items: removes every recipe that produces the item. Optionally also removes recipes where the item is the
    only way to satisfy an ingredient. Tags are expanded, so disabling minecraft:stick also removes recipes that use
    #c:rods/wooden (if sticks are the only thing in it), but disabling one kind of planks does not break every
    #minecraft:planks recipe.
  • A bad recipe doesn’t stop loading: a recipe that fails to parse is skipped and reported.
  • Report after every load and /reload — config/cye-recipe-control.report.txt says what was changed, added,
    removed and what failed and why, plus a self-check that the changes really are in the recipe manager.
  • Full recipe list — config/cye-recipe-control/recipes.txt (id<TAB>type of every recipe in the game,
    including generated ones). Handy for finding the id of a recipe you want to replace.

Supported versions

Tested on dedicated servers (✅) — replacing, adding, disabling recipes, disabling items, /reload:

Loader Minecraft Status
Forge 1.20.1 ✅ (also with GregTech CEu 7.5 and KubeJS 6)
NeoForge 1.21.1 ✅
NeoForge 26.1 ✅
Fabric / Quilt 1.21.1 ✅
Fabric / Quilt 1.21.4 ✅
Fabric / Quilt 1.21.2 ✅
Fabric / Quilt all other releases 1.20.1 – 1.21.11 should work (name tables included), not tested in game
NeoForge 1.20.5 – 1.21.x should work, not tested in game
  • Fabric / Quilt — Fabric API is required (on Quilt — Fabric API or QFAPI).
  • Java 17+.
  • Older versions (1.19 and below) are not supported.

Installation

  • Server: put the jar in mods/ (on Fabric / Quilt — together with Fabric API) and the config in
    config/cye-recipe-control.json. Players don’t need the mod.
  • Singleplayer: put it in the client’s mods/ (the integrated server does the work).
  • CYELauncher: nothing to do — the launcher downloads the latest compatible file from this project, keeps it updated
    and writes the config when you launch an instance that has recipe changes.
  • Modpacks: you may include the mod in your modpack — while it is in beta, test it with your pack first.

Config — config/cye-recipe-control.json

{
  "recipes": {
    "minecraft:iron_pickaxe": {
      "status": "edited",
      "recipe": {
        "type": "minecraft:crafting_shaped",
        "pattern": ["ADA", " B ", " B "],
        "key": {
          "A": { "item": "minecraft:iron_ingot" },
          "D": { "item": "minecraft:diamond" },
          "B": { "item": "minecraft:stick" }
        },
        "result": { "id": "minecraft:iron_pickaxe", "count": 1 }
      }
    },
    "mypack:sand_to_glass": {
      "status": "new",
      "recipe": {
        "type": "minecraft:smelting",
        "ingredient": { "item": "minecraft:sand" },
        "experience": 0.1,
        "cookingtime": 100,
        "result": { "id": "minecraft:glass", "count": 4 }
      }
    },
    "minecraft:golden_apple": { "status": "disabled" }
  },
  "disabled_items": {
    "minecraft:tnt": { "ingredients": true },
    "minecraft:diamond_sword": { "ingredients": false }
  }
}
  • recipes — key is the recipe id.
    • status: edited / new — recipe is the recipe JSON, exactly as in a datapack for your Minecraft version
      (the format changed in 1.20.5 and 1.21.2), including mod recipe types such as gtceu:macerator.
    • status: disabled — the recipe is removed.
  • disabled_items — item id → { "ingredients": true | false }. false removes the recipes that produce the item;
    true also removes recipes that can no longer be crafted without it. Recipes listed in recipes are never touched by
    disabled_items.

Changes are applied at world/server start and on every /reload.

Report — config/cye-recipe-control.report.txt

# CYE: Recipe Control — 2026-10-21T18:24:11
changed 2, added 1, removed 329, errors 0, verified 4/4 (recipes before 39613, after 39285; reload)
N mypack:sand_to_glass
E minecraft:iron_pickaxe
- minecraft:golden_apple
x minecraft:stick — recipes removed: 327 (result and ingredient)
! mypack:broken — JsonParseException: Pattern references symbol 'X' but it's not defined in the key

(The report text is in Ukrainian in this version.)

Limitations

  • Items are not removed from the game registry (that would break worlds) — a disabled item simply can’t be crafted.
    It can still appear in loot, creative tabs, JEI’s item list, etc.
  • Mods that keep their own copy of recipes outside the vanilla recipe manager may still use the original recipe in
    their machines. Crafting-table / furnace / smithing / stonecutter recipes are always affected.
  • On 1.20.1, machine recipes of mods like GregTech CEu can be disabled by id, but “disable item” can’t detect
    their outputs (there is no recipe codec in 1.20.1).
  • Recipe JSON must match the format of your Minecraft version — the mod does not convert between versions.

How it works (for the curious)

The mod has no compile-time dependency on Minecraft. It finds the game’s classes by their official (Mojang) names via
reflection; for environments with different runtime names (Fabric intermediary before 1.21.11, Forge 1.20.1 SRG) the
jar contains small lookup tables generated from the official mappings. Hooks:

  • Forge / NeoForge — a reload listener registered with the lowest priority, which runs after the recipe manager.
  • Fabric / Quilt — Fabric API server lifecycle events (SERVER_STARTING, END_DATA_PACK_RELOAD), then the
    recipes are re-sent to players.

Credits

  • Name lookup tables are generated from Mojang’s official mappings, Fabric
    Intermediary and Forge MCPConfig;
    only the few dozen names the mod uses are included.

License

MIT.

常见问题

CYE: Recipe Control 支持哪些 Minecraft 版本?

CYE: Recipe Control 支持 Minecraft Java 版 1.20.1–26.3,共 23 个版本,可用的加载器:Fabric / Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。

CYE: Recipe Control 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分