Share via


Beute- und Handelstabellenfunktionen

Beute- und Handelstabellen nutzen einen ähnlichen Funktionssatz. Die meisten Funktionen sind für beide gedacht, manche funktionieren jedoch nur innerhalb eines bestimmten Typs. Es gibt allgemeine Einschränkungen für Beute- und Handelstabellen. Beispielsweise ist es nicht möglich, can_place_on oder can_destroy über Beute- oder Handelstabellen einem Gegenstand hinzuzufügen. Nachfolgend findest du die verschiedenen verfügbaren Funktionen und Beispiele für ihre Verwendung.

In diesem Tutorial wird Folgendes beschrieben:

  • Eine Vielzahl von Beute- und Handelstabellenfunktionen und wie diese einen Gegenstand ändern können

Voraussetzungen

Es wird empfohlen, vor Beginn dieses Tutorials Folgendes abzuschließen:

Verzaubern

Diese verschiedenen Verzauberungsfunktionen ermöglichen dir, einzigartige Verzauberungsparameter einzustellen.

enchant_book_for_trading (nur Handelstabelle)

Diese Funktion verzaubert ein Buch mit dem Algorithmus für das Verzaubern von Gegenständen, die von Dorfbewohnern verkauft werden. Sie weist vier Parameter auf: base_cost, base_random_cost, per_level_random_cost und per_level_cost.

                {
                    "item": "minecraft:book",
                    "quantity": 1,
                    "functions": [
                        {
                            "function": "enchant_book_for_trading",
                            "base_cost": 2,
                            "base_random_cost": 5,
                            "per_level_random_cost": 10,
                            "per_level_cost": 3
                        }
                    ]
                }

Derzeit wirkt sich die Definition dieser Parameter nicht auf das Ergebnis der Verzauberung aus. Die oben genannten Standardwerte sind derzeit hartcodiert. Künftig wirst du diese Werte verändern können, um einzugrenzen, welche Verzauberungen und Verzauberungsstufen diese Funktion zur Folge hat.

enchant_random_gear

Verzaubert einen Gegenstand mit demselben Algorithmus, der verwendet wird, wenn Ausrüstung verzaubert wird, mit der Vanilla-Kreaturen gespawnt werden. Benötigt einen chance-Modifikator, um den Algorithmus zu manipulieren. Beachte, dass ein chance-Modifikator von 1,0 keine einhundertprozentige Wahrscheinlichkeit bedeutet, dass die Ausrüstung verzaubert wird. Die Wahrscheinlichkeit ändert sich vielmehr auf der Grundlage des Schwierigkeitsgrads. In den Schwierigkeitsgraden „Friedlich“ und „Einfach“ liegt die Wahrscheinlichkeit immer bei 0%. Im Schwierigkeitsgrad „Schwer“ bedeutet eine chance von 1,0 100%, die Wahrscheinlichkeit liegt jedoch bei etwa zwei Dritteln des Werts im Schwierigkeitsgrad „Normal“.

                {
                    "type": "item",
                    "name": "minecraft:chainmail_boots",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_random_gear",
                        "chance": 0.25
                      }
                    ]
                }

Die Erhöhung von chance auf einen Wert über 1,0 kann dabei helfen, die Abnahme der Wahrscheinlichkeit im Schwierigkeitsgrad „Normal“ zu umgehen. Wenn du beispielsweise chance auf 2,0 einstellst, wird der Gegenstand sowohl im Schwierigkeitsgrad „Normal“ als auch im Schwierigkeitsgrad „Schwer“ immer verzaubert.

enchant_randomly

Generiert eine zufällige Verzauberung, die mit dem Gegenstand kompatibel ist. Unterstützt den optionalen boolean-Wert (true/false) für den Schatz, damit Schatzverzauberungen ein- und ausgeschaltet werden können. Schatzverzauberungen sind Verzauberungen, die nicht durch den Zaubertisch bewirkt werden können, einschließlich Eisläufer, Reparatur, Seelenflitzer, Fluch der Bindung und Fluch des Verschwindens.

                {
                    "type": "item",
                    "name": "minecraft:leather_helmet",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_randomly",
                        "treasure": true
                      }
                    ]
                }

