Pools würfeln unabhängig
Eine Loot-Tabelle enthält eine Liste von Pools, und jeder wird getrennt ausgewertet. Das ist das Nützlichste, was man darüber wissen kann, denn genau so drückt man „immer eine Waffe, dazu zwei oder drei zufällige Vorräte, plus eine seltene Chance auf etwas Besonderes“ aus — drei Pools, nicht eine raffinierte Liste.
Innerhalb eines Pools gibt rolls an, wie oft gezogen wird. Das kann eine feste Zahl oder ein Bereich sein:
"rolls": 1
"rolls": { "type": "minecraft:uniform", "min": 2, "max": 4 }
Jeder Roll wählt genau einen Eintrag aus der Liste dieses Pools. Vier Rolls auf einem Pool mit drei Items können durchaus viermal dasselbe Item liefern — Rolls sind unabhängig, es ist kein Blatt, das ohne Zurücklegen ausgeteilt wird.
Gewicht ist ein Anteil, kein Prozentwert
Hier gehen die meisten Tabellen schief. Gewicht ist keine Chance von 100. Es ist ein Anteil am Gesamtgewicht dieses Pools.
iron_ingot Gewicht 10
gold_ingot Gewicht 5
diamond Gewicht 1
Die Summe ist 16, also kommt Eisen in 10/16 der Fälle — etwa 62 %, nicht 10 %. Füge einen vierten Eintrag mit Gewicht 84 hinzu, und Eisen fällt auf 10/100, ohne dass du seine Zahl angefasst hast. Jedes Gewicht in einem Pool ist relativ zu seinen Nachbarn: Ein zusätzlicher Eintrag bepreist den ganzen Rest des Pools still neu.
Wer einen echten Prozentwert will, braucht einen anderen Mechanismus: eine random_chance-Bedingung am Eintrag.
"conditions": [
{ "condition": "minecraft:random_chance", "chance": 0.15 }
]
Das sind echte 15 %, unabhängig vom Gewicht ausgewertet. Beide greifen so ineinander, dass man es bewusst entscheiden sollte: Der Eintrag muss zuerst die gewichtete Auswahl gewinnen, und erst danach findet der 15-%-Wurf statt.
Die Anzahl ist ein eigener Schritt nach der Auswahl
Zu bestimmen, welches Item fällt, und zu bestimmen, wie viele, sind verschiedene Vorgänge. Die Stapelgröße kommt aus einer Funktion, die nach der Auswahl des Eintrags angewendet wird:
{
"type": "minecraft:item",
"name": "minecraft:iron_ingot",
"weight": 10,
"functions": [
{
"function": "minecraft:set_count",
"count": { "type": "minecraft:uniform", "min": 1, "max": 4 }
}
]
}
Ohne set_count bekommst du genau eines. Das Objekt unter count ist ein Number Provider — dieselbe Struktur, die auch rolls verwendet. Einmal verstanden, deckt es beides ab.
Der Tabellentyp ist ein Vertrag, kein Etikett
Der type am Anfang der Datei erklärt, in welchem Kontext die Tabelle gewürfelt wird, und das Spiel nimmt dich beim Wort. Eine minecraft:chest-Tabelle hat weder Töter noch Opfer, deshalb ist eine Bedingung, die nach dem gestorbenen Wesen fragt, dort nicht bloß nutzlos — sie macht die Tabelle für diesen Kontext ungültig.
| Typ | Wird gewürfelt, wenn |
|---|---|
minecraft:chest | Eine Strukturtruhe generiert wird oder /loot genutzt wird |
minecraft:entity | Ein Mob stirbt |
minecraft:block | Ein Block abgebaut wird |
minecraft:fishing | Etwas an der Angel hängt |
minecraft:gift | Ein Dorfbewohner oder eine Katze ein Geschenk bringt |
Verhält sich eine Tabelle im Test richtig, löst aber in der Welt nie aus, prüfe, ob ihr Typ dazu passt, wie sie tatsächlich ausgelöst wird.
Testen, ohne eine Truhe zu suchen
Du musst kein echtes Dungeon finden, um deine Chancen zu sehen. Der Befehl /loot würfelt eine vorhandene Tabelle auf Zuruf:
/loot give @s loot harbor:harbor_dungeon
Der Klarheit halber, weil der Name in die Irre führt: /loot liest eine Tabelle, er erstellt keine. Es gibt keinen Befehl, der eine Loot-Tabelle schreibt — die Datei muss zuerst in einem Datapack existieren. Wer noch keines gebaut hat: die Anleitung Datapacks statt Befehle erklärt, warum, und der Datapack-Generator legt den Ordner an.
Führe ihn zwanzigmal hintereinander aus, dann zeigt sich die Verteilung schnell. Das ist auch der schnellste Weg, ein falsch gesetztes Gewicht zu bemerken.
Wenn die Tabelle schlicht nie gelesen wird
Zwei Fehler sehen von innerhalb des Spiels gleich aus und haben mit deinem JSON nichts zu tun.
Der erste ist der Ordner. Minecraft 1.21 hat loot_tables in loot_table umbenannt, Singular. Auf 1.21+ wird eine Datei im alten Ordner nie geladen, und nichts warnt dich — das Pack gilt weiterhin als aktiviert.
Der zweite ist die ID. Die Datei unter data/harbor/loot_table/harbor_dungeon.json wird als harbor:harbor_dungeon angesprochen. Der Namensraum kommt aus dem Ordner unter data, nicht aus dem Dateinamen, und eine Abweichung erzeugt hier einen „unknown loot table“-Fehler statt Stille — was im Vergleich zum ersten Fall geradezu gnädig ist.
Wie es weitergeht
Der Loot-Tabellen-Generator baut diese Strukturen mit bereits korrekt geformten Number Providern und zeigt den Pfad, unter den die Datei gehört. Für den Container drumherum siehe den Datapack-Generator; damit die herausfallenden Items interessanter werden, deckt der Custom-Item-Builder Namen, Lore und versteckte IDs ab.