← Zurück zum Blog

Tech

Minecraft: Einen Dorfbewohner in seinem Bereich festhalten

Wer in Minecraft eine Welt nicht nur baut, sondern auch mit Leben füllen will, kennt das Problem: Kaum hat man einem Dorfbewohner einen schönen Marktstand, eine Schmiede oder eine gemütliche Ecke eingerichtet, latscht er wieder quer über die halbe Karte davon. Dorfbewohner sind von Haus aus rastlos — sie wandern, folgen Arbeitsplätzen und lassen sich von nichts und niemandem an einem Ort halten.

Mit ein paar Commands und einem Commandblock kann man einen Dorfbewohner aber quasi „festtackern": Er darf sich weiterhin in einem kleinen Radius bewegen (damit es natürlich aussieht), wird aber automatisch zurückgesetzt, sobald er den Bereich verlässt. In diesem Beitrag gehe ich Schritt für Schritt durch die nötigen Befehle und erkläre, was jeder einzelne davon macht.

Voraussetzung: Du brauchst den Kreativ-Modus (bzw. aktivierte Cheats), damit du Commands eingeben und Commandblöcke platzieren darfst. Alle Beispiele stammen aus der Java Edition; die Koordinaten und der Name („Mathilda") sind nur Platzhalter — die passt du an deine Welt an.

Kurz zum Konzept

Die Idee besteht aus drei Bausteinen:

  1. Den Dorfbewohner mit einem Erkennungs-Merkmal spawnen — einem Namen und einem Tag, damit wir ihn später eindeutig ansprechen können.
  2. Einen Commandblock besorgen und an einer versteckten Stelle platzieren.
  3. Im Commandblock einen Befehl hinterlegen, der laufend prüft: „Ist der Dorfbewohner noch in seinem Bereich? Falls nein → zurück auf die Startposition teleportieren."

Gehen wir die drei Schritte der Reihe nach durch.

Schritt 1: Den Dorfbewohner mit Tag spawnen

/summon villager -3 -60 8 {CustomName:'Mathilda',Tags:["bereich_mathilda"],PersistenceRequired:1b}

Was passiert hier im Einzelnen?

  • /summon villager — beschwört (spawnt) einen Dorfbewohner.
  • -3 -60 8 — die Koordinaten x y z, an denen er erscheinen soll. Das ist gleichzeitig seine spätere „Heimatposition". Tipp: Mit F3 blendest du dein Koordinaten-Overlay ein, dann kannst du die Werte für deine Welt ablesen.
  • {...} — der sogenannte NBT-Datenblock. Damit gibst du dem Dorfbewohner zusätzliche Eigenschaften mit auf den Weg:
    • CustomName:'Mathilda' — gibt ihm einen sichtbaren Namen. Praktisch, um ihn im Spiel wiederzuerkennen.
    • Tags:["bereich_mathilda"] — hängt ihm ein unsichtbares Tag an. Ein Tag ist wie ein Aufkleber, über den wir die Kreatur später gezielt ansprechen können — ohne dass wir aus Versehen alle Dorfbewohner der Welt erwischen. Den Namen des Tags kannst du frei wählen.
    • PersistenceRequired:1b — verhindert, dass der Dorfbewohner irgendwann von selbst despawnt (verschwindet). Das b steht für einen Byte-Wert (1b = wahr).

Nach diesem Befehl steht Mathilda an Position -3 / -60 / 8 und trägt ihr Tag.

Schritt 2: Einen Commandblock ins Inventar holen

Commandblöcke bekommt man nicht im normalen Kreativ-Inventar — man muss sie sich per Befehl geben:

/give @p minecraft:repeating_command_block

Aufgeschlüsselt:

  • /give — gibt einem Spieler einen Gegenstand ins Inventar.
  • @p — ein Ziel-Selektor und steht für „den nächsten Spieler" (p wie player). Da du selbst tippst, bist das in der Regel du. Weitere gängige Selektoren: @s (dich selbst / „self"), @e (alle Entities), @a (alle Spieler).
  • minecraft:repeating_command_block — der Gegenstand, den es geben soll. Wir holen uns direkt einen wiederholenden Commandblock (Repeat). Der prüft von sich aus in jedem Tick (20-mal pro Sekunde) — genau das, was wir für die laufende Bereichs-Kontrolle brauchen.

