Technik Wiki
Registrieren
Advertisement
Gruppe: Grid Klebriger Kolben
Anlagen

Grid Roter Sand blass mit Mechaniken

Grid Redstone blass mit Redstone
                Hier:
Grid Befehlsblock mit Befehlen
Verfügbar in:
Wiki Redstone-Welt Redstone-Welt

Ein Labyrinth besitzt nur einen einzigen Weg, während der Irrgarten Verzweigungen und Sackgassen aufweist. Man kann sie als Teil von Minispielen oder für Abenteuerwelten verwenden. Das Generieren eines Labyrinthes wird durch das Formen eines Weges entlang einer Schnecke gebaut und in allen vier Richtungen werden Wege umgeleitet. Vielschichtiger könnte man ein Labyrinth mit Hilfe einer Hilbert-Kurve generieren. Irrgärten werden generiert, in dem von der Anfangsposition aus, eine zufällige von vier Richtungen ausgewählt wird und ein Weg in diese Richtung gebaut wird, dies wird solange wiederholt, bis kein Bereich mehr frei für einen Weg wäre, dann wird der Weg wieder zurück gelaufen, falls sich beim Zurücklaufen noch weitere unberührte Bereiche bemerkbar machen, wird dort eine Abzweigung errichtet und der Generierungsvorgang geht dort weiter. Erst wenn der Prozess wieder an der Anfangsposition angekommen ist, ist der Irrgarten vollständig generiert.

Labyrinthgenerator[]

Labyrinth- und Irrgartengenerator (Befehle) Bild 1.1 Labyrinth- und Irrgartengenerator (Befehle) Bild 1.2 Labyrinth- und Irrgartengenerator (Befehle) Bild 1.3 Labyrinth- und Irrgartengenerator (Befehle) Bild 1.4

Wenn man den Hebel des Labyrinthgenerators zum Einschalten umgelegt hat, erhält man über den Chat die Möglichkeit die Größe des Labyrinths einzustellen. Von 3*3 bis 32*32 Blöcke groß kann ein Labyrinth generiert werden. Man erhält einen Rüstungsständer den man platzieren kann um das Labyrinth zu generieren. Der Standort der Platzierung bildet das Zentrum des Labyrinths, von dort aus bahnt sich der Rüstungsständer wie der Weg eines Schneckenhauses seinen Weg. An allen vier Richtungen wird jeweils der Schnecken-Weg umgeleitet, sodass der Spieler beim Durchlaufen, nicht sich ständig wiederholende gerade Gänge entlanglaufen muss.

Einschalten
  • Befehl 1.1 Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
Wiederholen
  • Befehl 1.2 Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt.
Ausschalten
  • Befehl 1.3 Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.

Befehlsblöcke mit Befehlen:


Datenpaket


Variante 1: Start-Funktion
Die Start-Funktion erstellt ein Punkte-Ziel und Variablen für das Einstellen der Größe des Labyrinths. Spieler bekommen einen Rüstungsständer und diese besitzen eine Beschreibung wie man mit ihnen arbeiten muss.

Editor Icon labyrinth-_und_irrgartengenerator:v1start.mcfunction
# Ein Punkte-Ziel wird angelegt, dass als Auslöser arbeitet um die Optionen der Nachrichten anzuzeigen.
scoreboard objectives add PZLaUIr.1Gross trigger ["Labyrinth- und Irrgartengenerator.1: ",{"text":"Größe des Labyrinths","bold":true}]

# Zwei Variablen werden gesetzt.
scoreboard players set VarLaUIr.1Quadrat PZLaUIr.1Gross 4
scoreboard players set VarLaUIr.1Groesse PZLaUIr.1Gross 16

