Einführung in das Thema Verhaltenspakete

Bevor du dein erstes Add-On für Minecraft: Bedrock Edition erstellst, musst du ein Paket für deine benutzerdefinierten Inhalte erstellen. Es gibt zwei Arten von Paketen, die du erstellen kannst: Ressourcen- und Verhaltenspakete. Ein Verhaltenspaket ist eine Ordnerstruktur mit Dateien, die das Verhalten von Objekten, Beute-Drops, Spawn-Regeln, Gegenständen, Rezepten und Handelstabellen steuern. In diesem Tutorial wird beschrieben, wie Verhaltenspakete erstellt werden und wie einem Kuh-Objekt im Spiel Verhaltensweisen hinzugefügt werden, um es angriffslustig zu machen.

Bild einer Kuh, die Steve jagt

In diesem Tutorial wird Folgendes beschrieben:

  • Die Möglichkeit zur Änderung des Verhaltens eines Objekts in Minecraft: Bedrock Edition
  • Die Vorgehensweise zum Verknüpfen eines Verhaltenspakets mit einem Ressourcenpaket

Voraussetzungen

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

Erstellen des Verhaltenspakets

Ein Verhaltenspaket enthält Dateien, mit denen Ersteller (wie du!) Spielmechanik-Verhaltensweisen von Objekten innerhalb von Minecraft hinzufügen, entfernen oder verändern können. Die Verhaltensdatei eines Objekts sorgt dafür, dass das Objekt bestimmte Aktionen ausführt, also beispielsweise ein Huhn einem Spieler folgt, der Körner in der Hand hält.

Damit Minecraft deine Verhaltensdateien findet und verwenden kann, musst du die Ordner und Dateien in einer bestimmten Struktur einrichten. In diesem Tutorial erfährst du, wie du diesen Ordner und die Dateistruktur erstellen kannst.

Bild des Ordners und der Dateistruktur eines Verhaltenspakets

Ordner erstellen

In diesem Abschnitt erstellst du einen Ordner namens My_BEHAVIOR_Pack. Du kannst den Ordner auch anders nennen. Den Namen dieses Ordners kannst du beliebig wählen, doch die Namen der anderen Ordner müssen genau so lauten, wie in diesem Tutorial angegeben, damit Minecraft weiß, wo es suchen soll.

  1. Öffne den Ordner com.mojang.
  2. Öffne den Ordner development_behavior_packs.
  3. Erstelle innerhalb des Ordners „development_behavior_packs“ einen neuen Ordner und nenne diesen My_BEHAVIOR_Pack.
  4. Öffne den Ordner My_BEHAVIOR_Pack. Bild des Ordners My_BEHAVIOR_Pack im com.mojang-Ordner „development_behavior_packs“

Paketlistendatei erstellen

Um ein Verhaltenspaket in Minecraft laden zu können, musst du eine Paketlistendatei erstellen. Die Paketlistendatei für das Verhaltenspaket ähnelt der Datei, die für das Ressourcenpaket erstellt wurde, enthält jedoch zwei zusätzliche Abschnitte.

  • modules: Definiert das Paket, damit Minecraft weiß, wie es auf die Welt angewendet werden soll. Verhaltenspakete verwenden den Typ data.
  • dependencies: Erstellt eine Verknüpfung zwischen Verhaltenspaketen und Ressourcenpaketen, um eigens erstellte Texturen und visuelle Elemente zu Minecraft hinzuzufügen.
  1. Erstelle ein neues Dokument in deinem Ordner My_BEHAVIOR_Pack und nenne es manifest.json.
    1. Die Dateierweiterung muss von .txt in .json geändert werden. Wenn im Explorer-Fenster keine Dateierweiterungen angezeigt werden, kannst du die Dateinamenerweiterungen auf der Registerkarte „Ansicht“ aktivieren. Abbildung der Datei manifest.json im Ordner My_BEHAVIOR_Pack
  2. Doppelklicke auf die Datei manifest.json, um sie in einem Texteditor zu öffnen.
  3. Kopiere den folgenden Code und füge ihn in deine Datei ein.
{
  "format_version": 2,
  "header": {
    "description": "My attack cow behavior pack Add-On!",
    "name": "My Behavior Pack",
    "uuid":"",
    "version": [1, 0, 0],
    "min_engine_version": [1, 16, 0]
  },
  "modules":
    [
      {
        "description": "My First Add-On!",
          "type": "data",
          "uuid": "",
          "version": [1, 0, 0]
      }
    ],
  "dependencies": [
    {
     "uuid":"UUID from the header section of manifest.json in My_RESOURCE_Pack",
      "version":[1,0,0]
    }
 ]
}

UUIDs eingeben