Anschließend platzierst du den Commandblock irgendwo in der Welt — am besten versteckt, z. B. unter dem Boden oder hinter einer Wand.

Schritt 3: Den Commandblock einrichten

Rechtsklick auf den platzierten Commandblock öffnet seine Oberfläche. Dort trägst du folgenden Befehl ein:

/execute as @e[type=villager,tag=bereich_mathilda] at @s unless entity @s[x=-3,y=-60,z=8,distance=..3] run tp @s -3 -60 8

Das ist der Kern der ganzen Sache. Wir lesen ihn von links nach rechts:

  • /execute as @e[type=villager,tag=bereich_mathilda] — führe den folgenden Befehl im Namen jeder Entity aus, die

    • type=villager — ein Dorfbewohner ist und
    • tag=bereich_mathilda — unser Tag trägt.

    Durch diese Kombination erwischen wir genau Mathilda (bzw. alle mit diesem Tag) und keinen anderen Dorfbewohner.

  • at @s — führe den Befehl an der Position der gerade gewählten Entity aus (@s = „self", also der Dorfbewohner selbst). Das ist wichtig, damit die folgende Abstandsprüfung vom Standort des Dorfbewohners aus rechnet.

  • unless entity @s[x=-3,y=-60,z=8,distance=..3] — die eigentliche Bedingung: „Es sei denn, der Dorfbewohner befindet sich näher als 3 Blöcke an der Position -3 / -60 / 8."

    • distance=..3 bedeutet „Abstand von 0 bis 3 Blöcken" (die zwei Punkte sind ein Bereich: ..3 = höchstens 3).
    • unless heißt: Der nachfolgende Befehl wird nur dann ausgeführt, wenn diese Bedingung nicht zutrifft — also wenn der Dorfbewohner weiter als 3 Blöcke weg ist.
  • run tp @s -3 -60 8 — führe schließlich diesen Befehl aus: tp (teleport) teleportiert @s (den Dorfbewohner) zurück auf -3 / -60 / 8.

In einem Satz: „Nimm jeden Dorfbewohner mit dem Tag bereich_mathilda; wenn er weiter als 3 Blöcke von seiner Heimatposition entfernt ist, hol ihn dorthin zurück."

Auf Dauerbetrieb stellen

Da wir einen wiederholenden Commandblock gesetzt haben, feuert er bereits in jedem Tick (20-mal pro Sekunde). Standardmäßig braucht er dafür aber noch ein Redstone-Signal. Damit die Prüfung wirklich dauerhaft und ohne Redstone läuft, stellst du in der Commandblock-Oberfläche noch eine Sache um:

  • „Benötigt Redstone" → „Immer aktiv" (Always Active) — so läuft der Block von selbst, ohne dass du irgendwo Redstone anlegen musst. („Bedingt/Unbedingt" bleibt auf „Unbedingt".)

Ohne diese Einstellung passiert nichts — der Commandblock muss auf „Immer aktiv" stehen.

Ab jetzt darf Mathilda in ihrem 3-Blöcke-Radius herumtrödeln, wird aber sofort zurückgeholt, sobald sie ausbüxen will.

Anpassen für deine Welt

  • Anderer Dorfbewohner: Vergib beim Spawnen einen anderen Namen und ein anderes Tag (z. B. Tags:["bereich_bruno"]) und verwende dieses Tag dann konsequent im Commandblock. So kannst du beliebig viele Dorfbewohner unabhängig voneinander „festtackern" — je einen Commandblock pro Bereich.
  • Größerer Bewegungsradius: Erhöhe den Wert bei distance=..3 (z. B. ..6 für 6 Blöcke).
  • Andere Position: Passe die Koordinaten an drei Stellen gleich an — beim summon, in der unless-Bedingung und im tp-Befehl.

Damit bleibt dein Dorf endlich so, wie du es dir vorgestellt hast — und niemand wandert mehr aus.