# Allen Spielern in Umkreis der Befehlsquelle von bis zu 15 Metern wird ein Rüstungsständer mit dem man Labyrinthe generieren lassen kann gegeben.
give @a[distance=..15] minecraft:armor_stand{EigLaUIr.1Alle:true,EigLaUIr.1Ausloeser:true,display:{Name:'{"text":"Labyrinth erstellen","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Irrgarten"','"zu erstellen."']},EntityTag:{Small:true,Invisible:true,NoGravity:true,Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Entfernen","EtiLaUIr.1Generieren","EtiLaUIr.1Erstellen"],ArmorItems:[{},{},{},{id:"minecraft:command_block",Count:1b} ] } }

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion ruft von dem Spieler die Auslöser-Funktion auf, wenn dieser den Rüstungsständer ausgewählt hat. Wird der Rüstungsständer zum Generieren platziert werden die entsprechenden Funktionen aufgerufen.

Editor Icon labyrinth-_und_irrgartengenerator:v1zyklus.mcfunction
# Wenn der Spieler den Rüstungsständer ausgewählt hat, erhält er ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigLaUIr.1Ausloeser:true} } }] add EtiLaUIr.1Ausgewaehlt

# Wenn der Spieler den Rüstungsständer gerade in diesem Moment ausgewählt hat, wird sein Wert gesetzt, damit er die Auslöser-Funktion im gleichen Moment auslöst.
scoreboard players set @a[tag=EtiLaUIr.1Ausgewaehlt,tag=!EtiLaUIr.1Auswahl] PZLaUIr.1Gross -99

# Wenn der Spieler den Rüstungsständer ausgewählt hat und irgend einen Wert außer null besitzt wird die Auslöser-Funktion geladen.
execute as @a[tag=EtiLaUIr.1Ausgewaehlt] unless entity @s[scores={PZLaUIr.1Gross=0}] run function labyrinth-_und_irrgartengenerator:v1ausloeser

# Das Auswahl-Etikett wird vergeben oder entfernt, je nach dem ob der Spieler den Rüstungsständer gerade aus- oder abgewählt hat.
tag @a[tag=EtiLaUIr.1Ausgewaehlt,tag=!EtiLaUIr.1Auswahl] add EtiLaUIr.1Auswahl
tag @a[tag=!EtiLaUIr.1Ausgewaehlt,tag=EtiLaUIr.1Auswahl] remove EtiLaUIr.1Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiLaUIr.1Ausgewaehlt] remove EtiLaUIr.1Ausgewaehlt

# Wenn der Rüstungsständer platziert wurde, wird die Erstellen-Funktion aufgerufen um weitere Einstellungen vorzunehmen.
execute as @e[type=minecraft:armor_stand,tag=EtiLaUIr.1Erstellen] at @s run function labyrinth-_und_irrgartengenerator:v1erstellen

# Der platzierte Rüstungsständer ruft von sich aus die Generieren-Funktion auf, um die Wände des Labyrinths zu generieren.
execute as @e[type=minecraft:armor_stand,tag=EtiLaUIr.1Generieren] at @s run function labyrinth-_und_irrgartengenerator:v1generieren

Variante 1: Auslöser-Funktion
Die Auslöser-Funktion gibt dem Spieler per Chat-Nachricht die Möglichkeit die Größe des Labyrinths einzustellen.

Editor Icon labyrinth-_und_irrgartengenerator:v1ausloeser.mcfunction
# Wenn der Spieler den Auslöser der tellraw-Nachricht aktiviert hat, wird die Quadrat-Variable um eins erhöht oder verringert.
execute if entity @s[scores={PZLaUIr.1Gross=1}] if score VarLaUIr.1Quadrat PZLaUIr.1Gross matches ..31 run scoreboard players add VarLaUIr.1Quadrat PZLaUIr.1Gross 1
execute if entity @s[scores={PZLaUIr.1Gross=-1}] if score VarLaUIr.1Quadrat PZLaUIr.1Gross matches 4.. run scoreboard players remove VarLaUIr.1Quadrat PZLaUIr.1Gross 1

# Jedes mal wenn eine Schaltfläche angeklickt wurde, wird die Größen-Variablen mit dem Wert des Quadrates ausgestattet.
scoreboard players operation VarLaUIr.1Groesse PZLaUIr.1Gross = VarLaUIr.1Quadrat PZLaUIr.1Gross
scoreboard players operation VarLaUIr.1Groesse PZLaUIr.1Gross *= VarLaUIr.1Groesse PZLaUIr.1Gross

# Der Spieler erhält eine tellraw-Nachricht. In dieser kann man die Gräße des Labyrinths zwischen 3 und 32 einstellen.
tellraw @s ["Labyrinth- und Irrgartengenerator.1:\n",{"text":"quadrat = ","bold":true},{"text":"quadrat + 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für das Quadrat + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.1Gross set 1"},"bold":true},"\n",{"text":"quadrat = ","bold":true},{"text":"quadrat - 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für die Quadrat - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.1Gross set -1"},"bold":true},"\n",{"text":"quadrat == ","bold":true},{"score":{"name":"VarLaUIr.1Quadrat","objective":"PZLaUIr.1Gross"},"color":"dark_purple","bold":true},"\n",{"text":"groesse (","bold":true},{"text":"=quadrat * quadrat","color":"gray","bold":true},{"text":") == ","bold":true},{"score":{"name":"VarLaUIr.1Groesse","objective":"PZLaUIr.1Gross"},"color":"dark_purple","bold":true}]

# Wenn der Spieler den Auslöser aktiviert hat, erhält er erneut die Berechtigung des Auslösers und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZLaUIr.1Gross
scoreboard players set @s PZLaUIr.1Gross 0

Variante 1: Erstellen-Funktion
Die Erstellen-Funktion wird vom platzierten Rüstungsständer aufgerufen und stellt alles soweit ein und platziert vier Wand-Markierer die später die Wände umleiten lassen, sodass das Labyrinth etwas verschlungenere Wege besitzt.