Ähnlich wie bei der Paketlistendatei des Ressourcenpakets musst du zwei verschiedene UUIDs für die Kopfzeilen- und Modulabschnitte deiner Paketlistendatei generieren. UUIDs erhältst du von einem Online-Generator wie https://www.uuidgenerator.net/.

Bild des Startseitenbildschirms von UUIDGenerator.net mit einer generierten benutzerdefinierten UUID

  1. Kopiere eine UUID und füge sie in den Kopfzeilenabschnitt ein. Damit die UUID korrekt gelesen werden kann, muss sie zwischen den Anführungszeichen ("") in das Feld "uuid" eingefügt werden.
  2. Aktualisiere die Webseite, um eine neue UUID zur Verwendung im Modulabschnitt zu generieren.
  3. Kopiere die neue UUID und füge sie im Modulabschnitt zwischen den Anführungszeichen in das Feld "uuid" ein.

Abhängigkeit erstellen

In der Datei manifest.json des Verhaltenspakets gibt es einen dritten Abschnitt namens „dependencies“ (Abhängigkeiten). Dieser Abschnitt wird verwendet, um eine Verknüpfung zwischen einem Ressourcenpaket und einem Verhaltenspaket herzustellen. Diese Verknüpfung wird erstellt, wenn die UUID im Kopfzeilenabschnitt der Datei manifest.json des Ressourcenpakets mit der UUID im Abschnitt „dependencies“ der Datei manifest.json des Verhaltenspakets identisch ist. Um ein Verhaltenspaket zu verwenden, benötigst du kein Ressourcenpaket, und um ein Ressourcenpaket zu verwenden, benötigst du kein Verhaltenspaket. Wenn du beide Pakete hast, kannst du diese Lösung nutzen, um beide miteinander zu verknüpfen. Wenn du dann ein Verhaltenspaket in eine Welt lädst, wird das verknüpfte Ressourcenpaket automatisch geladen und aktiviert.

Abbildung der UUID der Kopfzeile der Datei manifest.json des Ressourcenpakets, dupliziert im Abschnitt „dependencies“ des Verhaltenspakets.

  1. Öffne die Datei manifest.json im Ordner My_RESOURCE_Pack innerhalb des Ordners development_resource_packs.
  2. Kopiere die UUID aus dem Abschnitt header (Kopfzeile) der Datei manifest.json des Ressourcenpakets.
  3. Wechsle zur Datei manifest.json im Ordner *My_BEHAVIOR_Pack innerhalb des Ordners development_behavior_packs.
  4. Füge die UUID in das Feld „uuid“ im Abschnitt „dependencies“ (Abhängigkeiten) ein. Vergewissere dich, dass die Angaben in Anführungszeichen exakt übereinstimmen.
  5. Speichere die Datei manifest.json des Verhaltenspakets.

Abbildung der UUID der Kopfzeile der Datei manifest.json des Ressourcenpakets, dupliziert im Abschnitt „dependencies“ des Verhaltenspakets.

Ordner „Entities“ (Objekte) erstellen und Kuh hinzufügen

Das Verhalten jedes Objekts wird in der zugehörigen JSON-Datei definiert, die Teil des Codes für die Ausführung von Minecraft ist. Du wirst eine neue Verhaltensdatei für eine Kuh erstellen, die Minecraft anstelle der gewöhnlichen „vanilla“-Datei verwenden wird.

  1. Erstelle im Ordner My_BEHAVIOR_Pack einen Ordner und nenne diesen entities (Objekte).
  2. Erstelle eine Textdatei im Ordner entities und nenne diese cow.json.
  3. Kopiere den folgenden Code und füge ihn in deine Datei cow.json ein. Wenn du die Datei gespeichert hast, kannst du loslegen!

Hinweis

Dies ist die gesamte bearbeitete Datei cow.json. Sie ist groß, denn Kühe haben viel zu tun!