enchant_with_levels

Wendet eine Verzauberung an wie wenn sie durch einen Zaubertisch ausgelöst worden wäre. Dabei wird eine minimale und eine maximale EP-Stufe verwendet, festgelegt durch den Parameter levels. Der boolesche treasure-Wert (true/false) ermöglicht die Verwendung von reinen Schatzverzauberungen. Schatzverzauberungen sind Verzauberungen, die nicht durch den Zaubertisch bewirkt werden können, einschließlich Eisläufer, Reparatur, Seelenflitzer, Fluch der Bindung und Fluch des Verschwindens.

                {
                    "type": "item",
                    "name": "minecraft:diamond_sword",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_with_levels",
                        "treasure": true,
                        "levels": {
                          "min": 20,
                          "max": 39
                        }
                      }
                    ]
                }

specific_enchants

Mit dieser Funktion kannst du eine Liste bestimmter Verzauberungen für einen Gegenstand festlegen. Weiterhin kannst du damit Verzauberungen auf Gegenstände anwenden, die normalerweise im Spiel nicht verzaubert werden könnten.

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "specific_enchants",
                          "enchants": [
                             "knockback",
                             "fire_aspect"
                          ]
                       }
                    ]
                 }

Du kannst die Verzauberungen auch als Objekte definieren, um gezielt eine Verzauberungsstufe festzulegen. Maximale Verzauberungsstufen sind hartcodiert und können nicht überschrieben werden.

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "specific_enchants",
                          "enchants": [
                             {
                                "id": "knockback",
                                "level": 1
                             },
                             {
                                "id": "unbreaking",
                                "level": 3
                             }
                          ]
                       }
                    ]
                }

Ändern von Gegenständen

Mit den folgenden Funktionen kannst du die Ergebnisse auf unterschiedliche Weise ändern. Beispielsweise kannst du festlegen, wie viele Exemplare eines Gegenstands zurückgegeben werden, den Datenwert oder sogar den Namen und den Hintergrund eines Gegenstands festlegen.

looting_enchant (nur Beutetabelle)

Mit dieser Funktion kannst du die Anzahl der zurückgegebenen Gegenstände ändern, wenn ein Objekt von einem Gegenstand mit der Plünderungsverzauberung getötet wird. Aus diesem Grund funktioniert sie nur mit Beutetabellen, und auch dann nur, wenn die Beutetabelle durch den Tod eines Objekts aufgerufen wird.

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "looting_enchant",
                            "count": {
                                "min": 0,
                                "max": 1
                            }
                        }
                    ]
                }

random_block_state

Damit kannst du den Block-Zustand des entstandenen Gegenstands randomisieren. Beispielsweise kann der folgende Beispielcode Stein (0), Granit (1), polierten Granit (2), Diorit (3), polierten Diorit (4) oder Andesit (5) fallen lassen.

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "random_block_state",
                          "block_state": "stone_type",
                          "values": {
                            "min": 0,
                            "max": 5
                          }
                        }
                      ]
                }

random_aux_value

Ähnlich wie random_block_state ermöglicht diese Funktion die Auswahl eines zufälligen Hilfswerts für einen Gegenstand. Das folgende Beispiel führt zu einem zufällig gefärbten Farbstoff.

                {
                    "type": "item",
                    "name": "minecraft:dye",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "random_aux_value",
                          "values": {
                            "min": 0,
                            "max": 15
                          }
                        }
                    ]
                }

set_actor_id

Diese Funktion ist nur mit einem Spawn-Ei möglich und wird verwendet, um die Objekt-ID dieses Spawn-Eis festzulegen.

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_actor_id",
                            "id": "compass:cool_entity"
                        }
                    ]
                }

Du kannst auch die Objekt-ID des Objekts übernehmen, die dieser Beutetabelle zugeordnet ist (d.h. ein Kaninchen dazu bringen, ein Kaninchen-Spawn-Ei fallen zu lassen), indem du die id weglässt.

                {
                    "type": "item",
                    "name": "minecraft:spawn_egg",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_actor_id"
                        }
                    ]
                }