Editor Icon labyrinth-_und_irrgartengenerator:v1erstellen.mcfunction
# Der Wert der Größen-Variable wird auf den Generieren-Rüstungsständer übertragen.
scoreboard players operation @s PZLaUIr.1Gross = VarLaUIr.1Groesse PZLaUIr.1Gross

# Vier Wand-Markierer in bestimmten Abständen zum Generieren-Rüstungsständer werden erzeugt.
summon minecraft:marker ^ ^ ^6 {Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Entfernen","EtiLaUIr.1Wand"]}
summon minecraft:marker ^ ^ ^-4 {Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Entfernen","EtiLaUIr.1Wand"]}
summon minecraft:marker ^-6 ^ ^ {Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Entfernen","EtiLaUIr.1Wand","EtiLaUIr.1Waende"]}
summon minecraft:marker ^8 ^ ^ {Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Entfernen","EtiLaUIr.1Wand","EtiLaUIr.1Waende"]}

# Alle vier Wand-Markierer schauen in das Zentrum des Labyrinths, in dem sie zum Generieren-Rüstungsständer rotiert werden.
execute as @e[type=minecraft:marker,tag=EtiLaUIr.1Wand] positioned as @s facing entity @e[type=minecraft:armor_stand,tag=EtiLaUIr.1Erstellen,sort=nearest,limit=1] feet run teleport @s ~ ~ ~ ~ 0

# Die Wand-Markierer werden genau in die vier Himmelsrichtungen ausgerichtet.
execute as @e[distance=..10,type=minecraft:marker,tag=EtiLaUIr.1Wand,y_rotation=135..-135] at @s run teleport @s ~ ~ ~ 180 0
execute as @e[distance=..10,type=minecraft:marker,tag=EtiLaUIr.1Wand,y_rotation=-135..-45] at @s run teleport @s ~ ~ ~ -90 0
execute as @e[distance=..10,type=minecraft:marker,tag=EtiLaUIr.1Wand,y_rotation=-45..45] at @s run teleport @s ~ ~ ~ 0 0
execute as @e[distance=..10,type=minecraft:marker,tag=EtiLaUIr.1Wand,y_rotation=45..135] at @s run teleport @s ~ ~ ~ 90 0

# Das Erstellen-Etikett wird entfernt.
tag @s remove EtiLaUIr.1Erstellen

Variante 1: Generieren-Funktion
Die Generieren-Funktion wird vom platzierten Rüstungsständer aufgerufen und lässt Schritt für Schritt den Weg des Labyrinths entlang eines Schneckenhauses entstehen. Dabei ständig geprüft ob das Labyrinth fertig generiert ist.

Editor Icon labyrinth-_und_irrgartengenerator:v1generieren.mcfunction
# Die Querwand-Funktion wird vom Wand-Markierer aufgerufen, wenn der Generieren-Rüstungsständer an ihm fünf Blöcke an ihm vorbeigezogen ist und hinter ihm Quarzblöcke an entsprechender Stelle sich befinden, sodass man sicher sein kann, dass dort bereits der Teil des Labyrinths ist.
execute positioned ^ ^ ^-5 as @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.1Wand] at @s positioned ^5 ^ ^ positioned ^-5 ^ ^ if block ~ ~ ~ minecraft:white_concrete if block ~ ~1 ~ minecraft:air if block ^ ^ ^-2 minecraft:white_concrete if block ^ ^1 ^-2 minecraft:air if block ^1 ^ ^-1 minecraft:quartz_block if block ^1 ^1 ^-1 minecraft:quartz_block if block ^-1 ^ ^-1 minecraft:quartz_block if block ^-1 ^1 ^-1 minecraft:quartz_block run function labyrinth-_und_irrgartengenerator:v1generieren_waende

# Der Labyrinth-Schacht wird erzeugt, in dem weiße Beton- und Quarzblöcke entsprechend platziert werden.
fill ~-1 ~ ~-1 ~1 ~ ~1 minecraft:white_concrete replace
fill ^1 ^ ^-3 ^1 ^3 ^1 minecraft:quartz_block replace
fill ^ ^1 ^-2 ^ ^3 ^ minecraft:air replace minecraft:quartz_block
fill ^-1 ^ ^-1 ^-1 ^3 ^1 minecraft:quartz_block replace

# Der Generieren-Rüstungsständer wird zwei Meter in Blickrichtung nach vorne teleportiert, falls jedoch rechts von ihm in Blickrichtung keine Labyrinth-Wand sich befindet, wird er um 90° gedreht und entsprechend teleportiert, sodass er beim nächsten Schritt um die Ecke läuft.
teleport @s ^ ^ ^2
execute unless block ^-2 ^ ^ minecraft:quartz_block unless block ^-2 ^ ^ minecraft:white_concrete run teleport @s ^-2 ^ ^ ~90 ~

# Dem Rüstungsständer wird der Wert um eins verringert.
scoreboard players remove @s PZLaUIr.1Gross 1

# Ein Markierer wird erzeugt, damit das Labyrinth wieder entfernt werden kann, falls man den Generator wieder ausschaltet.
summon minecraft:marker ~1 ~ ~1 {Tags:["EtiLaUIr.1Alle","EtiLaUIr.1Gang"]}

# Wenn das Labyrinth fertig generiert ist, wird noch ein Quarzblock am Eingang platziert.
execute if entity @s[scores={PZLaUIr.1Gross=..0}] run setblock ^ ^3 ^1 minecraft:quartz_block replace

# Wenn der Größen-Wert des Generieren-Rüstungsständers auf null gelandet ist, wird den Spielern in einem Umkreis von 100 Metern die Nachricht ausgegeben und alle Rüstungsständer und Markierer die für das Generieren verantwortlich sind, werden entfernt.
execute if entity @s[scores={PZLaUIr.1Gross=..0}] run tellraw @a[distance=..100] ["Labyrinth- und Irrgartengenerator.1:\n",{"text":"Labyrinth wurde generiert","color":"gray","bold":true}]
execute if entity @s[scores={PZLaUIr.1Gross=..0}] run kill @e[distance=..100,tag=EtiLaUIr.1Entfernen,sort=nearest,limit=5]

Variante 1: Generieren-Wände-Funktion
Die Generieren-Wände-Funktion lässt von den Wand-Markierern aus die Wege des Labyrinths in andere Richtungen verlaufen und bewegt die Markierer zum nächsten Arbeitsort weiter.

Editor Icon labyrinth-_und_irrgartengenerator:v1generieren_waende.mcfunction
# Besitzt der Markierer nicht das Etikett, wird nur eine Zwischenwand eingefügt.
execute if entity @s[tag=!EtiLaUIr.1Waende] run fill ^1 ^1 ^ ^1 ^3 ^-2 minecraft:air replace
execute if entity @s[tag=!EtiLaUIr.1Waende] run fill ^-1 ^1 ^ ^-1 ^3 ^-2 minecraft:air replace
execute if entity @s[tag=!EtiLaUIr.1Waende] run fill ^-1 ^ ^ ^1 ^ ^-2 minecraft:white_concrete replace
execute if entity @s[tag=!EtiLaUIr.1Waende] run fill ^ ^ ^ ^ ^3 ^-2 minecraft:quartz_block replace

# Besitzt er dagegen das Etikett, werden zwei Zwischenwände eingebaut.
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^2 ^1 ^ ^2 ^3 ^-2 minecraft:air replace
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^ ^1 ^2 ^ ^3 ^-2 minecraft:air replace
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^-2 ^1 ^2 ^-2 ^3 ^ minecraft:air replace

execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^2 ^ ^ ^2 ^ ^-2 minecraft:white_concrete replace
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^ ^ ^2 ^ ^ ^-2 minecraft:white_concrete replace
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^-2 ^ ^2 ^-2 ^ ^ minecraft:white_concrete replace

execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^1 ^ ^ ^1 ^3 ^-2 minecraft:quartz_block replace
execute if entity @s[tag=EtiLaUIr.1Waende] run fill ^-1 ^ ^2 ^-1 ^3 ^ minecraft:quartz_block replace

# Der Markierer wird sechs Meter von seiner Blickrichtung nach hinten teleportiert.
teleport @s ^ ^ ^-6 ~ ~

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel sowie alle Rüstungsständer inklusive das Labyrinth wieder.

Editor Icon labyrinth-_und_irrgartengenerator:v1stopp.mcfunction
# Das Punkte-Ziel wird entfernt.
scoreboard objectives remove PZLaUIr.1Gross

# Alle Rüstungsständer mit der entsprechenden Eigenschaft werden aus den Inventaren entfernt.
clear @a minecraft:armor_stand{EigLaUIr.1Alle:true}

# Das Etikett wird entfernt.
tag @a[tag=EtiLaUIr.1Auswahl] remove EtiLaUIr.1Auswahl

# An der Position der Markierer wird Luft platziert, sodass das gesamte Labyrinth entfernt wird.
execute at @e[type=minecraft:marker,tag=EtiLaUIr.1Gang] run fill ~ ~ ~ ~-2 ~3 ~-2 minecraft:air replace

# Die eventuell auf den Boden geworfenen Gegenstände für das Labyrinth werden etikettiert und anschließend werden alle Objekte mit diesem Etikett entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigLaUIr.1Alle:true} } }] add EtiLaUIr.1Alle
kill @e[tag=EtiLaUIr.1Alle]

Irrgartengenerator[]

Labyrinth- und Irrgartengenerator (Befehle) Bild 2.1 Labyrinth- und Irrgartengenerator (Befehle) Bild 2.2 Labyrinth- und Irrgartengenerator (Befehle) Bild 2.3 Labyrinth- und Irrgartengenerator (Befehle) Bild 2.4

Bei diesem Irrgartengenerator legt man einfach den Hebel um und man erhält einen Rüstungsständer zum Generieren und eine Chat-Nachricht zum Einstellen der Breite und Länge des Irrgartens. Man kann frei einstellen welche Grundfläche der Irrgarten besitzen soll. Von 3*3 bis 128*128 sind alle möglichen Werte möglich. Wird der Rüstungsständer platziert, wird zuerst ein Rechteck aus Blöcken erzeugt in dem dann der Generator anfängt einen zufälligen Weg dadurch zu bauen. Abzweigungen und Sackgassen werden zufällig erzeugt und der Boden wird mit Seelaternen ausgeleuchtet und mit weißen Beton ausgekleidet.

Einschalten
  • Befehl 2.1 Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
Wiederholen
  • Befehl 2.2 Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt.
Ausschalten
  • Befehl 2.3 Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.

Befehlsblöcke mit Befehlen:


Datenpaket


Variante 2: Start-Funktion
Die Start-Funktion erstellt ein Punkte-Ziel und Variablen für das Einstellen der Größe des Irrgartens. Ebenfalls wird den Spielern ein Rüstungsständer für das Generieren gegeben.

Editor Icon labyrinth-_und_irrgartengenerator:v2start.mcfunction
# Es wird ein Auslöser-Punkte-Ziel erstellt.
scoreboard objectives add PZLaUIr.2Gross trigger ["Labyrinth- und Irrgartengenerator.2: ",{"text":"Größe des Irrgartens","bold":true}]

# Variablen für Breite und Länge werden festgelegt.
scoreboard players set VarLaUIr.2Breite PZLaUIr.2Gross 4
scoreboard players set VarLaUIr.2Laenge PZLaUIr.2Gross 4

# Alle Spieler im Umkreis von 15 Metern erhalten einen Rüstungsständer mit dem man einen Irrgarten generieren lassen kann.
give @a[distance=..15] minecraft:armor_stand{EigLaUIr.2Alle:true,EigLaUIr.2Ausloeser:true,display:{Name:'{"text":"Irrgarten erstellen","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Irrgarten"','"zu erstellen."']},EntityTag:{Small:true,Invisible:true,NoGravity:true,Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Generieren","EtiLaUIr.2Erstellen"],ArmorItems:[{},{},{},{id:"minecraft:command_block",Count:1b} ] } }

Variante 2: Zyklus-Funktion
Die Zyklus-Funktion ruft für den Spieler die Auslöser-Funktion auf, so fern er den Rüstungsständer ausgewählt hat und ruft für das Generieren des Irrgartens entsprechende Funktionen auf.

Editor Icon labyrinth-_und_irrgartengenerator:v2zyklus.mcfunction
# Wenn der Spieler den Rüstungsständer ausgewählt hat, erhält er ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigLaUIr.2Ausloeser:true} } }] add EtiLaUIr.2Ausgewaehlt

# Wenn der Spieler den Rüstungsständer gerade in diesem Moment ausgewählt hat, wird sein Wert gesetzt, damit er die Auslöser-Funktion im gleichen Moment auslöst.
scoreboard players set @a[tag=EtiLaUIr.2Ausgewaehlt,tag=!EtiLaUIr.2Auswahl] PZLaUIr.2Gross -99

# Wenn der Spieler den Rüstungsständer ausgewählt hat und irgend einen Wert außer null besitzt wird die Auslöser-Funktion geladen.
execute as @a[tag=EtiLaUIr.2Ausgewaehlt] unless entity @s[scores={PZLaUIr.2Gross=0}] run function labyrinth-_und_irrgartengenerator:v2ausloeser

# Das Auswahl-Etikett wird vergeben oder entfernt, je nach dem ob der Spieler den Rüstungsständer gerade aus- oder abgewählt hat.
tag @a[tag=EtiLaUIr.2Ausgewaehlt,tag=!EtiLaUIr.2Auswahl] add EtiLaUIr.2Auswahl
tag @a[tag=!EtiLaUIr.2Ausgewaehlt,tag=EtiLaUIr.2Auswahl] remove EtiLaUIr.2Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiLaUIr.2Ausgewaehlt] remove EtiLaUIr.2Ausgewaehlt

# Wurde der Erstellen-Rüstungsständer paltziert, so wird von seiner zentrierten Position mittig die Erstellen-Funktion aufgerufen.
execute as @e[type=minecraft:armor_stand,tag=EtiLaUIr.2Erstellen] at @s align xz positioned ~0.5 ~ ~0.5 run function labyrinth-_und_irrgartengenerator:v2erstellen

# Der Rüstungsständer ruft von sich aus zentriert mittig die Generieren-Funktion auf.
execute as @e[type=minecraft:armor_stand,tag=EtiLaUIr.2Generieren] at @s align xz positioned ~0.5 ~ ~0.5 run function labyrinth-_und_irrgartengenerator:v2generieren

Variante 2: Auslöser-Funktion
Die Auslöser-Funktion gibt dem Spieler über den Chat die Möglichkeit die Größe des Irrgartens einzustellen.

Editor Icon labyrinth-_und_irrgartengenerator:v2ausloeser.mcfunction
# Wenn der Spieler einen Auslöser-Wert besitzt, wird die Breiten- oder Längen-Variable um eins erhöht oder verringert.
execute if entity @s[scores={PZLaUIr.2Gross=1}] if score VarLaUIr.2Breite PZLaUIr.2Gross matches ..127 run scoreboard players add VarLaUIr.2Breite PZLaUIr.2Gross 1
execute if entity @s[scores={PZLaUIr.2Gross=-1}] if score VarLaUIr.2Breite PZLaUIr.2Gross matches 4.. run scoreboard players remove VarLaUIr.2Breite PZLaUIr.2Gross 1
execute if entity @s[scores={PZLaUIr.2Gross=2}] if score VarLaUIr.2Laenge PZLaUIr.2Gross matches ..127 run scoreboard players add VarLaUIr.2Laenge PZLaUIr.2Gross 1
execute if entity @s[scores={PZLaUIr.2Gross=-2}] if score VarLaUIr.2Laenge PZLaUIr.2Gross matches 4.. run scoreboard players remove VarLaUIr.2Laenge PZLaUIr.2Gross 1

# Dem Spieler wird eine tellraw-Nachricht gesendet. Diese ermöglicht es die Optionen für Breite und Länge des Irrgartens einzustellen.
tellraw @s ["Labyrinth- und Irrgartengenerator.2:\n",{"text":"breite = ","bold":true},{"text":"breite + 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für die Breite + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.2Gross set 1"},"bold":true},"\n",{"text":"breite = ","bold":true},{"text":"breite - 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für die Breite - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.2Gross set -1"},"bold":true},"\n",{"text":"breite == ","bold":true},{"score":{"name":"VarLaUIr.2Breite","objective":"PZLaUIr.2Gross"},"color":"dark_purple","bold":true},"\n",{"text":"laenge = ","bold":true},{"text":"laenge + 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für die Länge + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.2Gross set 2"},"bold":true},"\n",{"text":"laenge = ","bold":true},{"text":"laenge - 1","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für die Länge - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZLaUIr.2Gross set -2"} },"\n",{"text":"laenge == ","bold":true},{"score":{"name":"VarLaUIr.2Laenge","objective":"PZLaUIr.2Gross"},"color":"dark_purple","bold":true}]

