A Minecraft Forge 1.20.1 mod that lets admins create their own recipes in-game — no files, no JSON. Recipes are stored per world/server and applied instantly.
tag:… ingredients anywhere + create your own tags/ecc)list, preview <name>reload, remove <name>, and create …:
create craft_with_guicreate 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…]Every "ingredient" position accepts:
| Syntax | Meaning |
|---|---|
minecraft:stick / stick |
item (namespace defaults to minecraft) |
tag:<ns:path> |
item tag → {"tag":"…"} |
empty / air |
blank crafting cell (shaped only) |
Result positions take a concrete item (via the vanilla item argument, so NBT like minecraft:diamond_sword{…} works). In modded_craft only, key=value values additionally accept: fluid:<ns:path>[:amount] (default amount 1000), true/false, numbers, plain strings, and comma lists a,b,c (→ JSON array).
Recipe names are sanitized to [a-z0-9/._-] (other chars → _).
<name> <s1>[ s2..s9] result <item> [count]
result ends the grid. Trailing empty cells are optional (omit them); use empty/air only for internal gaps.<name> <ing1>[ ing2..ing9] result <item> [count]count is optional (default 1, max 64).<station> <name> <ingredient> <result> [experience] [cookingtime]
furnace 200, blastfurnace 100, smoker 100, campfire 600 ticks.experience default 0.0. Result supports count + NBT (Forge object result).<name> <template> <base> <addition> <result> [count] → minecraft:smithing_transform; all three inputs required (1.20.1 rule). Result count/NBT supported.<name> <ingredient> <result> [count] → result is a plain item id, so NBT on the result is not supported (vanilla serializer limitation).create tag <name> <value1> [value2…] writes data/easycustomcraft/tags/items/<name>.json (replace:false). Values are items or tag: references (nested as #ns:path). The tag becomes usable everywhere as tag:easycustomcraft:<name>. Referencing an unknown tag elsewhere fails loudly (validated against the live tag manager).
modded_craft)Discovery
types with no filter → one line per mod with a type count.types <filter> → matching type ids; a single match prints a full analysis: input/output field names, fluid usage, and every detected option with its observed values (e.g. heatRequirement = heated, superheated).Creation <type> <name> <input[,…]> <output> [count] [key=value…] The builder works by learning from a real recipe of that type and editing it:
conditions.conditions (so your recipe never inherits a forge:mod_loaded dependency on another mod).key=value override onto the JSON (any top-level field; lists via commas).RecipeSerializer — invalid recipes are rejected with the mod's error, never written.heatRequirement=heated) so you can override them.Scope & limits
key=value manually.types/tab may take a moment); string fields with >16 distinct values are treated as free-form.<world>/datapacks/easycustomcraft/data/easycustomcraft/recipes/<name>.json./reload, auto-enabling the pack on first use — changes are live immediately, no restart./ecc is public; list/preview are open. Everything under create, plus reload/remove, requires permission level 2 (OP).ingredient, ingredients) are registered with Forge, so the command tree syncs correctly. Install on the server for functionality and on the client for the GUI and command auto-complete.