{
    "format_version": "1.16.0",
    "minecraft:entity": {
        "description": {
            "identifier": "minecraft:cow",
            "is_spawnable": true,
            "is_summonable": true,
            "is_experimental": false
        },
        "component_groups": {
            "minecraft:cow_baby": {
                "minecraft:is_baby": {},
                "minecraft:scale": {
                    "value": 0.5
                },
                "minecraft:ageable": {
                    "duration": 1200,
                    "feed_items": "wheat",
                    "grow_up": {
                        "event": "minecraft:ageable_grow_up",
                        "target": "self"
                    }
                },
                "minecraft:behavior.follow_parent": {
                    "priority": 6,
                    "speed_multiplier": 1.1
                }
            },
            "minecraft:cow_adult": {
                "minecraft:experience_reward": {
                    "on_bred": "Math.Random(1,7)",
                    "on_death": "query.last_hit_by_player ? Math.Random(1,3) : 0"
                },
                "minecraft:loot": {
                    "table": "loot_tables/entities/cow.json"
                },
                "minecraft:behavior.breed": {
                    "priority": 3,
                    "speed_multiplier": 1.0
                },
                "minecraft:breedable": {
                    "require_tame": false,
                    "breed_items": "wheat",
                    "breeds_with": {
                        "mate_type": "minecraft:cow",
                        "baby_type": "minecraft:cow",
                        "breed_event": {
                            "event": "minecraft:entity_born",
                            "target": "baby"
                        }
                    }
                },
                "minecraft:interact": {
                    "interactions": [
                        {
                            "on_interact": {
                                "filters": {
                                    "all_of": [
                                        {
                                            "test": "is_family",
                                            "subject": "other",
                                            "value": "player"
                                        },
                                        {
                                            "test": "has_equipment",
                                            "domain": "hand",
                                            "subject": "other",
                                            "value": "bucket:0"
                                        }
                                    ]
                                }
                            },
                            "use_item": true,
                            "transform_to_item": "bucket:1",
                            "play_sounds": "milk",
                            "interact_text": "action.interact.milk"
                        }
                    ]
                }
            }
        },
        "components": {
            "minecraft:is_hidden_when_invisible": {},
            "minecraft:type_family": {
                "family": [
                    "cow",
                    "mob"
                ]
            },
            "minecraft:breathable": {
                "total_supply": 15,
                "suffocate_time": 0
            },
            "minecraft:navigation.walk": {
                "can_path_over_water": true,
                "avoid_water": true,
                "avoid_damage_blocks": true
            },
            "minecraft:movement.basic": {},
            "minecraft:jump.static": {},
            "minecraft:can_climb": {},
            "minecraft:collision_box": {
                "width": 0.9,
                "height": 1.3
            },
            "minecraft:nameable": {},
            "minecraft:health": {
                "value": 10,
                "max": 10
            },
            "minecraft:hurt_on_condition": {
                "damage_conditions": [
                    {
                        "filters": {
                            "test": "in_lava",
                            "subject": "self",
                            "operator": "==",
                            "value": true
                        },
                        "cause": "lava",
                        "damage_per_tick": 4
                    }
                ]
            },
            "minecraft:movement": {
                "value": 0.25
            },
            "minecraft:despawn": {
                "despawn_from_distance": {}
            },
            "minecraft:behavior.float": {
                "priority": 0
            },
            "minecraft:behavior.panic": {
                "priority": 1,
                "speed_multiplier": 1.25
            },
            "minecraft:behavior.mount_pathing": {
                "priority": 2,
                "speed_multiplier": 1.5,
                "target_dist": 0.0,
                "track_target": true
            },
            "minecraft:behavior.breed": {
                "priority": 3,
                "speed_multiplier": 1.0
            },
            "minecraft:behavior.tempt": {
                "priority": 4,
                "speed_multiplier": 1.25,
                "items": [
                    "wheat"
                ]
            },
            "minecraft:behavior.follow_parent": {
                "priority": 5,
                "speed_multiplier": 1.1
            },
            "minecraft:behavior.random_stroll": {
                "priority": 6,
                "speed_multiplier": 0.8
            },
            "minecraft:behavior.look_at_player": {
                "priority": 7,
                "look_distance": 6.0,
                "probability": 0.02
            },
            "minecraft:behavior.random_look_around": {
                "priority": 9
            },
            "minecraft:leashable": {
                "soft_distance": 4.0,
                "hard_distance": 6.0,
                "max_distance": 10.0
            },
            "minecraft:balloonable": {},
            "minecraft:rideable": {
                "seat_count": 1,
                "family_types": [
                    "zombie"
                ],
                "seats": {
                    "position": [
                        0.0,
                        1.105,
                        0.0
                    ]
                }
            },
            "minecraft:physics": {},
            "minecraft:pushable": {
                "is_pushable": true,
                "is_pushable_by_piston": true
            },
            "minecraft:conditional_bandwidth_optimization": {},
            "minecraft:behavior.nearest_attackable_target": {
                "priority": 2,
                "must_see": true,
                "reselect_targets": true,
                "within_radius": 25.0,
                "entity_types": [
                    {
                        "filters": {
                            "test": "is_family",
                            "subject": "other",
                            "value": "player"
                        },
                        "max_dist": 32
                    }
                ]
            },
            "minecraft:behavior.melee_attack": {
                "priority": 3
            },
            "minecraft:attack": {
                "damage": 3
            }
        },
        "events": {
            "minecraft:entity_spawned": {
                "randomize": [
                    {
                        "weight": 95,
                        "trigger": "minecraft:spawn_adult"
                    },
                    {
                        "weight": 5,
                        "add": {
                            "component_groups": [
                                "minecraft:cow_baby"
                            ]
                        }
                    }
                ]
            },
            "minecraft:entity_born": {
                "add": {
                    "component_groups": [
                        "minecraft:cow_baby"
                    ]
                }
            },
            "minecraft:entity_transformed": {
                "remove": {},
                "add": {
                    "component_groups": [
                        "minecraft:cow_adult"
                    ]
                }
            },
            "minecraft:ageable_grow_up": {
                "remove": {
                    "component_groups": [
                        "minecraft:cow_baby"
                    ]
                },
                "add": {
                    "component_groups": [
                        "minecraft:cow_adult"
                    ]
                }
            },
            "minecraft:spawn_adult": {
                "add": {
                    "component_groups": [
                        "minecraft:cow_adult"
                    ]
                }
            }
        }
    }
}