# Der Spieler erhält die Berechtigung den Auslöser zu aktivieren und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZLaUIr.2Gross
scoreboard players set @s PZLaUIr.2Gross 0

Variante 2: Erstellen-Funktion
Die Erstellen-Funktion sorgt dafür, dass der platzierte Rüstungsständer ordentlich positioniert wird und die Breiten-Funktion mit eingestellten Variablen Wert aufgerufen werden kann.

Editor Icon labyrinth-_und_irrgartengenerator:v2erstellen.mcfunction
# Der Breiten-Wert wird auf null gesetzt und in der aufgerufenen Breiten-Funktion verwendet.
scoreboard players set VarLaUIr.2BreitePosition PZLaUIr.2Gross 0
function labyrinth-_und_irrgartengenerator:v2erstellen_breite

# Das Etikett wird entfernt.
tag @s remove EtiLaUIr.2Erstellen

# Der Rüstungsständer wird zentriert mittig neu positioniert.
execute align xyz positioned ~0.5 ~ ~0.5 run teleport @s ~-1 ~1 ~-1 0 0

Variante 2: Erstellen-Breiten-Funktion
Die Erstellen-Breiten-Funktion ruft sich selbst versetzt immer wieder auf um von jedem dieser Positionen die Erstellen-Längen-Funktion aufzurufen.