Denke daran, dass bei Verwendung von set_actor_id auf die Beutetabelle einer Truhe ohne den id-Wert das Spawn-Ei vom Objekt generiert wird, das die Truhe öffnet (Spieler). Ein Spieler-Spawn-Ei spawnt einen „Spieler“, der lediglich herumsteht und MoLang-Fehler auslöst (da versucht wird, die Verhaltensdatei des Spielers und die Controller des Spielers zu verwenden). Wenn du eine Truhe aufbrichst, in der eine Beutetabelle enthalten ist, die eine von set_actor_id übernommene ID verwendet, wird ein Standard-Spawn-Ei ausgegeben, das nichts spawnt.

set_banner_details

Diese Funktion funktioniert nur für Banner und unterstützt derzeit nur den Banner-type 1. Der Banner-type 1 führt zu einem Illager-Banner.

                {
                    "type": "item",
                    "name": "minecraft:banner",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_banner_details",
                            "type": 1
                        }
                    ]
                }

set_book_contents

Mit dieser Funktion kannst du den Inhalt eines Buchs festlegen.

                {
                    "type": "item",
                    "name": "minecraft:written_book",
                    "functions": [
                        {
                            "function": "set_book_contents",
                            "author": "Steve",
                            "title": "Creator Woes",
                            "pages": [
                                "Once upon a time there were some marketplace partners that had to edit items using NBT. And it made them sad.",
                                "Then the Bedrock team added the ability to customize items from JSON and everyone rejoiced."
                            ]
                        }
                    ]
                }

Du kannst mit rawtext auch den Inhalt des Buchs lokalisieren. Denke bei der Verwendung von rawtext daran, für Sonderzeichen wie " und \ stets ein Escape-Zeichen (\) zu verwenden.

                {
                    "type": "item",
                    "name": "minecraft:written_book",
                    "functions": [
                        {
                            "function": "set_book_contents",
                            "author": "Steve",
                            "title": "Creator Woes",
                            "pages": [
                                "{\"rawtext\":[ {\"translate\":\"custom.book.page.1\"}]}",
                                "{\"rawtext\":[ {\"translate\":\"custom.book.page.2\"}]}"
                            ]
                        }
                    ]
                }

Denke daran, dass du rawtext nur für den Inhalt des Buchs (pages) zum Zeitpunkt des Schreibens verwenden kannst – rawtext funktioniert nicht für die Tags author und title.

set_count

Legt die Anzahl der zurückgegebenen Gegenstände fest, indem der Wert count angegeben wird. Dies könnte wie in diesem Beispiel eine exakte Zahl sein:

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "set_count",
                          "count": 5
                        }
                    ]
                }

Es kann sich aber auch um einen Minimum/Maximum-Bereich handeln:

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "set_count",
                          "count": {
                            "min": 1,
                            "max": 6
                          }
                        }
                    ]
                }

set_damage

Legt den Prozentsatz der verbleibenden Haltbarkeit für Gegenstände mit Haltbarkeit fest, indem der Wert damage angegeben wird. 1,0 bedeutet 100% verbleibende Haltbarkeit (unbeschädigt), während 0,0 bedeutet, dass die Haltbarkeit abgelaufen ist.

Du kannst hier einen genauen Wert angeben– wie im folgenden Beispiel, in dem wir für den Gegenstand eine verbleibende Haltbarkeit von 50% festgelegt haben.

                {
                    "type": "item",
                    "name": "minecraft:iron_leggings",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_damage",
                        "damage": 0.5
                      }
                    ]
                }

Du kannst aber auch einen Minimum- und einen Maximum-Wert angeben, zwischen denen das Spiel eine zufällige Auswahl trifft. Im nächsten Beispiel wird die verbleibende Haltbarkeit auf einen beliebigen Wert zwischen 30% und 90% gesetzt.

                {
                    "type": "item",
                    "name": "minecraft:iron_leggings",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_damage",
                        "damage": {
                          "min": 0.3,
                          "max": 0.9
                        }
                      }
                    ]
                }

set_data