Testen des Pakets

Jetzt, da das Verhaltenspaket sowohl eine Paketlistendatei als auch ein Kuh-Objekt enthält, ist es an der Zeit, Minecraft zu starten und dein neues Add-On zu testen. Wie schon im Tutorial für das Ressourcenpaket erläutert, funktioniert das Paket-Stacking auch für Verhaltenspakete. Dies bedeutet, dass beim Laden von Inhalten zuerst Vanilla-Inhalte geladen werden, gefolgt von eventuellen Add-Ons. Da alle Kühe über die Verhaltensdatei cow.json gesteuert werden, werden alle Kühe, die in deiner Welt spawnen, das neue Verhalten aufweisen.

  1. Starte Minecraft und wähle Spielen aus.
  2. Wähle Neue Welt erstellen aus.
  3. Scrolle unter Einstellungen nach unten zum Abschnitt Add-Ons.
  4. Klicke auf Verhaltenspakete, um alle verfügbaren Pakete anzuzeigen.
  5. Klicke auf das Dropdown-Menü MY PACKS, um es zu öffnen.
  6. Wähle My BEHAVIOR Pack aus und klicke auf Aktivieren, um das Verhaltenspaket der Welt hinzuzufügen.
  7. Klicke auf Erstellen, um deine Welt zu erstellen.
  8. Finde eine Kuh.

Problembehandlung

Probleme mit Verhaltenspaketen? Die Behandlung von Problemen ist ein normaler Bestandteil jedes Entwicklungsprozesses. Hier einige Anhaltspunkte für die Problembehandlung eines Verhaltenspakets.

Verhaltenspaket wird nicht in Minecraft angezeigt

Wenn dein Ressourcenpaket nicht im Add-Ons-Abschnitt aufgeführt ist, ist mit deiner Datei manifest.json etwas schiefgelaufen. Fangen wir dort an.

  • Sind im Kopfzeilen- und Modulabschnitt von manifest.json zwei verschiedene UUIDs angegeben? Weitere Informationen findest du im Abschnitt UUID.
  • Hast du Dateierweiterungen und -pfade aktiviert? manifest.json Vielleicht heißt die Datei nicht nur manifest.json. Wenn im Explorer-Fenster keine Dateierweiterungen angezeigt werden, kannst du Dateinamenerweiterungen auf der Registerkarte Ansicht aktivieren.
  • Prüfe die geschweiften und eckigen JSON-Klammern. Möglicherweise sind JSON-Linting-Tools hilfreich.
  • Bei einem Problem mit einem aktiven Verhaltenspaket wird unter „Verhaltenspakete“ im Add-Ons-Abschnitt ein rotes Ausrufezeichen angezeigt.
    • Das Verhaltenspaket enthält weitere Informationen. Möglicherweise wird auf eine fehlende Abhängigkeit hingewiesen oder eine Diagnose anderer Probleme durchgeführt.

Die Verhaltenspakete werden angezeigt, die Inhalte funktionieren nicht

  • Prüfe, ob sich der Ordner entities an der richtigen Stelle befindet und sein Name richtig geschrieben ist. Prüfe dann alle Schreibweisen von cow.
  • Vergewissere dich, dass die UUID im Abschnitt dependencies einem vorhandenen Ressourcenpaket entspricht (und dass dieses auch funktioniert).
  • Verschiebe dein Paket an höhere Position als andere Pakete, um sicherzugehen, dass dein Verhaltenspaket zuerst geladen wird. Paket-Stacking kann dazu führen, dass deine Änderungen nicht angezeigt werden.

Wie geht es weiter?

Nachdem du nun ein Verhaltenspaket in Aktion erlebt hast, kannst du dich eingehender mit der Verhaltensweise und den weiteren Verwendungsmöglichkeiten von Verhaltenspaketen befassen.

Wenn du dir Beispiele für unveränderte Ressourcen- und Verhaltensdateien ansehen möchtest, schau dir das Minecraft Vanilla-Ressourcenpaket und das Vanilla-Verhaltenspaket an.