Editor Icon labyrinth-_und_irrgartengenerator:v2erstellen_breite.mcfunction
# Die Breiten-Variable wird um eins erhöht.
scoreboard players add VarLaUIr.2BreitePosition PZLaUIr.2Gross 1

# Die Längen-Variable wird auf null gesetzt und falls die Variable für die eingestellte Länge mindestens den Wert zwei hat, wird die Längen-Funktion aufgerufen. Ebenfalls wird geprüft ob die Breiten-Variable kleiner der eingestellten Breite entspricht und nur dann wird die Breiten-Funktion um zwei Meter versetzt selbst aufgerufen.
scoreboard players set VarLaUIr.2LaengePosition PZLaUIr.2Gross 0
execute if score VarLaUIr.2Laenge PZLaUIr.2Gross matches 2.. run function labyrinth-_und_irrgartengenerator:v2erstellen_laenge
execute if score VarLaUIr.2BreitePosition PZLaUIr.2Gross < VarLaUIr.2Breite PZLaUIr.2Gross positioned ~-2 ~ ~ run function labyrinth-_und_irrgartengenerator:v2erstellen_breite

Variante 2: Erstellen-Längen-Funktion
Die Erstellen-Längen-Funktion erledigt die eigentliche Arbeit. Es wird ein Quarzbereich platziert und sie ruft sich selbst versetzt wieder auf, dass sorgt dafür, dass ein Rechteck gewünschter Größe generiert wird.