Legt den Datenwert eines Blocks oder Gegenstands auf eine exakte ID fest. Das folgende Beispiel führt zu einem polierten Dioritblock.

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "functions": [
                        {
                            "function": "set_data",
                            "data": 4
                        }
                    ]
                }

set_data_from_color_index

Übernimmt den Datenwert des entstandenen Gegenstands vom Farbindex des zugeordneten Objekts. Ein Beispiel im Spiel wäre ein rosafarbenes Schaf, das bei seinem Tod rosafarbene Wolle fallen lässt. Wenn für das zugeordnete Objekt kein Farbindex angegeben ist (oder wenn es in der Beutetabelle einer Truhe verwendet wird), führt dies immer zum Datenwert0.

                {
                    "type": "item",
                    "name": "minecraft:wool",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_data_from_color_index"
                        }
                    ]
                }

set_lore

Mit dieser Funktion kannst du den Hintergrund eines Gegenstands festlegen. Jede Zeile innerhalb des Hintergrund-Objekts stellt eine einzelne Textzeile dar. Derzeit gibt es keine Unterstützung für rawtext.

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_lore",
                            "lore": [
                                "Big Stick has been handed down",
                                "for generations from King to Prince",
                                "until it went missing four score ago"
                            ]
                       }
                    ]
                 }

set_name

Mit dieser Funktion kannst du den Namen eines Gegenstands festlegen. Derzeit gibt es keine Unterstützung für rawtext.

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_name",
                            "name": "Big Stick"
                        }
                    ]
                 }

Verschiedenes

Nachfolgend findest du Funktionen, die keiner Kategorie angehören.

fill_container

Mit dieser Funktion kannst du die Beutetabelle für eine Truhe definieren. Wenn der Gegenstand generiert wird und der Spieler ihn platziert, ist er voll mit dem Inhalt, der in der referenzierten Beutetabelle festgelegt ist.

Beutetabellen für Truhen werden zum Zeitpunkt des Öffnens oder Aufbrechens generiert. Man könnte es als „Schrödingers Kiste“ bezeichnen. Der Inhalt der Truhe wird erst dann festgelegt, wenn du hineinsiehst.

                  {
                      "type": "item",
                      "name": "minecraft:chest",
                      "functions": [
                          {
                              "function": "fill_container",
                              "loot_table": "loot_tables/chests/simple_dungeon.json"
                          }
                      ]
                  }

Du solltest immer set_name verwenden, um die Truhe zu benennen, wenn du fill_container verwendest. Wenn du dies nicht tust, sieht die entstandene Truhe im Inventar des Spielers genau wie eine normale leere Truhe aus.

exploration_map

Verwandelt eine normale Karte in eine Schatzkarte, die den Standort eines versteckten Schatzes markiert. Der Wert destination definiert, welche Art von Schatzkarte das Ergebnis ist.

                  {
                      "type": "item",
                      "name": "minecraft:map",
                      "weight": 1,
                      "functions": [
                          {
                              "function": "exploration_map",
                              "destination": "buriedtreasure"
                          }
                      ]
                  }

Zurzeit kannst du aus den folgenden Zielen wählen:

Ziel
Vergrabener Schatz
Endsiedlung
Festung
Villa
Mine
Monument
Plünderer-Außenposten
Ruinen
Schiffswrack
Stronghold
Tempel
Dorf

furnace_smelt (nur Beutetabelle)

Wenn der Gegenstand, der zurückgegeben werden soll, ein Schmelz-Handwerksrezept hat und die Beutetabelle durch ein mit Feuer getötetes Objekt ausgelöst wird (Verbrennung, Feuerzeug, Lava usw.), ist das Ergebnis die geschmolzene Version des Gegenstands. Aufgrund dieser Anforderungen funktioniert diese Funktion nicht im Dorfhandel oder mit Truhen. Diese Funktion kann nur in Verbindung mit dem Verhalten minecraft:loot verwendet werden.

Im folgenden Beispiel wird ein Steinblock fallen gelassen, wenn das Objekt durch Feuer getötet wird, und Bruchstein, wenn dies nicht der Fall ist.

                {
                    "type": "item",
                    "name": "minecraft:cobblestone",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "furnace_smelt"
                        }
                    ]
                }