Eigene Minecraft-Rezepte mit Datapacks: Schritt-für-Schritt-Tutorial (2026)
Eigene Crafting-Rezepte auf einem Minecraft-Server brauchen kein einziges Plugin. Das Vanilla-Datapack-System deckt shaped, shapeless, Smelting, Blasting, Smoking, Lagerfeuer, Smithing und Stonecutter ab. Dieser Guide ist Admin zu Admin: Verzeichnisstruktur, pack_format für 1.21.x, vollständige JSON-Beispiele, Item-Tags als Zutaten, Vanilla-Rezepte deaktivieren und die typischen Stolpersteine.
Alle Beispiele sind gegen 1.21.x mit Stand 2026 geprüft. Vanilla, Paper, Spigot, Purpur, Fabric, Forge, NeoForge: das Datapack-Format ist überall identisch. Der Server-Kern lädt einfach denselben Ordner.
Was ein Datapack ist und wo es im Stack sitzt
Ein Datapack ist ein Ordner aus JSON- und mcfunction-Dateien, den das Spiel selbst einliest. Es nutzt dieselbe Definitionssprache, mit der Mojang intern Vanilla-Rezepte, Loot-Tabellen, Advancements und Tags beschreibt. Für "9 Goldblöcke plus 1 Apfel ergibt einen verzauberten goldenen Apfel" brauchst du kein MMOItems.
Vorteile gegenüber Plugins:
- läuft auf jeder Server-Implementierung (Vanilla, Spigot, Paper, Purpur, Fabric, Forge, NeoForge),
- funktioniert im Singleplayer und auf Realms,
- hängt an der Minecraft-Version, nicht am Server-Kern,
- lädt heiß per
/reloadohne Neustart, - belegt praktisch keinen RAM, kostet null Tickbudget.
Es gibt Grenzen. Datapacks können keine neuen Block-IDs, keine neuen Item-Typen anlegen und auch keine beliebigen Events abfangen. Für echte Mods brauchst du einen Loader und ein Resource Pack. Für Rezepte ist das Datapack das richtige Werkzeug.
Datapack-Struktur für 1.21
Jedes Datapack hat einen Wurzelordner mit zwei Pflichtelementen.
my_recipes/
pack.mcmeta
data/
mypack/
recipe/
super_apple.json
aether_drill.json
crushed_gold.json
Der Name des Wurzelordners ist beliebig. Der Namespace unter data/ gehört dir, er taucht später in der Recipe-ID mypack:super_apple auf. Verwende nicht minecraft als Namespace für eigene Inhalte: das überschreibt Vanilla und kostet Kompatibilität.
Wichtige Änderung in 1.21: der Rezeptordner heißt jetzt recipe (Singular). Bis einschließlich 1.20.6 war der Pfad data/<ns>/recipes/. Wenn du ein altes Pack portierst, benenne den Ordner zuerst um, sonst überspringt das Spiel jede JSON darin still. Dasselbe traf advancements (jetzt advancement), loot_tables (jetzt loot_table), tags/items (jetzt tags/item). Die komplette Liste steht auf minecraft.wiki/w/Data_pack.
pack.mcmeta
Minimaler gültiger Inhalt:
{
"pack": {
"pack_format": 48,
"description": "My custom recipes"
}
}
pack_format ist eine Ganzzahl, die an eine Minecraft-Version gekoppelt ist.
| Minecraft-Version | datapack pack_format |
|---|---|
| 1.20.5 / 1.20.6 | 41 |
| 1.21 / 1.21.1 | 48 |
| 1.21.2 / 1.21.3 | 57 |
| 1.21.4 | 61 |
| 1.21.5 | 71 |
| 1.21.6 / 1.21.7 / 1.21.8 | 80 |
Passt die Zahl nicht zur Server-Version, erscheint die Warnung "made for a different version of Minecraft". In den meisten Fällen laufen die Rezepte trotzdem, halte den Wert aber aktuell. Die vollständige pack_format-Tabelle pflegt minecraft.wiki/w/Pack_format.
Seit 1.20.2 lässt sich pack_format um supported_formats erweitern, damit ein Pack offiziell für mehrere Versionen freigegeben ist:
{
"pack": {
"pack_format": 48,
"supported_formats": {"min_inclusive": 48, "max_inclusive": 80},
"description": "My recipes (1.21+)"
}
}
Namespace- und Dateinamen unter data/ dürfen nur [a-z0-9_.-] enthalten. Keine Leerzeichen, keine Großbuchstaben.
Wohin das Datapack auf dem Server gehört
Auf einem Server-World-Ordner ist der Pfad fest:
<server>/world/datapacks/my_recipes/
Bei mehreren Welten kopierst du in jede oder setzt einen Symlink. Bukkit und Paper benennen die Hauptwelt manchmal world unabhängig von level-name, Kontrollblick in level.dat schadet nicht.
Nach dem Kopieren als Op einloggen:
/datapack list
/datapack enable "file/my_recipes"
/reload
/reload lädt alle Datapacks ohne Server-Neustart neu. Spieler bleiben verbunden. Befehle und Tags greifen sofort. Bei einem JSON-Fehler protokolliert der Server die Zeile in der Konsole und überspringt nur das eine Rezept; alle anderen funktionieren weiter.
Auf Realms und Singleplayer landet das Pack im selben world/datapacks/. Aternos hat eine eingebaute "Datapacks"-Seite, dort lädst du die Zip mit gleichem Inhalt hoch.
Rezeptarten in 1.21
Das Spiel kennt neun Typen. Jeder ist eigenes JSON mit eigenem Feldset.
| Typ | type-Wert | Wo wird gecraftet | Wichtige Felder |
|---|---|---|---|
| Shaped | minecraft:crafting_shaped | Werkbank | pattern, key, result, category |
| Shapeless | minecraft:crafting_shapeless | Werkbank | ingredients, result, category |
| Smelting | minecraft:smelting | Ofen | ingredient, result, experience, cookingtime |
| Blasting | minecraft:blasting | Hochofen | wie oben, cookingtime 100 default |
| Smoking | minecraft:smoking | Räucherofen | wie oben, cookingtime 100 |
| Campfire | minecraft:campfire_cooking | Lagerfeuer | wie oben, cookingtime 600 |
| Smithing transform | minecraft:smithing_transform | Schmiedetisch | template, base, addition, result |
| Smithing trim | minecraft:smithing_trim | Schmiedetisch | template, base, addition, pattern |
| Stonecutting | minecraft:stonecutting | Steinmetz | ingredient, result, count |
Das Präfix minecraft: ist optional (Default-Namespace), ich schreibe es trotzdem immer dazu: explizit schlägt implizit.
Das Feld category wirkt nur auf den Tab im Rezeptbuch: building, redstone, equipment, misc für Crafting, dazu food, blocks, misc für Smelting. Nicht zwingend.
Das Feld group legt mehrere Rezepte in einen Slot des Buchs. Die sechs Holztreppen-Rezepte teilen sich "group": "wooden_stairs" und erscheinen als ein Eintrag.
Beispiel 1: shaped Rezept, goldener Apfel aus 9 Goldblöcken
In data/mypack/recipe/super_apple.json:
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "golden_apple",
"pattern": [
"GGG",
"GAG",
"GGG"
],
"key": {
"G": {"item": "minecraft:gold_block"},
"A": {"item": "minecraft:apple"}
},
"result": {
"id": "minecraft:enchanted_golden_apple",
"count": 1
}
}
Seit 1.20.5 heißt der Result-Key id, nicht mehr item. Das ist Teil des Item-Components-Refactors: jedes Recipe-JSON nutzt das neue Schema ab pack_format 41.
pattern ist ein Array aus ein bis drei Strings, jeder ein bis drei Zeichen lang. Ein Leerzeichen bedeutet leerer Slot. Leere Strings sind verboten.
Dasselbe Rezept mit hohlem Zentrum:
"pattern": [
"G G",
" A ",
"G G"
]
Das ist eine X-Form: vier Goldblöcke an den Ecken, Apfel in der Mitte.
Beispiel 2: shapeless mit Tags
Oft willst du "irgendein Holz" oder "irgendein Setzling" akzeptieren. Genau dafür gibt es Item-Tags. Lege data/mypack/recipe/wood_dust.json an:
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{"tag": "minecraft:logs"},
{"tag": "minecraft:logs"},
{"tag": "minecraft:logs"}
],
"result": {
"id": "minecraft:gunpowder",
"count": 2
}
}
Drei beliebige Stämme (mangrove, cherry, alle Hölzer bis 1.21) ergeben zwei Schwarzpulver. Bei shapeless ist die Reihenfolge im Grid egal.
In einem Slot lassen sich tag und item per Array kombinieren:
{"ingredients": [
[{"item": "minecraft:diamond"}, {"item": "minecraft:emerald"}],
{"tag": "minecraft:planks"}
]}
Das liest sich als "Diamant oder Smaragd" im ersten Slot plus beliebige Bretter im zweiten.
Eigene Tags landen in data/<ns>/tags/item/my_logs.json:
{
"values": [
"minecraft:oak_log",
"minecraft:spruce_log",
"#minecraft:cherry_logs"
]
}
Das # heißt "anderen Tag einbinden". Saubere Praxis: definiere einen Tag einmal, referenziere ihn in mehreren Rezepten; bei einem neuen Holz änderst du nur die Tag-Datei.
Beispiel 3: Smelting und Varianten
Ofen, Hochofen, Räucherofen und Lagerfeuer teilen die Feldstruktur, der type unterscheidet sich. Lege data/mypack/recipe/smelt_cobble_to_clay.json an:
{
"type": "minecraft:smelting",
"category": "misc",
"group": "clay_smelting",
"ingredient": {"item": "minecraft:cobblestone"},
"result": {"id": "minecraft:clay_ball"},
"experience": 0.1,
"cookingtime": 200
}
cookingtime zählt in Ticks (20 Ticks = 1 Sekunde). Standard für den Ofen ist 200 (10 Sekunden). Hochofen und Räucherofen sind doppelt so schnell, ihre Rezepte stehen meist auf 100. Lagerfeuer ist langsam mit 600.
experience ist ein Float. Der Spieler bekommt ihn beim Abholen.
Damit derselbe Input in allen vier Geräten geht, schreibst du vier Dateien. Sparvariante: derselbe ingredient-Block bleibt, nur type und cookingtime ändern sich.
Beispiel 4: Smithing für Upgrades
Der Schmiedetisch in 1.21 hat drei Slots: template, base, addition. smithing_transform baut ein neues Item, smithing_trim legt nur ein Muster auf Rüstung.
Einfaches Beispiel: das Vanilla-Upgrade auf netherite_pickaxe als Datapack-Override.
{
"type": "minecraft:smithing_transform",
"template": {"item": "minecraft:netherite_upgrade_smithing_template"},
"base": {"item": "minecraft:diamond_pickaxe"},
"addition": {"item": "minecraft:netherite_ingot"},
"result": {"id": "minecraft:netherite_pickaxe"}
}
Für ein "Pseudo-Netherite" aus z. B. copper_block plus diamond_pickaxe tauschst du template oder addition aus.
Trim-Variante:
{
"type": "minecraft:smithing_trim",
"template": {"item": "minecraft:silence_armor_trim_smithing_template"},
"base": {"tag": "minecraft:trimmable_armor"},
"addition": {"tag": "minecraft:trim_materials"},
"pattern": "minecraft:silence"
}
Der tag fasst hier die Rüstungs-Slots zusammen: jeder Vanilla-Helm oder Brustpanzer erfüllt die Bedingung.
Beispiel 5: Stonecutter
{
"type": "minecraft:stonecutting",
"ingredient": {"item": "minecraft:cobblestone"},
"result": {"id": "minecraft:gravel"},
"count": 4
}
Stonecutter arbeitet immer 1 zu N: ein Block rein, N raus. Kein pattern, kein key.
Eigene Namen und Components im Result
Seit 1.20.5 unterstützt das Vanilla-Rezeptformat Item-Components direkt im result-Block. Du kannst dem Spieler also direkt ein vorbenanntes, vorverzaubertes Item mit Lore geben, ohne danach /give auszuführen.
Die Custom-Spitzhacke "Aether Drill" vom Coverbild:
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
"DDD",
" S ",
" S "
],
"key": {
"D": {"item": "minecraft:diamond"},
"S": {"item": "minecraft:stick"}
},
"result": {
"id": "minecraft:diamond_pickaxe",
"count": 1,
"components": {
"minecraft:custom_name": "{\"text\":\"Aether Drill\",\"color\":\"aqua\",\"italic\":false}",
"minecraft:lore": [
"{\"text\":\"Forged in the void\",\"color\":\"gray\",\"italic\":true}"
],
"minecraft:enchantments": {
"levels": {
"minecraft:efficiency": 5,
"minecraft:unbreaking": 3
}
},
"minecraft:rarity": "epic"
}
}
}
Textkomponenten kommen als serialisierte JSON-Strings im Wert. Das ist die Eigenheit des Item-Component-Formats: verschachteltes JSON wandert als String.
Achtung: Components im Result machen die Zutat nicht eindeutig. Auch eine ganz normale Diamantspitzhacke craftet eine "Aether Drill". Wenn nur ein benanntes Eingangs-Item zählen soll, brauchst du components an der Zutat plus die Vanilla-Variante muss deaktiviert werden.
Vanilla-Rezepte deaktivieren
Manchmal willst du ein Standard-Rezept loswerden, um es zu ersetzen. Sauberster Weg: Vanilla-JSON mit einer nicht auslösbaren Form überschreiben.
Datei am Vanilla-Pfad ablegen. Um den Verzauberungstisch unbaubar zu machen:
data/minecraft/recipe/enchanting_table.json:
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {"item": "minecraft:barrier"}
},
"result": {
"id": "minecraft:air"
}
}
Spieler kommen nicht an Barrier-Blöcke, also ist das Rezept tot. Seit 1.21 gibt es zusätzlich /recipe take @a minecraft:enchanting_table. Dieser Befehl entfernt das Rezept aber nur aus dem Buch; der Craft im Grid funktioniert weiter. JSON-Override bleibt der Standardweg.
Alternativ kannst du das zugehörige Advancement entziehen, dann wird das Rezept nicht mehr automatisch freigeschaltet. Bereits freigeschaltete Spieler behalten es trotzdem.
Hot Reload während der Entwicklung
Standard-Workflow:
- JSON speichern.
- Alt-Tab ins Spiel,
/reload. - Bei Fehler steht alles in der Konsole. Logfile öffnen, JSON fixen.
- Wiederholen.
Nützliche Befehle:
/datapack list available: deaktivierte Packs./datapack list enabled: aktive Packs./datapack disable "file/my_recipes": ausschalten./recipe give @p mypack:super_apple: Rezept ins Buch eines Spielers schieben./recipe take @a *: alle Rezepte allen Spielern entziehen (gut zum Test der Freischaltung).
/reload aktualisiert nur Datapack-Inhalt. server.properties, bukkit.yml, Plugins und Server-Kern brauchen einen echten Neustart.
Häufige Fehler
Server meldet "Couldn't load data pack mypack". Drei mögliche Ursachen:
pack_formatpasst nicht zur Server-Version. Tabelle oben prüfen.- JSON ist syntaktisch kaputt. Mit
jqoder Online-Validator prüfen. - Datei- oder Ordnername enthält verbotene Zeichen.
Rezept fehlt im Buch. Minecraft zeigt nur freigeschaltete Rezepte. Die Freischaltung hängt am Advancement. Custom-Rezepte bekommen kein automatisches Advancement; in 1.21 schreibst du es selbst nach data/<ns>/advancement/recipes/<name>.json. Schnellweg: nach /reload einmal /recipe give @a * ausführen.
Craft scheitert obwohl JSON geladen ist. Prüfe:
patternhöchstens drei Reihen mit drei Zeichen.- jeder Schlüssel aus
keytaucht inpatternauf, und jedes Nicht-Leerzeichen auspatternist inkeydefiniert. crafting_shapelesshat höchstens neun Zutaten.- Item-IDs korrekt geschrieben:
minecraft:cobblestone, nichtCobblestone.
Zwei Rezepte mit überlappender Form. Wenn dein shaped Rezept exakt dasselbe Pattern hat wie ein Vanilla-Rezept, gewinnt im Buch das zuletzt geladene. Lösung: Vanilla per JSON-Override deaktivieren.
Rezept läuft im Singleplayer, nicht auf dem Server. Meistens liegt das Pack im falschen World-Ordner. Bukkit/Paper haben eigene Welten für Nether und End (world_nether, world_the_end), aber nur einen datapacks/-Ordner unter der Hauptwelt. Der Vanilla-Server speichert Datapacks ebenfalls unter world/datapacks/. Multiverse-Core kann die Hauptwelt umbenennen: level-name= in server.properties checken.
Kompatibilität und Lebensdauer
Ein 1.21-Datapack lädt nicht auf 1.20.4 und umgekehrt. Das Item-Components-Format hat sich in 1.20.5 stark geändert. Wenn du mehrere Versionen unterstützt, halte zwei Ordner vor: mypack-1.20.4/ mit pack_format: 26 und Legacy-Result (item statt id, ohne components), und mypack-1.21/ mit aktuellem Schema.
Bei jedem Minecraft-Upgrade Mojang-Changelog auf Pfadumbenennungen prüfen. Das passiert selten, aber regelmäßig: 1.21 hat recipes zu recipe umbenannt und alle Altpacks ohne Migration kaputt gemacht.
Lesezeichen wert:
- minecraft.wiki/w/Recipe: vollständige Spezifikation.
- minecraft.wiki/w/Data_pack: Strukturüberblick.
- misode.github.io/recipe: visueller Generator mit Autovervollständigung.
- minecraft.wiki/w/Pack_format: Versionsübersicht.
FAQ
Kann ein Datapack ein neues Item anlegen?
Nein. Datapacks ändern Rezepte, Loot, Tags, Advancements und mcfunction. Neue ItemStack-Typen sind nicht möglich. Dafür brauchst du eine Mod (Fabric, Forge, NeoForge) oder ein Bukkit-Plugin. Workaround: Vanilla-Item mit custom_model_data plus Resource Pack mit alternativem Modell. Aus Sicht des Rezepts bleibt es ein Vanilla-Item.
Brauche ich für jedes Rezept ein Advancement?
Für die Funktion nicht. Ohne Advancement löst das Rezept im Grid trotzdem aus; der Spieler sieht es nur nicht im Buch. Soll es automatisch freigeschaltet werden (z. B. wenn die Zutat ins Inventar gelangt), schreibst du data/<ns>/advancement/recipes/<name>.json mit Trigger inventory_changed und Reward recipe.
Wie verlange ich eine benannte Zutat?
Über components an der Zutat. Beispiel:
{"item": "minecraft:diamond", "components": {"minecraft:custom_name": "{\"text\":\"Magic Diamond\"}"}}
components an Zutaten gibt es seit 1.20.5+. Davor musste man das per Advancement-Predicate lösen.
Lagged das Datapack den Server?
Der Recipe-Lookup selbst läuft nicht jeden Tick, sondern nur beim Craft-Versuch. Tick-Lag aus Datapacks kommt fast immer von schweren execute-Schleifen in mcfunction. Reine Rezepte sind kostenlos.
Kann ich Rezepte nur für bestimmte Spieler freischalten?
Per Advancement plus Tag-Predicate. Spieler bekommen /tag @s add unlocked, das Advancement verlangt diesen Tag. Nur getaggte Spieler sehen das Rezept im Buch. Den Craft selbst kannst du im Grid nicht blocken; wer die Zutaten hat, craftet. Echtes Verbot geht nur mit Scoreboard plus /clear in einer mcfunction-Schleife, was reines Datapack-Design verlässt.
Wie teste ich ohne neu zu joinen?
/reload reicht. Auch wenn du pack.mcmeta änderst oder einen Namespace hinzufügst oder entfernst, genügt /reload. Reconnect ist nur bei Resource-Pack-Änderungen nötig (Texturen, Modelle), nicht bei Datapacks.
Custom-Rezepte über ein Datapack sind einer der Fälle, wo Vanilla reicht und ein Plugin nur eine zusätzliche Abhängigkeit wäre. Das JSON-Format ist stabil, die Doku vollständig, und misode.github.io nimmt 90 Prozent der Fleißarbeit ab. Lege world/datapacks/ an, kippe ein Dutzend eigener Rezepte rein, und der Server bekommt ein eigenes Crafting-Layout ohne eine einzige Zeile Java.
Schützen Sie Ihren Server vor DDoS-Angriffen
Kostenloser Schutz mit 5-Minuten-Einrichtung. 1 TB Traffic inklusive.
Kostenlos testenWeitere Artikel
Mein Minecraft Server wird DDoSed: Was jetzt zu tun ist
Ein Schritt-für-Schritt-Aktionsplan, wenn dein Minecraft Server gerade unter DDoS-Attacke steht. Wie du den Angriffstyp erkennst, was du in den ersten Minuten tun solltest und wie du dich schützt.
Botnet-Angriffe auf Minecraft 2026: Rekorde, Trends und Schutzmaßnahmen
Rekord-DDoS-Angriffe auf Minecraft-Server 2024-2026: 6 Tbps Botnets, 3,15 Milliarden Pakete pro Sekunde.
Bot-Angriffe auf Minecraft Server: Erkennen und Stoppen
Bot-Angriffe gehoeren zu den haeufigsten Problemen von Minecraft Servern. Wir analysieren Bot-Typen, den Unterschied zu DDoS, was in den Logs zu sehen ist und welche Schutzmethoden wirklich funktionieren.