Editor Icon labyrinth-_und_irrgartengenerator:v2erstellen_laenge.mcfunction
# Die Längen-Variable wird um eins erhöht.
scoreboard players add VarLaUIr.2LaengePosition PZLaUIr.2Gross 1

# Ein Quarz-Bereich wird platziert.
fill ~ ~ ~ ~-2 ~3 ~-2 minecraft:quartz_block replace

# Ein Markierer wird erzeugt, damit der Irrgarten beim Ausschalten komplett entfernt werden kann.
summon minecraft:marker ~ ~ ~ {Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Gang"]}

# Wenn diese Funktion sich am Anfang oder am Ende des Irrgartens befindet, wird ein Loch in die Wand gesetzt.
execute if score VarLaUIr.2LaengePosition PZLaUIr.2Gross = VarLaUIr.2Laenge PZLaUIr.2Gross if score VarLaUIr.2BreitePosition PZLaUIr.2Gross = VarLaUIr.2Breite PZLaUIr.2Gross run fill ~-2 ~1 ~-1 ~-2 ~2 ~-1 minecraft:air replace
execute if score VarLaUIr.2LaengePosition PZLaUIr.2Gross matches 1 if score VarLaUIr.2BreitePosition PZLaUIr.2Gross matches 1 run fill ~ ~1 ~-1 ~-1 ~2 ~-1 minecraft:air replace

# Nur wenn der Wert der Längen-Variable kleiner als der eingestellten Längen-Wert ist, wird die Längen-Funktion selbst um zwei Meter versetzt aufgerufen.
execute if score VarLaUIr.2LaengePosition PZLaUIr.2Gross < VarLaUIr.2Laenge PZLaUIr.2Gross positioned ~ ~ ~-2 run function labyrinth-_und_irrgartengenerator:v2erstellen_laenge

Variante 2: Generieren-Funktion
Die Generieren-Funktion sorgt dafür, dass ein zufälliger Weg durch das Rechteck generiert wird. Gegebenfalls wird die Generieren-Abzweig-Funktion aufgerufen, falls der aktuelle Weg eine Sackgasse gebildet hat, dann wird der Weg solange zurückgegangen bis wieder eine Abzweigung möglich ist, um erneut einen Weg zu generieren.

Editor Icon labyrinth-_und_irrgartengenerator:v2generieren.mcfunction
# Von der aktuellen Position aus, können bis zu drei Markierer für jede Himmelsrichtung erzeugt, wenn sich in der Richtung ein Quarzblock befindet.
execute if block ~2 ~-1 ~ minecraft:quartz_block run summon minecraft:marker ~2 ~ ~ {Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Richtung"]}
execute if block ~-2 ~-1 ~ minecraft:quartz_block run summon minecraft:marker ~-2 ~ ~ {Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Richtung"]}
execute if block ~ ~-1 ~2 minecraft:quartz_block run summon minecraft:marker ~ ~ ~2 {Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Richtung"]}
execute if block ~ ~-1 ~-2 minecraft:quartz_block run summon minecraft:marker ~ ~ ~-2 {Tags:["EtiLaUIr.2Alle","EtiLaUIr.2Richtung"]}

# Der Rüstungsständer wird zu einen zufälligen der vier Markierer gedreht.
teleport @s ~ ~ ~ facing entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung,sort=random,limit=1]

# Je nach dem zu welchen Markierer der Rüstungsständer schaut, wird er entsprechend in diese Richtung einen Befehlsblock platzieren, der entsprechend ausgerichtet ist.
execute if block ~ ~-1 ~ minecraft:quartz_block run tag @s add EtiLaUIr.2Weg
execute if entity @s[tag=EtiLaUIr.2Weg,y_rotation=135..-135] run setblock ~ ~ ~ minecraft:command_block[facing=north] replace
execute if entity @s[tag=EtiLaUIr.2Weg,y_rotation=-135..-45] run setblock ~ ~ ~ minecraft:command_block[facing=east] replace
execute if entity @s[tag=EtiLaUIr.2Weg,y_rotation=-45..45] run setblock ~ ~ ~ minecraft:command_block[facing=south] replace
execute if entity @s[tag=EtiLaUIr.2Weg,y_rotation=45..135] run setblock ~ ~ ~ minecraft:command_block[facing=west] replace
tag @s[tag=EtiLaUIr.2Weg] remove EtiLaUIr.2Weg

# Eine Seelaterne wird im Boden platziert und es wird der obere Block durch Luft ersetzt. Ebenfalls wird ein weißer Betonblock auf dem Boden des Ganges gesetzt, wenn dort ein Gang bereits hinführt.
setblock ~ ~-1 ~ minecraft:sea_lantern replace
fill ~ ~1 ~ ~ ~2 ~ minecraft:air replace
execute if block ^ ^ ^-2 minecraft:command_block run setblock ^ ^-1 ^-1 minecraft:white_concrete replace

# Falls mindestens ein Markierer für eine zufällige Richtung existiert, wird der Rüstungsständer in Blickrichtung nach vorne teleportiert und in Blickrichtung wird Luft platziert.
execute if entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung,sort=nearest,limit=1] at @s run teleport @s ^ ^ ^2
execute if entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung,sort=nearest,limit=1] at @s run fill ^ ^ ^ ^ ^2 ^-1 minecraft:air

# Falls es keinen Markierer für die Richtung gibt und auch kein Befehlsblock an der aktuellen Stelle sich befindet, muss der Irrgarten fertig sein und dementsprechend wird eine Nachricht im Umkreis von 100 Metern ausgegeben. Ebenfalls wird der Rüstungsständer entfernt.
execute unless entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung] unless block ~ ~ ~ minecraft:command_block run tellraw @a[distance=..100] ["Labyrinth- und Irrgartengenerator.2:\n",{"text":"Irrgarten wurde generiert","color":"gray","bold":true}]
execute unless entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung] unless block ~ ~ ~ minecraft:command_block run kill @s

# Falls der Rüstungsständer nicht entfernt wurde, muss es einen Rückweg geben der durch die Befehlsblöcke markiert ist, dann wird die Abzweig-Funktion aufgerufen.
execute unless entity @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung] at @s run function labyrinth-_und_irrgartengenerator:v2generieren_abzweig

# Alle möglichen drei Richtungs-Markierer werden gelöscht.
kill @e[distance=..3,type=minecraft:marker,tag=EtiLaUIr.2Richtung,sort=nearest,limit=3]

Variante 2: Generieren-Abzweig-Funktion
Die Generieren-Abzweig-Funktion lässt den Rüstungsständer wieder zurück laufen, damit er aus der Sackgasse heraus kommt.

Editor Icon labyrinth-_und_irrgartengenerator:v2generieren_abzweig.mcfunction
# Je nach dem wo sich ein Befehlsblock befindet, wird der Rüstungsständer in diese Richtung teleportiert.
execute if block ~ ~ ~1 minecraft:air if block ~ ~ ~2 minecraft:command_block run teleport @s ~ ~ ~2 0 0
execute if block ~-1 ~ ~ minecraft:air if block ~-2 ~ ~ minecraft:command_block run teleport @s ~-2 ~ ~ 270 0
execute if block ~ ~ ~-1 minecraft:air if block ~ ~ ~-2 minecraft:command_block run teleport @s ~ ~ ~-2 180 0
execute if block ~1 ~ ~ minecraft:air if block ~2 ~ ~ minecraft:command_block run teleport @s ~2 ~ ~ 90 0

# Anschließend wird der Befehlsblock durch Luft ersetzt.
setblock ~ ~ ~ minecraft:air replace

Variante 2: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel, alle Rüstungsständer und den Irrgarten.

Editor Icon labyrinth-_und_irrgartengenerator:v2stopp.mcfunction
# Das Punkte-Ziel wird entfernt.
scoreboard objectives remove PZLaUIr.2Gross

# Die Rüstungsständer mit der speziellen Eigenschaft werden aus allen Spielern-Inventaren gelöscht.
clear @a minecraft:armor_stand{EigLaUIr.2Alle:true}

# Das Etikett wird entfernt.
tag @a[tag=EtiLaUIr.2Auswahl] remove EtiLaUIr.2Auswahl

# An der Position des Markierers wird Luft platziert, sodass der gesamte Irrgarten entfernt wird.
execute at @e[type=minecraft:marker,tag=EtiLaUIr.2Gang] run fill ~ ~ ~ ~-2 ~3 ~-2 minecraft:air replace

# Die gedroppten Rüstungsständer erhalten ein Etikett und alle Objekte mit diesem Etikett werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigLaUIr.2Alle:true} } }] add EtiLaUIr.2Alle
kill @e[tag=EtiLaUIr.2Alle]
Advertisement