Technik Wiki
Registrieren
Advertisement
Gruppe: Grid Schiene
Schienenverkehrsanlagen

Grid Roter Sand blass mit Mechaniken

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

Grid Wiederhol-Befehlsblock mehr Befehle

Die Schwebebahn ist eine langsamere Eisenbahn bei der sich die Räder über den Waggons befindet. Die Schwebebahn wird von dem Spieler selbst gesteuert und kann die Spurstrecke entlang fahren. Ebenso lässt sich die Schwebebahn in einer Schleife wieder zurück fahren, dazu dreht die Bahn um die Kurve. Die Strecken können an beliebiger Stelle platziert werden um dort die Schwebebahn einzusetzen. Zugleich lassen sich auch Stationen errichten, an denen die Schwebebahn automatisch hält. Eine Schwebebahn wird ähnlich wie eine Eisenbahn gesteuert, das heißt, wird sie in Bewegung versetzt, so fährt sie unaufhörlich weiter und beendet die Fahrt nur, wenn man dies wünscht oder die Fahrbahn blockiert ist.

Variante 1[]

Schwebebahn (Befehle) Bild 1.1 Schwebebahn (Befehle) Bild 1.2 Schwebebahn (Befehle) Bild 1.3 Schwebebahn (Befehle) Bild 1.4 Schwebebahn (Befehle) Bild 1.5 Schwebebahn (Befehle) Bild 1.6

Diese Schwebebahn ist der Wuppertaler Schwebebahn nachempfunden. Schaltet man die Anlage ein, so erhält man vier Rüstungsständer. Einer für die Schwebebahn, zwei für die Strecken und der vierte für die Station. Platziert man einen Rüstungsständer, so wird an dessen Position die Konstruktion geladen. Hat man einen für die Spur platziert, wird die Spur in Blickrichtung nach vorne platziert und auch orientiert. Gleiches gilt für die Station. Möchte man die Schwebebahn selbst platzieren, muss man jedoch darauf achten, dass man diesen Rüstungsständer auf das Gleis der Schwebebahnspur platziert. Dabei muss man nicht auf den Blickwinkel des Spielers achten, denn die Schwebebahn wird immer exakt auf die Spur erzeugt, egal wie herum man sie platziert. Wenn die Schwebebahn ans Gleis gehängt wurde, kann man in diese einsteigen. Die Schwebebahn fährt nicht von alleine, ein Spieler muss sich vorne in die Lore setzen um sie zu steuern. Hat er sich hinein gesetzt, so muss er das Holzschert in der Schnellleiste auswählen um eine Benutzerschnittstelle zu erhalten. Diese bietet im Chat-Bereich des Spielers mehrere Schaltflächen, die der Spieler anklicken kann um die Schwebebahn zu steuern. Um die Schwebebahn zu starten muss er den Tempomat aktivieren. Sobald das geschehen ist, fährt die Schwebebahn los. Man kann die Schwebebahn jederzeit per Schaltfläche im Chat anhalten. Ebenso kann man den Haltevorgang auch einfach dadurch auslösen, dass man das Holzschwert nicht mehr ausgewählt hat oder die Lore verlässt. Alle Passagiere die sich ebenfalls in der Schwebebahn befinden fahren mit dieser mit und bei Kurven werden sie neu positioniert. Entfernt man die Lore im Fahrerbereich, wird die gesamte Schwebebahn entfernt.

Einschalten

Wird der Hebel umgelegt, startet der Befehlsblock und führt die Start-Funktion einmal aus.

Wiederholen

Der Wiederhol-Befehlsblock führt jeden Tick die Zyklus-Funktion aus.

Ausschalten

Sobald der Hebel wieder in Ausgangsstellung zurück gelegt wurde, wird die Stopp-Funktion aktiviert.


Befehlsblöcke mit Befehlen:
Datenpaket


Variante 1: Start-Funktion
Die Start-Funktion gibt dem Spieler die Rüstungsständer und erzeugt die benötigten Punkte-Ziele.

Editor Icon schwebebahn:v1start.mcfunction
# Es werden zwei Punkte-Ziele erstellt.
scoreboard objectives add PZSchwB.1Ausl trigger ["Schwebebahn.1: ",{"text":"Auslöser für Optionen","bold":true}]
scoreboard objectives add PZSchwB.1Wert dummy ["Schwebebahn.1: ",{"text":"Wert der Variablen","bold":true}]

# Eine Konstante wird angelegt.
scoreboard players set KonstSchwB.1MINUSEINS PZSchwB.1Ausl -1

# Spieler in der Nähe erhalten vier Rüstungsständer, mit denen die Schwebebahn, die Spur, die Spur-Kreuzung und die Station platziert werden können.
give @a[distance=..15] minecraft:armor_stand{EigSchwB.1Alle:true,display:{Name:'{"text":"Schwebebahn","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"auf eine Schwebebahn-Strecke"','"um eine Schwebebahn"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.1Alle","EtiSchwB.1Erstellen"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.1Alle:true,display:{Name:'{"text":"Spur","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um eine Schwebebahn-Strecke"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.1Alle","EtiSchwB.1Bauwerk","EtiSchwB.1Spuren","EtiSchwB.1Spur"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.1Alle:true,display:{Name:'{"text":"Spur-Schleife","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Schwebebahn-Schleife"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.1Alle","EtiSchwB.1Bauwerk","EtiSchwB.1Spuren","EtiSchwB.1SpurSchleife"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.1Alle:true,display:{Name:'{"text":"Station","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer auf die Spur"','"um eine Schwebebahn-Station"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.1Alle","EtiSchwB.1Bauwerk","EtiSchwB.1Station"] } }

# Ein Erklärtext wird den Spielern angezeigt.
tellraw @a[distance=..15] ["Schwebebahn.1:\n",{"text":"Drücke E um das Inventar zu öffnen und fahre mit der Maus über die Rüstungsständer, um zu erfahren wie man sie einsetzt um die Schwebebahn zu benutzen.","bold":true}]

# Der Chunk in dem die Technik gestartet wurde, wird dauerhaft geladen.
forceload add ~ ~

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion sorgt dafür, dass die Bahn erzeugt und gefahren werden kann und dafür dass die Spuren und Stationen erzeugt werden können.

Editor Icon schwebebahn:v1zyklus.mcfunction
# Wird eines der Bauwerke platziert, wird die Bauwerks-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiSchwB.1Bauwerk] at @s align y run function schwebebahn:v1bauwerk

# Wird die Schwebebahn platziert, wird die Erstellen-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiSchwB.1Erstellen] at @s align y run function schwebebahn:v1erstellen

# Wenn der Spieler sich in die Lore gesetzt hat, erhält er ein Etikett zur Markierung.
execute at @e[type=minecraft:marker,tag=EtiSchwB.1Bahn] positioned ^ ^ ^9 run tag @p[distance=..5,nbt={RootVehicle:{Entity:{Tags:["EtiSchwB.1Halter"]} } }] add EtiSchwB.1Sitzen

# Wenn der Spieler das Schwert ausgewählt hat, erhält er zur Erkennung ein Etikett.
tag @a[gamemode=!spectator,nbt={SelectedItem:{tag:{EigSchwB.1Steuer:true} } }] add EtiSchwB.1Ausgewaehlt

# Wenn der Spieler aussteigt und wieder einsteigt, soll die Aulöser-Funktion erneut aufgerufen werden.
tag @a[tag=EtiSchwB.1Ausgewaehlt,tag=EtiSchwB.1Auswahl,tag=!EtiSchwB.1Sitzen] remove EtiSchwB.1Auswahl

# Wenn der Spieler das Steuer gerade ausgewählt hat, wird ihm ein Wert gegeben, damit die Auslöser-Funktion aufgerufen wird.
scoreboard players set @a[tag=EtiSchwB.1Ausgewaehlt,tag=!EtiSchwB.1Auswahl] PZSchwB.1Ausl -99

# Spieler die Sitzen und das Holzschwert ausgewählt haben, laden von dem Bahn-Markierer aus die Auslöser-Funktion.
execute as @a[tag=EtiSchwB.1Ausgewaehlt,tag=EtiSchwB.1Sitzen] unless entity @s[scores={PZSchwB.1Ausl=0}] at @s at @e[distance=..5,type=minecraft:armor_stand,tag=EtiSchwB.1Halter,sort=nearest,limit=1] positioned ^ ^ ^-9 as @e[distance=..5,type=minecraft:marker,tag=EtiSchwB.1Bahn,sort=nearest,limit=1] positioned ^ ^ ^9 run function schwebebahn:v1ausloeser

# Je nach ob der Spieler nicht sitzt oder sitzt und nicht das Schwert ausgewählt hat, wird die entsprechende Titel-Nachricht angezeigt.
title @a[tag=EtiSchwB.1Ausgewaehlt,tag=!EtiSchwB.1Auswahl,tag=!EtiSchwB.1Sitzen] actionbar ["",{"text":"Spieler sitzt == ","bold":true},{"text":"falsch","color":"red","bold":true}]
title @a[tag=!EtiSchwB.1Ausgewaehlt,tag=EtiSchwB.1Auswahl] actionbar ["",{"text":"Steuer ausgewählt == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Um zu erfassen ob der Spieler gerade das Schwert ausgewählt hat oder es nicht mehr auswählt, wird ihm ein Etikett gegeben oder entfernt.
tag @a[tag=EtiSchwB.1Ausgewaehlt,tag=!EtiSchwB.1Auswahl] add EtiSchwB.1Auswahl
tag @a[tag=!EtiSchwB.1Ausgewaehlt,tag=EtiSchwB.1Auswahl] remove EtiSchwB.1Auswahl

# Die Eigenschaft des Bahn-Markierers wird in seinen Namen kopiert, da die Namensabfrage einfacher funktioniert.
execute as @e[type=minecraft:marker,tag=EtiSchwB.1Bahn] run data modify entity @s CustomName set from entity @s data."EigSchwB.1Tempomat"

# Wenn sich in der Nähe des Markierers kein Spieler aufhält der das Schwert ausgewählt hat, wird, falls der Tempomat aktiv ist, dieser deaktiviert, in dem die NBT-Eigenschaft geändert wird.
execute as @e[type=minecraft:marker,tag=EtiSchwB.1Bahn,name="wahr"] at @s positioned ^ ^ ^9 unless entity @p[distance=..5,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt] at @s rotated ~180 0 positioned ^ ^ ^9 unless entity @p[distance=..5,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt] at @s rotated ~90 0 positioned ^ ^ ^9 unless entity @p[distance=..5,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt] at @s rotated ~270 0 positioned ^ ^ ^9 unless entity @p[distance=..5,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt] run data modify entity @s data."EigSchwB.1Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'

# Wenn der Markierer, der den Wahrheitswert für den Tempomat speichert, den Namen wahr besitzt, wird dem Fahrer der Wert sieben gegeben, sodass die Bahn losfährt. Dazu wird jeden Tick der Wert der Tick-Variable um eins erhöht und bei vier wieder auf null gesetzt. Das ermöglicht dem Fahrer, der die Option Tempomat gewählt hat, dass die Bahn nur alle vier Ticks nach vorne fährt.
scoreboard players add #VarSchwB.1Tick PZSchwB.1Ausl 1
execute if score #VarSchwB.1Tick PZSchwB.1Ausl matches 4.. as @e[type=minecraft:armor_stand,tag=EtiSchwB.1Halter,nbt=!{Passengers:[{}]}] at @s run function schwebebahn:v1entfernen
execute if score #VarSchwB.1Tick PZSchwB.1Ausl matches 4.. as @e[type=minecraft:marker,tag=EtiSchwB.1Bahn,name="wahr"] at @s positioned ^ ^ ^9 run scoreboard players set @p[distance=..5,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt,scores={PZSchwB.1Ausl=0}] PZSchwB.1Ausl 7
execute if score #VarSchwB.1Tick PZSchwB.1Ausl matches 4.. run scoreboard players set #VarSchwB.1Tick PZSchwB.1Ausl 0

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

# Das Etikett wird wieder entfernt, damit der Spieler es nur besitzt, wenn er in der Bahn noch sitzt.
tag @a[tag=EtiSchwB.1Sitzen] remove EtiSchwB.1Sitzen

Variante 1: Bauwerks-Funktion
Die Bauwerks-Funktion erzeugt die Spuren, Spur-Schleifen oder Stationen.

Editor Icon schwebebahn:v1bauwerk.mcfunction
# Die Richtung wird angepasst.
teleport @s[y_rotation=-45.0..44.9] ~ ~ ~ 0 0
teleport @s[y_rotation=45.0..134.9] ~ ~ ~ 90 0
teleport @s[y_rotation=135.0..-134.9] ~ ~ ~ 180 0
teleport @s[y_rotation=-135.0..-44.9] ~ ~ ~ 270 0

# Da der Rüstungsständer immer exakt 180° in die andere Richtung schaut wird er umgedreht.
execute at @s run teleport @s ^ ^ ^-32 ~180 0

# Wenn der Rüstungsständer entweder nach Osten oder Westen schaut, erhält er das Etikett.
execute if entity @s[y_rotation=-135.0..134.9] unless entity @s[y_rotation=-45.0..44.9] run tag @s add EtiSchwB.1Aequator

# Die Station wird erstellt.
execute at @s[tag=EtiSchwB.1Station,tag=EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ none
execute at @s[tag=EtiSchwB.1Station,tag=EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ none left_right
execute at @s[tag=EtiSchwB.1Station,tag=EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ 180
execute at @s[tag=EtiSchwB.1Station,tag=EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ 180 left_right

execute at @s[tag=EtiSchwB.1Station,tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ clockwise_90
execute at @s[tag=EtiSchwB.1Station,tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ clockwise_90 left_right
execute at @s[tag=EtiSchwB.1Station,tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ counterclockwise_90
execute at @s[tag=EtiSchwB.1Station,tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1station ~ ~ ~ counterclockwise_90 left_right

# Die Spur wird erstellt.
execute at @s[tag=EtiSchwB.1Aequator] run place template schwebebahn:v1spur ~3 ~16 ~-4 none
execute at @s[tag=EtiSchwB.1Aequator] run place template schwebebahn:v1spur ~-2 ~16 ~4 180

execute at @s[tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1spur ~4 ~16 ~3 clockwise_90
execute at @s[tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1spur ~-4 ~16 ~-2 counterclockwise_90

# Die Pfeiler werden erstellt.
execute at @s[tag=EtiSchwB.1Aequator] run place template schwebebahn:v1pfeiler ~-1 ~ ~ none
execute at @s[tag=EtiSchwB.1Aequator] run place template schwebebahn:v1pfeiler ~2 ~ ~ 180

execute at @s[tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1pfeiler ~ ~ ~-1 clockwise_90
execute at @s[tag=!EtiSchwB.1Aequator] run place template schwebebahn:v1pfeiler ~ ~ ~2 counterclockwise_90

# Damit die Schwebebahn an der Station hält.
execute at @s[tag=EtiSchwB.1Station] run setblock ^-4 ^16 ^12 minecraft:dark_oak_slab replace
execute at @s[tag=EtiSchwB.1Station] run setblock ^4 ^16 ^-12 minecraft:dark_oak_slab replace

# Die Spur besitzt grundsätzlich eine Schleife an einer Seite. Diese wird an der zum Spieler zugewandten Seite entfernt oder wenn es keine Schleife ist, an beiden Seiten.
execute at @s positioned ^ ^16 ^-28.5 run clone ^-4 ^ ^-2 ^4 ^1 ^6 ~-4 ~ ~-4 replace force
execute at @s[tag=!EtiSchwB.1SpurSchleife] positioned ^ ^16 ^28.5 run clone ^-4 ^ ^-6 ^4 ^1 ^2 ~-4 ~ ~-4 replace force

# Das Etikett wird wieder entfernt.
tag @s[tag=EtiSchwB.1Aequator] remove EtiSchwB.1Aequator

# Der Rüstungsständer wird anschließend gelöscht.
kill @s

Variante 1: Erstellen-Funktion
Die Erstellen-Funktion erzeugt die Schwebebahn, welche aus drei Waggons besteht.

Editor Icon schwebebahn:v1erstellen.mcfunction
# Zuerst wird geprüft ob sich unter dem Rüstungsständer überhaupt eine Spur befindet und wenn nicht wird eine Fehlermeldung ausgegeben.
execute store success score @s PZSchwB.1Ausl if block ~ ~-1 ~ minecraft:dark_oak_stairs
execute if entity @s[scores={PZSchwB.1Ausl=0}] run tellraw @p[distance=..5] ["Schwebebahn.1:\n",{"text":"Es wurde unter dem Rüstungsständer keine vollständige Schwebebahn-Spur gefunden!","color":"red","bold":true}]

# Der Rüstungsständer wird ausgerichtet.
execute if block ~ ~-1 ~ minecraft:dark_oak_stairs[facing=west] run teleport @s ~ ~-7 ~ 0 0
execute if block ~ ~-1 ~ minecraft:dark_oak_stairs[facing=north] run teleport @s ~ ~-7 ~ 90 0
execute if block ~ ~-1 ~ minecraft:dark_oak_stairs[facing=east] run teleport @s ~ ~-7 ~ 180 0
execute if block ~ ~-1 ~ minecraft:dark_oak_stairs[facing=south] run teleport @s ~ ~-7 ~ 270 0

# Wenn sich eine Spur an der Position des Rüstungsständers befindet, wird ihm der Wert zwei gegeben.
execute at @s[scores={PZSchwB.1Ausl=1}] if block ^1 ^7 ^ minecraft:dark_oak_planks run scoreboard players set @s PZSchwB.1Ausl 2
tag @s[scores={PZSchwB.1Ausl=0..1}] remove EtiSchwB.1Erstellen

# Wenn eine Spur vorhanden ist, wird jetzt geprüft ob über der Spur genug Platz für die Bahn ist.
execute at @s[tag=EtiSchwB.1Erstellen] store result score @s PZSchwB.1Ausl run fill ^-2 ^ ^-22 ^2 ^4 ^22 minecraft:structure_void replace minecraft:air
execute at @s[tag=EtiSchwB.1Erstellen] run fill ^-2 ^ ^-22 ^2 ^4 ^22 minecraft:air replace minecraft:structure_void
tag @s[tag=EtiSchwB.1Erstellen,scores={PZSchwB.1Ausl=..1124}] remove EtiSchwB.1Erstellen

# Falls kein Platz vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiSchwB.1Erstellen,scores={PZSchwB.1Ausl=1..}] run tellraw @p[distance=..5] ["Schwebebahn.1:\n",{"text":"Die Schwebebahn kann nicht an der geforderten Position erzeugt werden!","color":"red","bold":true}]

# Wenn alles in Ordnung ist, wird dem Spieler das Holzschwert für das Steuern der Bahn gegeben.
execute if entity @s[tag=EtiSchwB.1Erstellen] run give @p[distance=..5] minecraft:wooden_sword{EigSchwB.1Alle:true,EigSchwB.1Steuer:true,Unbreakable:true,HideFlags:6,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Extraschaden",Operation:0,UUID:[0,0,0,1],Slot:"mainhand"}],Enchantments:[{id:-1}],display:{Name:'{"text":"Steuer","color":"gold","bold":true}',Lore:['"Setze dich in die Lore"','"und wähle das Steuer aus"','"um die Bahn zu steuern."'] } }

# Der Markierer für das Anfangstück der Bahn wird erzeugt. Ebenso wird ein zweiter Markierer, der die alte Position der Bahn markiert, erzeugt.
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Bahn"],data:{EigSchwB.1Tempomat:'{"bold":true,"color":"red","text":"falsch"}'} }
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Unbeachten","EtiSchwB.1AltePosition"]}

# Ein unsichtbarer Rüstungsständer mit einer Lore darauf werden etwas versetzt von der Mitte erzeugt.
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:armor_stand ^ ^0.3 ^9 {Small:true,Invisible:true,NoGravity:true,Tags:["EtiSchwB.1Alle","EtiSchwB.1Ausrichten","EtiSchwB.1Halter"],Passengers:[{id:"minecraft:minecart",Tags:["EtiSchwB.1Alle","EtiSchwB.1Unbeachten","EtiSchwB.1Sitz"] } ] }

# Der erste Waggon bekommt die Nummer eins.
scoreboard players set VarSchwB.1Nummer PZSchwB.1Wert 0
execute at @s[tag=EtiSchwB.1Erstellen] as @e[distance=..6,tag=EtiSchwB.1Ausrichten,tag=EtiSchwB.1Bahn,sort=nearest,limit=3] store result score @s PZSchwB.1Wert run scoreboard players add VarSchwB.1Nummer PZSchwB.1Wert 1

# Der zweite Waggon wird erstellt und bekommt die Nummer zwei.
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~2 ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Bahn"],data:{EigSchwB.1Drehung:[] } }
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~2 ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Unbeachten","EtiSchwB.1AltePosition"]}
execute at @s[tag=EtiSchwB.1Erstellen] as @e[distance=..6,tag=EtiSchwB.1Ausrichten,tag=EtiSchwB.1Bahn,sort=nearest,limit=3] unless score @s PZSchwB.1Wert matches 1.. store result score @s PZSchwB.1Wert run scoreboard players add VarSchwB.1Nummer PZSchwB.1Wert 1

# Der dritte Waggon wird erstellt und bekommt die Nummer drei.
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~4 ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Bahn"],data:{EigSchwB.1Drehung:[] } }
execute at @s[tag=EtiSchwB.1Erstellen] run summon minecraft:marker ~ ~4 ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Entfernen","EtiSchwB.1Ausrichten","EtiSchwB.1Unbeachten","EtiSchwB.1AltePosition"]}
execute at @s[tag=EtiSchwB.1Erstellen] as @e[distance=..6,tag=EtiSchwB.1Ausrichten,tag=EtiSchwB.1Bahn,sort=nearest,limit=3] unless score @s PZSchwB.1Wert matches 1.. store result score @s PZSchwB.1Wert run scoreboard players add VarSchwB.1Nummer PZSchwB.1Wert 1

# Die sechs Markierer und auch der Rüstungsständer werden entsprechend ausgerichtet.
execute at @s[tag=EtiSchwB.1Erstellen] as @e[distance=..13,tag=EtiSchwB.1Ausrichten,sort=nearest,limit=7] positioned as @s run teleport @s ~ ~ ~ ~ 0

execute at @s[tag=EtiSchwB.1Erstellen] positioned ~ ~4 ~ run teleport @e[distance=..1,tag=EtiSchwB.1Ausrichten,sort=nearest,limit=2] ^ ^-4 ^-24 ~ 0

execute at @s[tag=EtiSchwB.1Erstellen] positioned ~ ~2 ~ run teleport @e[distance=..1,tag=EtiSchwB.1Ausrichten,sort=nearest,limit=2] ^ ^-2 ^-12 ~ 0

# Der Bahn-Markierer ruft die Bahn-Funktion auf.
execute at @s[tag=EtiSchwB.1Erstellen] as @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.1Bahn,tag=EtiSchwB.1Ausrichten,sort=nearest,limit=3] at @s run function schwebebahn:v1bahn

# Danach wird ihnen das Etikett entfernt.
execute at @s[tag=EtiSchwB.1Erstellen] run tag @e[distance=..36,tag=EtiSchwB.1Ausrichten,sort=nearest,limit=3] remove EtiSchwB.1Ausrichten

# Falls die Bahn nicht erzeugt werden konnte, wird die Entfernen-Funktion geladen.
execute store success score @s PZSchwB.1Wert run tag @s[tag=!EtiSchwB.1Erstellen] add EtiSchwB.1Erstellen
execute if entity @s[scores={PZSchwB.1Wert=1}] run function schwebebahn:v1entfernen

# Anschließend wird der Rüstungsständer entfernt.
kill @s


Variante 1: Entfernen-Funktion
Die Entfernen-Funktion entfernt alle Bestandteile der Schwebebahn und erzeugt einen Drop um diese erneut erzeugen zu können.

Editor Icon schwebebahn:v1entfernen.mcfunction
# Es wird der Rüstungsständer als Gegenstand erzeugt.
summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:armor_stand",Count:1b,tag:{EigSchwB.1Alle:true,display:{Name:'{"text":"Schwebebahn","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"auf eine Schwebebahn-Strecke"','"um eine Schwebebahn"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.1Alle","EtiSchwB.1Erstellen"] } } },Motion:[0.0d,0.3d,0.0d] }

# Wenn die Schwebebahn bereits vorhanden war, wird dem Spieler die Angel aus dem Inventar entfernt.
execute if entity @s[tag=!EtiSchwB.1Erstellen] as @p[distance=..25,gamemode=!spectator,nbt={Inventory:[{id:"minecraft:wooden_sword",tag:{EigSchwB.1Steuer:true} } ] } ] store result score @s PZSchwB.1Ausl run clear @s minecraft:wooden_sword{EigSchwB.1Steuer:true} 1

# Wenn die Bahn bereits vorhanden ist, wird diese entfernt.
execute if entity @s[tag=!EtiSchwB.1Erstellen] positioned ^ ^ ^-8 at @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=3] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute if entity @s[tag=!EtiSchwB.1Erstellen] positioned ^ ^ ^-8 at @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=3] run fill ^-1 ^6 ^-9 ^-1 ^7 ^9 minecraft:air replace minecraft:gray_concrete
execute if entity @s[tag=!EtiSchwB.1Erstellen] positioned ^ ^ ^-8 at @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=3] run fill ^ ^7 ^-9 ^ ^7 ^9 minecraft:air replace minecraft:black_concrete

# Weil die Schwebebahn in der Luft hängt, wird zur Sicherheit der sanfte-Fall-Effekt gegeben.
execute if entity @s[tag=!EtiSchwB.1Erstellen] run effect give @e[distance=..30] minecraft:slow_falling 15 1 true

# Eine Meldung erscheint, damit der Spieler weis warum die Schwebebahn entfernt wurde.
execute if entity @s[tag=!EtiSchwB.1Erstellen] run tellraw @p[distance=..25,gamemode=!spectator,scores={PZSchwB.1Ausl=1}] ["Schwebebahn.1:\n",{"text":"Die Schwebebahn wurde entfernt. Auslöser dafür war der fehlende Fahrer-Sitz.","color":"red","bold":true}]

# Falls die Schwebebahn vollständig vorhanden war, werden alle Bauteile von ihr ebenfalls entfernt. Andernfalls nur sie selbst.
execute if entity @s[tag=!EtiSchwB.1Erstellen] positioned ^ ^-1 ^-12 run kill @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.1Entfernen,sort=nearest,limit=6]
kill @s

Variante 1: Auslöser-Funktion
Die Auslöser-Funktion ermöglicht es, dass der Spieler im Chat auf Schaltflächen klicken kann um die Bahn zu steuern.

Editor Icon schwebebahn:v1ausloeser.mcfunction
# Der Wert des Spielers wird ausgelesen und in den Wert des Markierers gespeichert. Falls der Spieler nicht gefunden wurde, wird stattdessen der Wert null gespeichert.
execute store result score @s PZSchwB.1Ausl run scoreboard players get @p[distance=..1,tag=EtiSchwB.1Ausgewaehlt,scores={PZSchwB.1Ausl=1..}] PZSchwB.1Ausl

# Zuerst wird geprüft ob der Markierer überhaupt die Eigenschaft für die Richtung besitzt und falls nicht, wird ihm der Wert eins gegeben, sodass anschließend die Drehen-Funktion geladen wird. Sie wird ansonsten auch geladen, wenn der Spieler in eine der zwei anderen Richtungen die Bahn drehen möchte.
execute store success score @s[scores={PZSchwB.1Ausl=0}] PZSchwB.1Ausl unless data entity @s data."EigSchwB.1Richtung"[1]
execute at @s[scores={PZSchwB.1Ausl=1..4}] run function schwebebahn:v1drehen

# Der Spieler kann den Tempomat ein und ausschalten.
data modify entity @s[scores={PZSchwB.1Ausl=5}] data."EigSchwB.1Tempomat" set value '{"bold":true,"color":"green","text":"wahr"}'
data modify entity @s[scores={PZSchwB.1Ausl=6}] data."EigSchwB.1Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'

# Wenn der Tempomat eingeschaltet ist, bekommt der Spieler zyklisch den Wert sieben, sodass er die Fahren-Funktion auslöst.
execute at @s[scores={PZSchwB.1Ausl=7}] run function schwebebahn:v1fahren

# Die Optionen sollen nur dann angezeigt werden, wenn der Spieler nicht gerade den Tempomaten am laufen hat und nur, wenn der Spieler auch das Schwert ausgewählt hat.
execute unless entity @s[scores={PZSchwB.1Ausl=7},nbt={data:{EigSchwB.1Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} }] run tellraw @p[distance=..1,tag=EtiSchwB.1Sitzen,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"richtung = ","bold":true},{"text":"drehen(","extra":[{"entity":"@s","nbt":"data.\"EigSchwB.1Richtung\"[-1]","color":"gray","interpret":true},{"text":")"}],"color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für nach Links"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchwB.1Ausl set 3"} },"\n",{"text":"richtung == ","bold":true},{"entity":"@s","nbt":"data.\"EigSchwB.1Richtung\"[0]","interpret":true},"\n",{"text":"tempomat = ","bold":true},{"text":"wahr","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für Wert wahr"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchwB.1Ausl set 5"} },"\n",{"text":"tempomat = ","bold":true},{"text":"falsch","color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für Wert falsch"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchwB.1Ausl set 6"} },"\n",{"text":"tempomat == ","bold":true},{"entity":"@s","nbt":"data.\"EigSchwB.1Tempomat\"","interpret":true},"\n",{"text":"solange(tempomat) fahren(richtung)","color":"gray","bold":true}]

# Dem Spieler wird der Auslöser-Wert auf null gesetzt und er bekommt erneut die Berechtigung fürs auslösen.
scoreboard players enable @p[distance=..1,tag=EtiSchwB.1Ausgewaehlt] PZSchwB.1Ausl
scoreboard players set @p[distance=..1,tag=EtiSchwB.1Ausgewaehlt] PZSchwB.1Ausl 0

Variante 1: Drehen-Funktion
Die Drehen-Funktion prüft ob das Drehen der Bahn möglich ist, das ist abhängig von vorhandenen Spuren und vorhandenen Platz. Nur dann ruft sie die Bewegen-Funktion auf.

Editor Icon schwebebahn:v1drehen.mcfunction
# Die beiden Variablen werden auf null gesetzt und werden im späteren Verlauf erhöht, wenn das Drehen möglich ist.
scoreboard players set VarSchwB.1Spur PZSchwB.1Wert 0
scoreboard players set VarSchwB.1Drehen PZSchwB.1Wert 0

# Möchte der Spieler nach rechts oder links drehen, wird geprüft ob sich an der entsprechenden Stelle überhaupt eine Spur befindet.
execute if block ^1 ^6 ^ minecraft:dark_oak_stairs[half=bottom] if block ^1 ^7 ^-1 minecraft:dark_oak_planks run scoreboard players set VarSchwB.1Spur PZSchwB.1Wert 1

# Wenn keine Spur gefunden wurde, wird eine Fehlermeldung ausgegeben.
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 0 at @s[scores={PZSchwB.1Ausl=2..4}] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"In Drehrichtung gibt es keine Spur für die Schwebebahn!","color":"red","bold":true}]

# Wenn Spuren vorhanden sind, wird anschließend rechts wie auch links geprüft ob dort nichts im Weg ist.
scoreboard players set VarSchwB.1Unbelegt PZSchwB.1Wert 0
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if entity @s[scores={PZSchwB.1Ausl=2..3}] store result score VarSchwB.1Unbelegt PZSchwB.1Wert run fill ^3 ^ ^-2 ^11 ^4 ^2 minecraft:structure_void replace minecraft:air
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 1.. run fill ^3 ^ ^-2 ^11 ^4 ^2 minecraft:air replace minecraft:structure_void
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 225 run scoreboard players set VarSchwB.1Drehen PZSchwB.1Wert 1

scoreboard players set VarSchwB.1Unbelegt PZSchwB.1Wert 0
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Drehen PZSchwB.1Wert matches 1 if entity @s[scores={PZSchwB.1Ausl=2..3}] store result score VarSchwB.1Unbelegt PZSchwB.1Wert run fill ^-3 ^ ^-2 ^-11 ^4 ^2 minecraft:structure_void replace minecraft:air
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Drehen PZSchwB.1Wert matches 1 if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 1.. run fill ^-3 ^ ^-2 ^-11 ^4 ^2 minecraft:air replace minecraft:structure_void
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Drehen PZSchwB.1Wert matches 1 if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 225 run scoreboard players set VarSchwB.1Drehen PZSchwB.1Wert 2

# Wenn der Spieler die Bahn in eine andere Richtung drehen möchte in die die Bahn nicht gedreht werden kann, wird eine Fehlermeldung ausgegeben.
execute if score VarSchwB.1Spur PZSchwB.1Wert matches 1 if score VarSchwB.1Drehen PZSchwB.1Wert matches 0..1 at @s[scores={PZSchwB.1Ausl=2..4}] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"In Drehrichtung gibt es keinen Platz für die Schwebebahn!","color":"red","bold":true}]

# Wenn die Drehung möglich ist, werden die Variablen für den Aufruf der Bewegen-Funktion vorbereitet.
scoreboard players set VarSchwB.1Drehung PZSchwB.1Wert 0
execute if score VarSchwB.1Drehen PZSchwB.1Wert matches 2 run scoreboard players set VarSchwB.1Nummer PZSchwB.1Wert 1
execute if score VarSchwB.1Drehen PZSchwB.1Wert matches 2 run scoreboard players operation VarSchwB.1Drehung PZSchwB.1Wert = @s PZSchwB.1Ausl
execute if score VarSchwB.1Drehen PZSchwB.1Wert matches 2 at @s run function schwebebahn:v1bewegen

# Dem Bahn-Markierer wird die Richtungs-Eigenschaft gegeben, sodass sie abhängig der Blickrichtung, richtig sortiert werden kann.
data modify entity @s data."EigSchwB.1Richtung" set value ['{"bold":true,"color":"gold","text":"Westen"}','{"bold":true,"color":"blue","text":"Norden"}','{"bold":true,"color":"gold","text":"Osten"}','{"bold":true,"color":"blue","text":"Süden"}']

data modify entity @s[y_rotation=135..45] data."EigSchwB.1Richtung" append from entity @s data."EigSchwB.1Richtung"[0]
data remove entity @s[y_rotation=135..45] data."EigSchwB.1Richtung"[0]

data modify entity @s[y_rotation=-135..45] data."EigSchwB.1Richtung" append from entity @s data."EigSchwB.1Richtung"[0]
data remove entity @s[y_rotation=-135..45] data."EigSchwB.1Richtung"[0]

data modify entity @s[y_rotation=-45..45] data."EigSchwB.1Richtung" append from entity @s data."EigSchwB.1Richtung"[0]
data remove entity @s[y_rotation=-45..45] data."EigSchwB.1Richtung"[0]

Variante 1: Bewegen-Funktion
Die Bewegen-Funktion bewegt die Insassen der Bahn vorwärts oder dreht sie in die neue Richtung.

Editor Icon schwebebahn:v1bewegen.mcfunction
# Wenn die Bahn aufgrund einer Station oder einer Kreuzung anhalten muss, wird den Waggons mit der Nummer zwei und drei in ihre Liste ein neuer Eintrag hinzugefügt.
execute if entity @s[scores={PZSchwB.1Wert=2..3}] if score VarSchwB.1Fahren PZSchwB.1Wert matches 4..6 if score VarSchwB.1Drehung PZSchwB.1Wert matches 1..3 run data modify entity @s data."EigSchwB.1Drehung" append value 0

# Wenn der Spieler die Bahn dreht, wird in den beiden hinteren Waggons der Dreh-Richtungs-Wert in deren Listen gespeichert.
execute if entity @s[scores={PZSchwB.1Wert=2..3}] if score VarSchwB.1Drehung PZSchwB.1Wert matches 1..3 store result entity @s data."EigSchwB.1Drehung"[-1] int 1 run scoreboard players get VarSchwB.1Drehung PZSchwB.1Wert

# Wenn der Spieler die Drehung durchführt, wird das Etikett vergeben.
execute if entity @s[scores={PZSchwB.1Wert=1}] if score VarSchwB.1Drehung PZSchwB.1Wert matches 2..3 run tag @s add EtiSchwB.1Drehen

# Die beiden hinteren Waggons erhalten das Etikett nur, wenn sie sich selbst gerade an der Kreuzung befinden.
execute if entity @s[scores={PZSchwB.1Wert=2..3}] if block ~ ~6 ~ minecraft:dark_oak_slab unless score VarSchwB.1Drehung PZSchwB.1Wert matches 1..3 run tag @s add EtiSchwB.1Drehen

# Wenn die Drehung bei einem der hinteren Waggons durchgeführt werden soll, erhält dieser den Dreh-Richtungs-Wert in sein Punkte-Ziel.
execute store result score @s[tag=EtiSchwB.1Drehen,scores={PZSchwB.1Wert=2..3}] PZSchwB.1Ausl run data get entity @s data."EigSchwB.1Drehung"[0]
data remove entity @s[tag=EtiSchwB.1Drehen,scores={PZSchwB.1Wert=2..3}] data."EigSchwB.1Drehung"[0]

# Falls der Dreh-Richtungs-Wert von einem der hinteren Waggons nicht nach rechts oder links zeigt, wird die Drehung abgebrochen.
execute if entity @s[tag=EtiSchwB.1Drehen,scores={PZSchwB.1Wert=2..3}] unless entity @s[scores={PZSchwB.1Ausl=2..3}] run tag @s remove EtiSchwB.1Drehen

# Wenn das Drehen möglich ist, werden je nach Blickrichtung der Bahn die Insassen mit einem Etikett ausgestattet.
execute unless entity @s[scores={PZSchwB.1Wert=2}] at @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ~-10 ~-1 ~-2 run tag @e[dx=19,dy=5,dz=4,tag=!EtiSchwB.1Sitzen,tag=!EtiSchwB.1Unbeachten,tag=!EtiSchwB.1Bewegt] add EtiSchwB.1Bewegen
execute unless entity @s[scores={PZSchwB.1Wert=2}] at @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ~-2 ~-1 ~-10 run tag @e[dx=4,dy=5,dz=19,tag=!EtiSchwB.1Sitzen,tag=!EtiSchwB.1Unbeachten,tag=!EtiSchwB.1Bewegt] add EtiSchwB.1Bewegen

# Wenn das Drehen für den zweiten Waggon möglich ist, werden die Insassen mit einem Etikett ausgestattet.
execute at @s[scores={PZSchwB.1Wert=2}] positioned ~-2 ~-1 ~-2 run tag @e[dx=4,dy=5,dz=4,tag=!EtiSchwB.1Sitzen,tag=!EtiSchwB.1Unbeachten,tag=!EtiSchwB.1Bewegt] add EtiSchwB.1Bewegen

# Wenn der Spieler im Triebwagen eine Drehung durchführt, so sollen die beiden anderen Bahnwagen nicht bewegt oder gedreht werden.
execute if entity @s[tag=!EtiSchwB.1Drehen,scores={PZSchwB.1Wert=2..3}] if score VarSchwB.1Drehung PZSchwB.1Wert matches 2..3 run tag @e[distance=..14,tag=EtiSchwB.1Bewegen] remove EtiSchwB.1Bewegen

# Für die Drehung werden die Mittelpunkt-Koordinaten der Bahn in Variablen gespeichert.
execute if entity @s[tag=EtiSchwB.1Drehen] store result score VarSchwB.1X PZSchwB.1Ausl run data get entity @s Pos[0] 100
execute if entity @s[tag=EtiSchwB.1Drehen] store result score VarSchwB.1Z PZSchwB.1Ausl run data get entity @s Pos[2] 100

# Um die Richtung abfragen zu können, wird der Wert des Spielers in eine Variable gespeichert.
execute if entity @s[tag=EtiSchwB.1Drehen] run scoreboard players operation VarSchwB.1Richtung PZSchwB.1Ausl = @s PZSchwB.1Ausl

# Wenn das Drehen möglich ist, werden alle Insassen ausgewählt und diese rufen jeweils fürs sich die Drehungs-Funktion auf.
execute if entity @s[tag=EtiSchwB.1Drehen] as @e[distance=..25,tag=EtiSchwB.1Bewegen] run function schwebebahn:v1drehung

# Wenn die Drehung möglich ist, werden alle Insassen so gedreht wie es der Fahrer vorgegeben hat.
execute if entity @s[tag=EtiSchwB.1Drehen] at @s[scores={PZSchwB.1Ausl=2}] as @e[distance=..25,tag=EtiSchwB.1Bewegen] at @s run teleport @s ~ ~ ~ ~90 ~
execute if entity @s[tag=EtiSchwB.1Drehen] at @s[scores={PZSchwB.1Ausl=3}] as @e[distance=..25,tag=EtiSchwB.1Bewegen] at @s run teleport @s ~ ~ ~ ~-90 ~

# Wenn das Fahren möglich ist, werden alle Insassen nach vorne bewegt und abhängig davon ob die Bahn nach unten oder oben fahren soll auch dies berücksichtigt.
execute if score VarSchwB.1Fahren PZSchwB.1Wert matches 4..6 at @s as @e[distance=..25,tag=EtiSchwB.1Bewegen] positioned as @s run teleport @s ^ ^ ^1

# Die bewegten Insassen in der Bahn erhalten ein Etikett, sodass sie von den hinteren Waggons nicht erneut erfasst werden. Haben alle Waggons die Bewegung durchgeführt, wird das Etikett entfernt.
tag @e[distance=..25,tag=EtiSchwB.1Bewegen,tag=!EtiSchwB.1Bewegt] add EtiSchwB.1Bewegt
execute if entity @s[scores={PZSchwB.1Wert=3}] run tag @e[distance=..36,tag=EtiSchwB.1Bewegt] remove EtiSchwB.1Bewegt

# Danach werden die Etiketten wieder entfernt.
tag @e[distance=..25,tag=EtiSchwB.1Bewegen] remove EtiSchwB.1Bewegen
tag @s[tag=EtiSchwB.1Drehen] remove EtiSchwB.1Drehen

# Wenn die Drehung möglich ist, wird die Bahn-Funktion von der neuen Richtung des Bahn-Markierers aus geladen.
execute at @s run function schwebebahn:v1bahn

# Die Bewegen-Funktion ruft sich pro Waggon erneut auf und merkt sich dabei die Waggon-Nummer.
scoreboard players add VarSchwB.1Nummer PZSchwB.1Wert 1
execute if score VarSchwB.1Nummer PZSchwB.1Wert matches 2..3 as @e[distance=..25,type=minecraft:marker,tag=EtiSchwB.1Bahn,sort=nearest] if score @s PZSchwB.1Wert = VarSchwB.1Nummer PZSchwB.1Wert at @s run function schwebebahn:v1bewegen

Variante 1: Drehungs-Funktion
Die Drehungs-Funktion dreht jeden einzelnen Insassen nach rechts oder links oder um 180°.

Editor Icon schwebebahn:v1drehung.mcfunction
# Die Position des Insassen wird ausgelesen und in Variablen gespeichert.
execute store result score VarSchwB.1DX PZSchwB.1Ausl run data get entity @s Pos[0] 100
execute store result score VarSchwB.1DZ PZSchwB.1Ausl run data get entity @s Pos[2] 100

# Von den Koordinaten des Insassen werden die Mittelpunkt-Koordinaten abgezogen um die Koordinaten auf den Nullpunkt zu bekommen.
scoreboard players operation VarSchwB.1DX PZSchwB.1Ausl -= VarSchwB.1X PZSchwB.1Ausl
scoreboard players operation VarSchwB.1DZ PZSchwB.1Ausl -= VarSchwB.1Z PZSchwB.1Ausl

# Je nach gewünschte Drehung, ob nach rechts, nach links oder umgedreht, wird eine der beiden oder beide Koordinaten mal minus eins gerechnet.
execute if score VarSchwB.1Richtung PZSchwB.1Ausl matches 2 run scoreboard players operation VarSchwB.1DZ PZSchwB.1Ausl *= KonstSchwB.1MINUSEINS PZSchwB.1Ausl
execute if score VarSchwB.1Richtung PZSchwB.1Ausl matches 3 run scoreboard players operation VarSchwB.1DX PZSchwB.1Ausl *= KonstSchwB.1MINUSEINS PZSchwB.1Ausl

# Ein Markierer wird an der Position des Insassen erzeugt. Dieser erhält auch die exakte Rotation.
execute at @s run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.1Alle","EtiSchwB.1Drehung"]}
execute at @s run teleport @e[type=minecraft:marker,tag=EtiSchwB.1Drehung,sort=nearest,limit=1] ~ ~ ~ ~ ~

# Anschließend wird die neue Position berechnet und in den Markierer gespeichert.
execute store result entity @e[type=minecraft:marker,tag=EtiSchwB.1Drehung,sort=nearest,limit=1] Pos[0] double 0.01 run scoreboard players operation VarSchwB.1DZ PZSchwB.1Ausl += VarSchwB.1X PZSchwB.1Ausl
execute store result entity @e[type=minecraft:marker,tag=EtiSchwB.1Drehung,sort=nearest,limit=1] Pos[2] double 0.01 run scoreboard players operation VarSchwB.1DX PZSchwB.1Ausl += VarSchwB.1Z PZSchwB.1Ausl

# Der Insasse wird an die neue gedrehte Position teleportiert.
teleport @s @e[type=minecraft:marker,tag=EtiSchwB.1Drehung,sort=nearest,limit=1]

# Danach wird der Markierer wieder gelöscht.
kill @e[type=minecraft:marker,tag=EtiSchwB.1Drehung,sort=nearest,limit=1]

Variante 1: Fahren-Funktion
Die Fahren-Funktion prüft ob das Fahren nach vorne möglich ist und ruft davon abhängig die Bewegen-Funktion auf.

Editor Icon schwebebahn:v1fahren.mcfunction
# Die beiden Variablen werden auf null gesetzt um später auf andere Werte gesetzt zu werden, sofern das möglich ist.
scoreboard players set VarSchwB.1Ebene PZSchwB.1Wert 0
scoreboard players set VarSchwB.1Fahren PZSchwB.1Wert 0

# Es wird geprüft ob sich eine Spur direkt vor der Bahn befindet.
execute positioned ^ ^6 ^11 if block ~ ~ ~ minecraft:dark_oak_stairs[half=bottom] run scoreboard players set VarSchwB.1Ebene PZSchwB.1Wert 2

# Wenn bisher keine Spur gefunden wurde, wird geprüft ob sich die Bahn noch auf einer ebenen Spur befindet.
scoreboard players set VarSchwB.1Unbelegt PZSchwB.1Wert 0
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 0 if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] store result score VarSchwB.1Unbelegt PZSchwB.1Wert run clone ~-10 ~6 ~ ~10 ~6 ~ ~-10 ~6 ~ filtered minecraft:dark_oak_stairs[half=bottom] force
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 0 if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 0..1 if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] store result score VarSchwB.1Unbelegt PZSchwB.1Wert run clone ~ ~6 ~-10 ~ ~6 ~10 ~ ~6 ~-10 filtered minecraft:dark_oak_stairs[half=bottom] force
execute if score VarSchwB.1Unbelegt PZSchwB.1Wert matches 1.. run scoreboard players set VarSchwB.1Ebene PZSchwB.1Wert 2

# Wenn alle Prüfungen fehl schlugen befindet sich garkeine Spur voraus und der Spieler erhält eine Fehlermeldung.
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 0 at @s[tag=!EtiSchwB.1Halten] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"Keine Fahrbahn voraus!","color":"red","bold":true}]

# Wenn die Bahn ein Halten-Etikett besitzt, wird die Ebenen-Variable auf null gesetzt sodass scheinbar doch keine Spur voraus sei und der Spieler erhält eine Nachricht.
execute if entity @s[tag=EtiSchwB.1Halten] run scoreboard players set VarSchwB.1Ebene PZSchwB.1Wert 0
execute at @s[tag=EtiSchwB.1Halten] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"Station oder Fahrbahn-Kurve erreicht!","color":"green","bold":true}]

# Das Etikett fürs Halten wird sofern vorhanden wieder entfernt und nur dann gegeben, wenn einen Block voraus eine rote Netherziegelstufe auf Spur-Ebene oder eine Ebene darunter sich befindet.
tag @s[tag=EtiSchwB.1Halten] remove EtiSchwB.1Halten
execute if block ^ ^6 ^1 minecraft:dark_oak_slab run tag @s add EtiSchwB.1Halten

# Falls sich eine Spur voraus befindet, wird geprüft ob direkt vor der Bahn alles frei ist.
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 1..3 positioned ^ ^1 ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players set VarSchwB.1Fahren PZSchwB.1Wert 1

# Anschließend wird geprüft ob der untere Bereich vor der Bahn frei ist.
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 1..2 if score VarSchwB.1Fahren PZSchwB.1Wert matches 1 positioned ^ ^ ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players set VarSchwB.1Fahren PZSchwB.1Wert 2

# Ebenso wird geprüft ob der obere Bereich vor der Bahn frei ist.
execute if score VarSchwB.1Ebene PZSchwB.1Wert matches 2..3 if score VarSchwB.1Fahren PZSchwB.1Wert matches 1..2 positioned ^ ^5 ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players add VarSchwB.1Fahren PZSchwB.1Wert 2

# Wenn eine Spur voraus war, aber der Bereich nicht frei ist, wird eine Fehlermeldung ausgegeben und der Tempomat deaktiviert.
execute if score VarSchwB.1Fahren PZSchwB.1Wert matches 0..3 run data modify entity @s[nbt={data:{EigSchwB.1Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} }] data."EigSchwB.1Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'
execute if score VarSchwB.1Fahren PZSchwB.1Wert matches 1..3 at @s positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.1Ausgewaehlt] ["Schwebebahn.1:\n",{"text":"Die Fahrbahn ist blockiert!","color":"red","bold":true}]

# Wenn die Fahrbahn frei ist, wird von der aktualisierten Position der Schwebebahn die Bahn-Funktion aufgerufen. Sofern die Tempo-Variable bereits bei null angekommen ist, ansonsten wird diese Funktion erneut aufgerufen.
scoreboard players set VarSchwB.1Nummer PZSchwB.1Wert 1
execute if score VarSchwB.1Fahren PZSchwB.1Wert matches 4..6 store result score VarSchwB.1Drehung PZSchwB.1Wert if entity @s[tag=EtiSchwB.1Halten]
execute if score VarSchwB.1Fahren PZSchwB.1Wert matches 4..6 at @s run function schwebebahn:v1bewegen

Variante 1: Bahn-Funktion
Die Bahn-Funktion platziert die Bahn an der neuen aktuellen Position und löscht sie an der alten Position.

Editor Icon schwebebahn:v1bahn.mcfunction
# Wenn der Spieler die Richtung ändert, wird die Schwebebahn an der alten Position entfernt, sodass die Schwebebahn an der neuen Position erscheinen kann, ohne Rückstände zu hinterlassen.
execute unless entity @s[scores={PZSchwB.1Wert=2}] at @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute unless entity @s[scores={PZSchwB.1Wert=2}] at @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=1] run fill ^-1 ^6 ^-10 ^-1 ^7 ^10 minecraft:air replace minecraft:gray_concrete
execute unless entity @s[scores={PZSchwB.1Wert=2}] at @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=1] run fill ^ ^7 ^-10 ^ ^7 ^10 minecraft:air replace minecraft:black_concrete

# Der erste Waggon wird platziert.
execute if entity @s[y_rotation=45..135,scores={PZSchwB.1Wert=1}] run place template schwebebahn:v1bahn ~10 ~ ~2 180
execute if entity @s[y_rotation=135..-135,scores={PZSchwB.1Wert=1}] run place template schwebebahn:v1bahn ~-2 ~ ~10 counterclockwise_90
execute if entity @s[y_rotation=-135..-45,scores={PZSchwB.1Wert=1}] run place template schwebebahn:v1bahn ~-10 ~ ~-2 none
execute if entity @s[y_rotation=-45..45,scores={PZSchwB.1Wert=1}] run place template schwebebahn:v1bahn ~2 ~ ~-10 clockwise_90

# Der zweite Waggon wird platziert.
execute if entity @s[y_rotation=45..135,scores={PZSchwB.1Wert=2}] run place template schwebebahn:v1bahn_gelenk ~2 ~ ~2 180
execute if entity @s[y_rotation=135..-135,scores={PZSchwB.1Wert=2}] run place template schwebebahn:v1bahn_gelenk ~-2 ~ ~2 counterclockwise_90
execute if entity @s[y_rotation=-135..-45,scores={PZSchwB.1Wert=2}] run place template schwebebahn:v1bahn_gelenk ~-2 ~ ~-2
execute if entity @s[y_rotation=-45..45,scores={PZSchwB.1Wert=2}] run place template schwebebahn:v1bahn_gelenk ~2 ~ ~-2 clockwise_90

# Der dritte Waggon wird platziert.
execute if entity @s[y_rotation=45..135,scores={PZSchwB.1Wert=3}] run place template schwebebahn:v1bahn ~-10 ~ ~2 180 front_back
execute if entity @s[y_rotation=135..-135,scores={PZSchwB.1Wert=3}] run place template schwebebahn:v1bahn ~-2 ~ ~-10 counterclockwise_90 front_back
execute if entity @s[y_rotation=-135..-45,scores={PZSchwB.1Wert=3}] run place template schwebebahn:v1bahn ~10 ~ ~-2 none front_back
execute if entity @s[y_rotation=-45..45,scores={PZSchwB.1Wert=3}] run place template schwebebahn:v1bahn ~2 ~ ~10 clockwise_90 front_back

# Der Markierer für die alte Position wird an die aktuelle Stelle befördert.
teleport @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.1AltePosition,sort=nearest,limit=1] ~ ~ ~ ~ ~

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht alle Punkte-Ziele und Objekte und Gegenstände wieder.

Editor Icon schwebebahn:v1stopp.mcfunction
# Die Punkte-Ziele werden wieder gelöscht.
scoreboard objectives remove PZSchwB.1Ausl
scoreboard objectives remove PZSchwB.1Wert

# Die Rüstungsständer und das Holzschwert werden entfernt.
clear @a minecraft:armor_stand{EigSchwB.1Alle:true}
clear @a minecraft:wooden_sword{EigSchwB.1Alle:true}

# Das eventuell vorhandene Etikett wird entfernt.
tag @a[tag=EtiSchwB.1Auswahl] remove EtiSchwB.1Auswahl

# Die Schwebahn wird entfernt.
execute at @e[type=minecraft:marker,tag=EtiSchwB.1Bahn] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute at @e[type=minecraft:marker,tag=EtiSchwB.1Bahn] run fill ^-1 ^6 ^-9 ^-1 ^7 ^9 minecraft:air replace minecraft:gray_concrete
execute at @e[type=minecraft:marker,tag=EtiSchwB.1Bahn] run fill ^ ^7 ^-9 ^ ^7 ^9 minecraft:air replace minecraft:black_concrete

# Drops und alle Objekte werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigSchwB.1Alle:true} } }] add EtiSchwB.1Alle
kill @e[tag=EtiSchwB.1Alle]

# Der Chunk wird entladen.
forceload remove ~ ~

Variante 2[]

Schwebebahn (Befehle) Bild 2.1 Schwebebahn (Befehle) Bild 2.2 Schwebebahn (Befehle) Bild 2.3 Schwebebahn (Befehle) Bild 2.4 Schwebebahn (Befehle) Bild 2.5 Schwebebahn (Befehle) Bild 2.6

Diese Schwebebahn ist der Shōnan Monorail nachempfunden. Schaltet man die Technik ein, so erhält man vier Rüstungsständer, die ins Inventar gelegt werden. Der erste wird benutzt um die Schwebebahn als solche auf die Gleise zu platzieren. Die zwei weiteren werden dazu benutzt um die Gleise für die Schwebebahn zu errichten. Der vierte Rüstungsständer ist für die Station, an der die Schwebebahn halten kann. Wenn die Schwebebahn platziert wurde, kann man hinein gehen und in die Fahrerkabine laufen. Diese erkennt man an den Holzfalltüren auf dem Boden. Dort stellt man sich mittig hin und wählt das Holzschwert aus. Nun bewegt man sich einen Block nach vorne auf den Holzfalltüren fort und die Schwebebahn beginnt die Fahrt. Alle Passagiere werden beim Fahren mit bewegt und auch wenn der Fahrer die Schwebebahn um eine Kurve bewegt. Möchte der Fahrer anhalten, so wählt er einfach das Holzschwert in der Schnellleiste nicht mehr aus. Ebenso kann die Bahn angehalten werden, wenn der Fahrer sich wieder einen Block zurück bewegt (in die Mitte) und sich wieder an der Startposition des Fahrers befindet. Die Schwebebahn wird auch angehalten, wenn die Gleise nicht weiter führen oder ein Hindernis voraus ist. Ebenso hält die Schwebebahn an, wenn sie eine Station erreicht. Entfernt man den Rahmen im Fahrer-Bereich der Bahn, wird die Schwebebahn entfernt.

Einschalten

Wird der Hebel umgelegt, startet der Befehlsblock und führt die Start-Funktion einmal aus.

Wiederholen

Der Wiederhol-Befehlsblock führt jeden Tick die Zyklus-Funktion aus.

Ausschalten

Sobald der Hebel wieder in Ausgangsstellung zurück gelegt wurde, wird die Stopp-Funktion aktiviert.


Befehlsblöcke mit Befehlen:
Datenpaket


Variante 2: Start-Funktion
Die Start-Funktion gibt dem Spieler die Rüstungsständer und erzeugt die benötigten Punkte-Ziele.

Editor Icon schwebebahn:v2start.mcfunction
# Es werden zwei Punkte-Ziele erstellt.
scoreboard objectives add PZSchwB.2Ausl dummy ["Schwebebahn.2: ",{"text":"Auslöser für Optionen","bold":true}]
scoreboard objectives add PZSchwB.2Wert dummy ["Schwebebahn.2: ",{"text":"Wert der Variablen","bold":true}]

# Eine Konstante wird angelegt.
scoreboard players set KonstSchwB.2MINUSEINS PZSchwB.2Ausl -1

# Spieler in der Nähe erhalten vier Rüstungsständer, mit denen die Schwebebahn, die Spur, die Spur-Kreuzung und die Station platziert werden können.
give @a[distance=..15] minecraft:armor_stand{EigSchwB.2Alle:true,display:{Name:'{"text":"Monorail","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"unter eine Monorail-Strecke"','"um eine Monorail"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.2Alle","EtiSchwB.2Erstellen"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.2Alle:true,display:{Name:'{"text":"Spur","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um eine Monorail-Strecke"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.2Alle","EtiSchwB.2Bauwerk","EtiSchwB.2Spuren","EtiSchwB.2Spur"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.2Alle:true,display:{Name:'{"text":"Spur-Kreuz","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Monorail-Kreuz"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.2Alle","EtiSchwB.2Bauwerk","EtiSchwB.2Spuren","EtiSchwB.2SpurKreuz"] } }

give @a[distance=..15] minecraft:armor_stand{EigSchwB.2Alle:true,display:{Name:'{"text":"Station","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer auf die Spur"','"um eine Monorail-Station"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.2Alle","EtiSchwB.2Bauwerk","EtiSchwB.2Station"] } }

# Ein Erklärtext wird den Spielern angezeigt.
tellraw @a[distance=..15] ["Schwebebahn.2:\n",{"text":"Drücke E um das Inventar zu öffnen und fahre mit der Maus über die Rüstungsständer, um zu erfahren wie man sie einsetzt um die Monorail zu benutzen.","bold":true}]

# Der Chunk in dem die Technik gestartet wurde, wird dauerhaft geladen.
forceload add ~ ~

Variante 2: Zyklus-Funktion
Die Zyklus-Funktion wird ständig vom Wiederhol-Befehlsblock aufgerufen und sorgt dafür, dass die Bahn erzeugt und gefahren werden kann. Ebenso kann man Spuren, Spur-Kreuzungen und Stationen platzieren.

Editor Icon schwebebahn:v2zyklus.mcfunction
# Wird eines der Bauwerke platziert, wird die Bauwerks-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiSchwB.2Bauwerk] at @s align y run function schwebebahn:v2bauwerk

# Wird die Schwebebahn platziert, wird die Erstellen-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiSchwB.2Erstellen] at @s align y run function schwebebahn:v2erstellen

# Wenn der Spieler das Schwert ausgewählt hat, erhält er zur Erkennung ein Etikett.
tag @a[gamemode=!spectator,nbt={SelectedItem:{tag:{EigSchwB.2Steuer:true} } }] add EtiSchwB.2Ausgewaehlt

# Spieler die das Schwert ausgewählt haben und dabei auf der Fichtenholzfalltür stehen, erhalten das Etikett, damit erst dann die Bahn gefahren werden kann, wenn der Spieler sich am Fahrerplatz aufhält.
execute as @a[tag=EtiSchwB.2Ausgewaehlt,tag=!EtiSchwB.2Steuern] at @s if block ~ ~-1 ~ minecraft:spruce_trapdoor[open=false] run tag @s add EtiSchwB.2Steuern

# Vom Bahn-Rüstungsständer wird geprüft ob sich ein Spieler mit Schwert in der Fahrerkabine aufhält und dieser sich auf Falltüren bewegt hat. Nur dann wird die Steuern-Funktion ausgelöst.
execute as @e[type=minecraft:marker,tag=EtiSchwB.2Bahn] at @s positioned ^ ^1 ^8 at @p[distance=..1.5,tag=EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Steuern] run function schwebebahn:v2steuern

# Dem Spieler wird in der Schnellleiste angezeigt ob er das Steuer ausgewählt hat oder nicht.
title @a[tag=EtiSchwB.2Ausgewaehlt,tag=!EtiSchwB.2Auswahl] actionbar ["",{"text":"Steuer ausgewählt == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
title @a[tag=!EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Auswahl] actionbar ["",{"text":"Steuer ausgewählt == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Wenn der Spieler das Schwert nicht mehr ausgewählt hat, wird auch das Etikett fürs Steuern entfernt.
tag @a[tag=!EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Auswahl,tag=EtiSchwB.2Steuern] remove EtiSchwB.2Steuern

# Um zu erfassen ob der Spieler gerade das Schwert ausgewählt hat oder es nicht mehr auswählt, wird ihm ein Etikett gegeben oder entfernt.
tag @a[tag=EtiSchwB.2Ausgewaehlt,tag=!EtiSchwB.2Auswahl] add EtiSchwB.2Auswahl
tag @a[tag=!EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Auswahl] remove EtiSchwB.2Auswahl

# Die Eigenschaft des Bahn-Markierers wird in seinen Namen kopiert, da die Namensabfrage einfacher funktioniert.
execute as @e[type=minecraft:marker,tag=EtiSchwB.2Bahn] run data modify entity @s CustomName set from entity @s data."EigSchwB.2Tempomat"

# Wenn sich in der Nähe des Markierers kein Spieler aufhält der das Schwert ausgewählt hat, wird, falls der Tempomat aktiv ist, dieser deaktiviert, in dem die NBT-Eigenschaft geändert wird.
execute as @e[type=minecraft:marker,tag=EtiSchwB.2Bahn,name="wahr"] at @s positioned ^ ^1 ^8 unless entity @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] at @s rotated ~180 0 positioned ^ ^1 ^8 unless entity @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] at @s rotated ~90 0 positioned ^ ^1 ^8 unless entity @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] at @s rotated ~270 0 positioned ^ ^1 ^8 unless entity @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] run data modify entity @s data."EigSchwB.2Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'

# Wenn der Markierer, der den Wahrheitswert für den Tempomat speichert, den Namen wahr besitzt, wird dem Fahrer der Wert sieben gegeben, sodass die Bahn losfährt. Dazu wird jeden Tick der Wert der Tick-Variable um eins erhöht und bei vier wieder auf null gesetzt. Das ermöglicht dem Fahrer, der die Option Tempomat gewählt hat, dass die Bahn nur alle vier Ticks nach vorne fährt.
scoreboard players add #VarSchwB.2Tick PZSchwB.2Ausl 1
execute if score #VarSchwB.2Tick PZSchwB.2Ausl matches 4.. as @e[type=minecraft:marker,tag=EtiSchwB.2Bahn,scores={PZSchwB.2Wert=1}] at @s positioned ^ ^1 ^8 unless entity @e[distance=..5,type=minecraft:item_frame,tag=EtiSchwB.2Fahrerplatz] run function schwebebahn:v2entfernen
execute if score #VarSchwB.2Tick PZSchwB.2Ausl matches 4.. run scoreboard players set @e[type=minecraft:marker,tag=EtiSchwB.2Bahn,name="wahr"] PZSchwB.2Ausl 7
execute if score #VarSchwB.2Tick PZSchwB.2Ausl matches 4.. run scoreboard players set #VarSchwB.2Tick PZSchwB.2Ausl 0

# Die Etiketten werden wieder entfernt.
tag @a[tag=EtiSchwB.2Ausgewaehlt] remove EtiSchwB.2Ausgewaehlt

Variante 2: Bauwerks-Funktion
Die Bauwerks-Funktion wird dafür benutzt um die Spuren, Spur-Kreuzungen oder Stationen zu platzieren.

Editor Icon schwebebahn:v2bauwerk.mcfunction
# Die Richtung wird angepasst.
teleport @s[y_rotation=-45.0..44.9] ~ ~ ~ 0 0
teleport @s[y_rotation=45.0..134.9] ~ ~ ~ 90 0
teleport @s[y_rotation=135.0..-134.9] ~ ~ ~ 180 0
teleport @s[y_rotation=-135.0..-44.9] ~ ~ ~ 270 0

# Da der Rüstungsständer immer exakt 180° in die andere Richtung schaut wird er umgedreht.
execute at @s run teleport @s ^ ^ ^-32 ~180 0

# Wenn der Rüstungsständer Richtung Osten oder Westen schaut, erhält er das Etikett.
execute if entity @s[y_rotation=-135.0..134.9] unless entity @s[y_rotation=-45.0..44.9] run tag @s add EtiSchwB.2Aequator

# Die Station wird platziert.
execute at @s[tag=EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ none
execute at @s[tag=EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ none left_right
execute at @s[tag=EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ 180
execute at @s[tag=EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ 180 left_right

execute at @s[tag=EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ clockwise_90
execute at @s[tag=EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ clockwise_90 left_right
execute at @s[tag=EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ counterclockwise_90
execute at @s[tag=EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2station ~ ~ ~ counterclockwise_90 left_right

# Die Spur wird platziert.
execute at @s[tag=EtiSchwB.2Aequator] run place template schwebebahn:v2spur ~4 ~16 ~-1 none
execute at @s[tag=EtiSchwB.2Aequator] run place template schwebebahn:v2spur ~-32 ~16 ~-1 none

execute at @s[tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2spur ~1 ~16 ~4 clockwise_90
execute at @s[tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2spur ~1 ~16 ~-32 clockwise_90

# Die Kreuzung wird platziert.
execute at @s[tag=EtiSchwB.2SpurKreuz,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2spur_kreuz ~4 ~16 ~-15 none
execute at @s[tag=EtiSchwB.2SpurKreuz,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2spur_kreuz ~15 ~16 ~4 clockwise_90

# Der Pfeiler wird platziert.
execute at @s[tag=!EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run place template schwebebahn:v2pfeiler ~ ~ ~-2 none
execute at @s[tag=!EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run place template schwebebahn:v2pfeiler ~2 ~ ~ clockwise_90

# Wenn die Station platziert wird, befindet sich in der Mitte keine Spur. Aus diesen Grund wird ein Teil der Spur kopiert und in die mitte eingefügt.
execute at @s[tag=EtiSchwB.2Station,tag=EtiSchwB.2Aequator] run clone ~4 ~16 ~-1 ~7 ~18 ~1 ~ ~16 ~-1 replace force
execute at @s[tag=EtiSchwB.2Station,tag=!EtiSchwB.2Aequator] run clone ~-1 ~16 ~4 ~1 ~18 ~7 ~-1 ~16 ~ replace force

# Damit die Bahn in der Station hält, wird eine rote Netherziegelstufe platziert.
execute at @s[tag=EtiSchwB.2Station] run setblock ~ ~17 ~ minecraft:red_nether_brick_slab[type=top] replace

# Das Etikett wird wieder entfernt.
tag @s[tag=EtiSchwB.2Aequator] remove EtiSchwB.2Aequator

# Der Rüstungsständer wird anschließend gelöscht.
kill @s

Variante 2: Erstellen-Funktion
Die Erstellen-Funktion erzeugt die Schwebebahn. Dazu wird zuvor geprüft ob Gleise und Platz vorhanden sind, andernfalls wird der Erstell-Vorgang abgebrochen.

Editor Icon schwebebahn:v2erstellen.mcfunction
# Der Rüstungsständer wird ausgerichtet.
teleport @s[y_rotation=-45.0..44.9] ~ ~ ~ 0 0
teleport @s[y_rotation=45.0..134.9] ~ ~ ~ 90 0
teleport @s[y_rotation=135.0..-134.9] ~ ~ ~ 180 0
teleport @s[y_rotation=-135.0..-44.9] ~ ~ ~ 270 0

# Anschließend wird er umgedreht.
execute at @s run teleport @s ~ ~-9 ~ ~180 0

# Zuerst wird geprüft ob sich unter dem Rüstungsständer überhaupt eine Spur befindet und wenn nicht wird eine Fehlermeldung ausgegeben.
execute at @s store success score @s PZSchwB.2Ausl if block ~ ~8 ~ minecraft:light_gray_concrete
execute if entity @s[scores={PZSchwB.2Ausl=0}] run tellraw @p[distance=..5] ["Schwebebahn.2:\n",{"text":"Es wurde unter dem Rüstungsständer keine vollständige Schwebebahn-Spur gefunden!","color":"red","bold":true}]

# Der Rüstungsständer wird, wenn nötig ausgerichtet.
scoreboard players set @s PZSchwB.2Ausl 0
execute at @s positioned ~ ~7 ~ if block ^ ^ ^-1 minecraft:black_concrete if block ^ ^ ^1 minecraft:black_concrete run scoreboard players set @s PZSchwB.2Ausl 1

execute at @s[scores={PZSchwB.2Ausl=0}] store success score @s PZSchwB.2Ausl positioned ~ ~7 ~ if block ^-1 ^ ^ minecraft:black_concrete if block ^1 ^ ^ minecraft:black_concrete run teleport @s ~ ~-7 ~ ~90 0

# Wenn sich eine Spur an der Position des Rüstungsständers befindet, wird ihm der Wert zwei gegeben.
execute at @s[scores={PZSchwB.2Ausl=1}] if block ~ ~7 ~ minecraft:black_concrete run scoreboard players set @s PZSchwB.2Ausl 2
tag @s[scores={PZSchwB.2Ausl=0..1}] remove EtiSchwB.2Erstellen

# Wenn eine Spur vorhanden ist, wird jetzt geprüft ob über der Spur genug Platz für die Bahn ist.
execute at @s[tag=EtiSchwB.2Erstellen] store result score @s PZSchwB.2Ausl run fill ^-2 ^ ^-10 ^2 ^4 ^10 minecraft:structure_void replace minecraft:air
execute at @s[tag=EtiSchwB.2Erstellen] run fill ^-2 ^ ^-10 ^2 ^4 ^10 minecraft:air replace minecraft:structure_void
tag @s[tag=EtiSchwB.2Erstellen,scores={PZSchwB.2Ausl=..524}] remove EtiSchwB.2Erstellen

# Falls kein Platz vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiSchwB.2Erstellen,scores={PZSchwB.2Ausl=1..}] run tellraw @p[distance=..5] ["Schwebebahn.2:\n",{"text":"Die Schwebebahn kann nicht an der geforderten Position erzeugt werden!","color":"red","bold":true}]

# Wenn alles in Ordnung ist, wird dem Spieler das Holzschwert für das Steuern der Bahn gegeben.
execute if entity @s[tag=EtiSchwB.2Erstellen] run give @p[distance=..5] minecraft:wooden_sword{EigSchwB.2Alle:true,EigSchwB.2Steuer:true,Unbreakable:true,HideFlags:6,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Extraschaden",Operation:0,UUID:[0,0,0,1],Slot:"mainhand"}],Enchantments:[{id:-1}],display:{Name:'{"text":"Steuer","color":"gold","bold":true}',Lore:['"Setze dich in die Lore"','"und wähle das Steuer aus"','"um die Bahn zu steuern."'] } }

# Der Markierer für das Anfangstück der Bahn wird erzeugt. Ebenso wird ein zweiter Markierer, der die alte Position der Bahn markiert, erzeugt.
execute at @s[tag=EtiSchwB.2Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.2Alle","EtiSchwB.2Entfernen","EtiSchwB.2Ausrichten","EtiSchwB.2Bahn"],data:{EigSchwB.2Tempomat:'{"bold":true,"color":"red","text":"falsch"}'} }
execute at @s[tag=EtiSchwB.2Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.2Alle","EtiSchwB.2Entfernen","EtiSchwB.2Ausrichten","EtiSchwB.2Unbeachten","EtiSchwB.2AltePosition"]}

# Ein unsichtbarer Rüstungsständer mit einer Lore darauf werden etwas versetzt von der Mitte erzeugt.
execute at @s[tag=EtiSchwB.2Erstellen] run summon minecraft:item_frame ^ ^1 ^8 {Facing:1b,Tags:["EtiSchwB.2Alle","EtiSchwB.2Fahrerplatz"] }

# Der erste Waggon bekommt die Nummer eins.
scoreboard players set VarSchwB.2Nummer PZSchwB.2Wert 0
execute at @s[tag=EtiSchwB.2Erstellen] as @e[distance=..6,tag=EtiSchwB.2Ausrichten,tag=EtiSchwB.2Bahn,sort=nearest,limit=2] store result score @s PZSchwB.2Wert run scoreboard players add VarSchwB.2Nummer PZSchwB.2Wert 1

# Der zweite Waggon wird erstellt und bekommt die Nummer zwei.
execute at @s[tag=EtiSchwB.2Erstellen] run summon minecraft:marker ~ ~2 ~ {Tags:["EtiSchwB.2Alle","EtiSchwB.2Entfernen","EtiSchwB.2Ausrichten","EtiSchwB.2Bahn"],data:{EigSchwB.2Drehung:[] } }
execute at @s[tag=EtiSchwB.2Erstellen] run summon minecraft:marker ~ ~2 ~ {Tags:["EtiSchwB.2Alle","EtiSchwB.2Entfernen","EtiSchwB.2Ausrichten","EtiSchwB.2Unbeachten","EtiSchwB.2AltePosition"]}
execute at @s[tag=EtiSchwB.2Erstellen] as @e[distance=..6,tag=EtiSchwB.2Ausrichten,tag=EtiSchwB.2Bahn,sort=nearest,limit=2] unless score @s PZSchwB.2Wert matches 1.. store result score @s PZSchwB.2Wert run scoreboard players add VarSchwB.2Nummer PZSchwB.2Wert 1

# Die vier Markierer und auch der Rahmen werden entsprechend ausgerichtet.
execute at @s[tag=EtiSchwB.2Erstellen] as @e[distance=..25,tag=EtiSchwB.2Ausrichten,sort=nearest,limit=4] positioned as @s run teleport @s ~ ~ ~ ~ 0

execute at @s[tag=EtiSchwB.2Erstellen] positioned ~ ~2 ~ run teleport @e[distance=..1,tag=EtiSchwB.2Ausrichten,sort=nearest,limit=2] ^ ^-2 ^-20 ~ 0

# Der Bahn-Markierer ruft die Bahn-Funktion auf.
execute at @s[tag=EtiSchwB.2Erstellen] as @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.2Bahn,tag=EtiSchwB.2Ausrichten,sort=nearest,limit=2] at @s run function schwebebahn:v2bahn

# Danach wird ihnen das Etikett entfernt.
execute at @s[tag=EtiSchwB.2Erstellen] run tag @e[distance=..36,tag=EtiSchwB.2Ausrichten,sort=nearest,limit=4] remove EtiSchwB.2Ausrichten

# Falls die Bahn nicht erzeugt werden konnte, wird die Entfernen-Funktion geladen.
execute store success score @s PZSchwB.2Wert run tag @s[tag=!EtiSchwB.2Erstellen] add EtiSchwB.2Erstellen
execute if entity @s[scores={PZSchwB.2Wert=1}] run function schwebebahn:v2entfernen

# Anschließend wird der Rüstungsständer entfernt.
kill @s

Variante 2: Entfernen-Funktion
Die Entfernen-Funktion entfernt alle Bestandteile der Bahn und droppt den Rüstungsständer um die Bahn wieder platzieren zu können.

Editor Icon schwebebahn:v2entfernen.mcfunction
# Es wird der Rüstungsständer als Gegenstand erzeugt.
summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:armor_stand",Count:1b,tag:{EigSchwB.2Alle:true,display:{Name:'{"text":"Monorail","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"unter eine Monorail-Strecke"','"um eine Monorail"','"zu erstellen"'] },EntityTag:{Tags:["EtiSchwB.2Alle","EtiSchwB.2Erstellen"] } } },Motion:[0.0d,0.3d,0.0d] }

# Wenn die Schwebebahn bereits vorhanden war, wird dem Spieler die Angel aus dem Inventar entfernt.
execute if entity @s[tag=!EtiSchwB.2Erstellen] as @p[distance=..25,gamemode=!spectator,nbt={Inventory:[{id:"minecraft:wooden_sword",tag:{EigSchwB.2Steuer:true} } ] } ] store result score @s PZSchwB.2Ausl run clear @s minecraft:wooden_sword{EigSchwB.2Steuer:true} 1

# Wenn die Bahn bereits vorhanden ist, wird diese entfernt.
execute if entity @s[tag=!EtiSchwB.2Erstellen] positioned ^ ^ ^-8 at @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.2AltePosition,sort=nearest,limit=2] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute if entity @s[tag=!EtiSchwB.2Erstellen] positioned ^ ^ ^-8 at @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.2AltePosition,sort=nearest,limit=2] run fill ^ ^6 ^-9 ^ ^6 ^9 minecraft:air replace

# Weil die Schwebebahn in der Luft hängt, wird zur Sicherheit der sanfte-Fall-Effekt gegeben.
execute if entity @s[tag=!EtiSchwB.2Erstellen] run effect give @e[distance=..30] minecraft:slow_falling 15 1 true

# Eine Meldung erscheint, damit der Spieler weis warum die Schwebebahn entfernt wurde.
execute if entity @s[tag=!EtiSchwB.2Erstellen] run tellraw @p[distance=..25,gamemode=!spectator,scores={PZSchwB.2Ausl=1}] ["Schwebebahn.2:\n",{"text":"Die Schwebebahn wurde entfernt. Auslöser dafür war der fehlende Rahmen.","color":"red","bold":true}]

# Falls die Schwebebahn vollständig vorhanden war, werden alle Bauteile von ihr ebenfalls entfernt. Andernfalls nur sie selbst.
execute if entity @s[tag=!EtiSchwB.2Erstellen] positioned ^ ^-1 ^-12 run kill @e[distance=..36,type=minecraft:marker,tag=EtiSchwB.2Entfernen,sort=nearest,limit=4]
kill @s

Variante 2: Steuern-Funktion
Die Steuern-Funktion wird aufgerufen, wenn der Spieler am Fahrerplatz steht. Dort sind mehrere Falltüren positioniert. Je nach dem auf welche Falltür er sich stellt, wird eine entsprechende Einstellung zum Steuern der Bahn vorgenommen.

Editor Icon schwebebahn:v2steuern.mcfunction
# Die Halten-Variable wird auf null gesetzt, sodass sie nur auf eins sein kann, wenn die Fahrt unterbrochen werden soll.
scoreboard players set VarSchwB.2Halten PZSchwB.2Ausl 0

# Wenn durch die Tempomat-Einstellung der Wert sieben in der Zyklus-Funktion vergeben wurde, wird die Fahren-Funktion aufgerufen.
execute at @s[scores={PZSchwB.2Ausl=7}] run function schwebebahn:v2fahren

# Je nach dem wo der Spieler steht wird eine der drei Drehungen ausgelöst. Für nach rechts, links oder eine Drehung um 180°.
execute at @s positioned ^-1 ^1 ^8 at @p[distance=..0.7,tag=EtiSchwB.2Ausgewaehlt] if block ~ ~-1 ~ minecraft:oak_trapdoor[open=false] run scoreboard players set @s PZSchwB.2Ausl 2

execute at @s positioned ^1 ^1 ^8 at @p[distance=..0.7,tag=EtiSchwB.2Ausgewaehlt] if block ~ ~-1 ~ minecraft:oak_trapdoor[open=false] run scoreboard players set @s PZSchwB.2Ausl 3

execute at @s positioned ^ ^1 ^7 at @p[distance=..0.7,tag=EtiSchwB.2Ausgewaehlt] if block ~ ~-1 ~ minecraft:oak_trapdoor[open=false] run scoreboard players set @s PZSchwB.2Ausl 4

# Steht der Spieler vorne oder in der Mitte wird der Tempomat ein- oder ausgeschaltet.
execute at @s positioned ^ ^1 ^9 at @p[distance=..0.7,tag=EtiSchwB.2Ausgewaehlt] if block ~ ~-1 ~ minecraft:oak_trapdoor[open=false] run scoreboard players set @s PZSchwB.2Ausl 5

execute at @s positioned ^ ^1 ^8 at @p[distance=..0.7,tag=EtiSchwB.2Ausgewaehlt] if block ~ ~-1 ~ minecraft:spruce_trapdoor[open=false] run scoreboard players set @s PZSchwB.2Ausl 6

# Je nach einstellung, wird der Tempomat ein- oder ausgeschaltet.
data modify entity @s[scores={PZSchwB.2Ausl=5}] data."EigSchwB.2Tempomat" set value '{"bold":true,"color":"green","text":"wahr"}'
data modify entity @s[scores={PZSchwB.2Ausl=6}] data."EigSchwB.2Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'

# Es wird geprüft ob der Markierer überhaupt die Eigenschaft für die Richtung besitzt und falls nicht, wird ihm der Wert eins gegeben, sodass anschließend die Drehen-Funktion geladen wird. Sie wird ansonsten auch geladen, wenn der Spieler in eine der zwei anderen Richtungen die Bahn drehen möchte.
execute unless entity @s[scores={PZSchwB.2Ausl=1..4}] store success score @s PZSchwB.2Ausl unless data entity @s data."EigSchwB.2Richtung"[1]
execute at @s[scores={PZSchwB.2Ausl=1..4}] run function schwebebahn:v2drehen

# Nachdem alle Einstellungen durchlaufen sind wird der Wert wieder auf null gesetzt.
scoreboard players set @s PZSchwB.2Ausl 0

# Nur wenn die Fahrt unterbrochen werden muss, wird der Spieler wieder in die Mitte teleportiert und das Etikett entfernt.
execute if score VarSchwB.2Halten PZSchwB.2Ausl matches 1 at @s positioned ^ ^1 ^8 as @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Steuern] rotated as @s run teleport @s ~ ~ ~ ~ ~
execute if score VarSchwB.2Halten PZSchwB.2Ausl matches 1 at @s positioned ^ ^1 ^8 run tag @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Steuern] remove EtiSchwB.2Steuern

# Dem Spieler wird die aktuelle Richtung angezeigt.
title @p[distance=..3,tag=EtiSchwB.2Ausgewaehlt] actionbar ["",{"text":"richtung == ","color":"gray","bold":true},{"entity":"@s","nbt":"data.\"EigSchwB.2Richtung\"[0]","interpret":true}]

Variante 2: Drehen-Funktion
Die Drehen-Funktion prüft ob das Drehen möglich ist und ruft nur dann die Bewegen-Funktion auf.

Editor Icon schwebebahn:v2drehen.mcfunction
# Die beiden Variablen werden auf null gesetzt und werden im späteren Verlauf erhöht, wenn das Drehen möglich ist.
scoreboard players set VarSchwB.2Spur PZSchwB.2Wert 0
scoreboard players set VarSchwB.2Drehen PZSchwB.2Wert 0

# Möchte der Spieler nach rechts oder links drehen, wird geprüft ob sich an der entsprechenden Stelle überhaupt eine Spur befindet.
execute if block ^1 ^7 ^ minecraft:black_concrete run scoreboard players set VarSchwB.2Spur PZSchwB.2Wert 1

# Falls keine Spur vorhanden ist, wird die Fehlermeldung ausgegeben.
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 0 at @s[scores={PZSchwB.2Ausl=2..3}] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] ["Schwebebahn.2:\n",{"text":"In Drehrichtung gibt es keine Spur für die Schwebebahn!","color":"red","bold":true}]

# Wenn Spuren vorhanden sind, wird anschließend rechts wie auch links geprüft ob dort nichts im Weg ist.
scoreboard players set VarSchwB.2Unbelegt PZSchwB.2Wert 0
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if entity @s[scores={PZSchwB.2Ausl=2..3}] store result score VarSchwB.2Unbelegt PZSchwB.2Wert run fill ^3 ^ ^-2 ^11 ^4 ^2 minecraft:structure_void replace minecraft:air
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 1.. run fill ^3 ^ ^-2 ^11 ^4 ^2 minecraft:air replace minecraft:structure_void
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 225 run scoreboard players set VarSchwB.2Drehen PZSchwB.2Wert 1

scoreboard players set VarSchwB.2Unbelegt PZSchwB.2Wert 0
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Drehen PZSchwB.2Wert matches 1 if entity @s[scores={PZSchwB.2Ausl=2..3}] store result score VarSchwB.2Unbelegt PZSchwB.2Wert run fill ^-3 ^ ^-2 ^-11 ^4 ^2 minecraft:structure_void replace minecraft:air
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Drehen PZSchwB.2Wert matches 1 if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 1.. run fill ^-3 ^ ^-2 ^-11 ^4 ^2 minecraft:air replace minecraft:structure_void
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Drehen PZSchwB.2Wert matches 1 if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 225 run scoreboard players set VarSchwB.2Drehen PZSchwB.2Wert 2

# Möchte der Spieler die Bahn um 180° umdrehen, dann wird ihm einfach der Wert gesetzt, da dies ohne Prüfung möglich ist.
execute if entity @s[scores={PZSchwB.2Ausl=4}] run scoreboard players set VarSchwB.2Drehen PZSchwB.2Wert 2

# Wenn der Spieler die Bahn in eine andere Richtung drehen möchte in die die Bahn nicht gedreht werden kann, wird eine Fehlermeldung ausgegeben.
execute if score VarSchwB.2Spur PZSchwB.2Wert matches 1 if score VarSchwB.2Drehen PZSchwB.2Wert matches 0..1 at @s[scores={PZSchwB.2Ausl=2..3}] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] ["Schwebebahn.2:\n",{"text":"In Drehrichtung gibt es keinen Platz für die Schwebebahn!","color":"red","bold":true}]

# Wenn der Spieler die Bahn dreht, muss in jeden Fall die Bahn halten.
scoreboard players set VarSchwB.2Halten PZSchwB.2Ausl 1

# Wenn die Drehung möglich ist, werden die Variablen für den Aufruf der Bewegen-Funktion vorbereitet.
scoreboard players set VarSchwB.2Drehung PZSchwB.2Wert 0
execute if score VarSchwB.2Drehen PZSchwB.2Wert matches 2 run scoreboard players set VarSchwB.2Nummer PZSchwB.2Wert 1
execute if score VarSchwB.2Drehen PZSchwB.2Wert matches 2 run scoreboard players operation VarSchwB.2Drehung PZSchwB.2Wert = @s PZSchwB.2Ausl
execute if score VarSchwB.2Drehen PZSchwB.2Wert matches 2 at @s run function schwebebahn:v2bewegen

# Dem Bahn-Markierer wird die Richtungs-Eigenschaft gegeben, sodass sie abhängig der Blickrichtung, richtig sortiert werden kann.
data modify entity @s data."EigSchwB.2Richtung" set value ['{"bold":true,"color":"gold","text":"Westen"}','{"bold":true,"color":"blue","text":"Norden"}','{"bold":true,"color":"gold","text":"Osten"}','{"bold":true,"color":"blue","text":"Süden"}']

data modify entity @s[y_rotation=135..45] data."EigSchwB.2Richtung" append from entity @s data."EigSchwB.2Richtung"[0]
data remove entity @s[y_rotation=135..45] data."EigSchwB.2Richtung"[0]

data modify entity @s[y_rotation=-135..45] data."EigSchwB.2Richtung" append from entity @s data."EigSchwB.2Richtung"[0]
data remove entity @s[y_rotation=-135..45] data."EigSchwB.2Richtung"[0]

data modify entity @s[y_rotation=-45..45] data."EigSchwB.2Richtung" append from entity @s data."EigSchwB.2Richtung"[0]
data remove entity @s[y_rotation=-45..45] data."EigSchwB.2Richtung"[0]

Variante 2: Bewegen-Funktion
Die Bewegen-Funktion bewegt alle Insassen der Bahn entweder vorwärts oder dreht sie.

Editor Icon schwebebahn:v2bewegen.mcfunction
# Wenn die Bahn aufgrund einer Station oder einer Kreuzung anhalten muss, dem hinteren Waggon in seine Liste ein neuer Eintrag hinzugefügt.
execute if entity @s[scores={PZSchwB.2Wert=2}] if score VarSchwB.2Fahren PZSchwB.2Wert matches 4..6 if score VarSchwB.2Drehung PZSchwB.2Wert matches 1..3 run data modify entity @s data."EigSchwB.2Drehung" append value 0

# Wenn der Spieler die Bahn dreht, wird in der hintere Waggon der Dreh-Richtungs-Wert in deren Listen gespeichert.
execute if entity @s[scores={PZSchwB.2Wert=2}] if score VarSchwB.2Drehung PZSchwB.2Wert matches 1..3 store result entity @s data."EigSchwB.2Drehung"[-1] int 1 run scoreboard players get VarSchwB.2Drehung PZSchwB.2Wert

# Wenn der Spieler die Drehung durchführt, wird das Etikett vergeben.
execute if entity @s[scores={PZSchwB.2Wert=1}] if score VarSchwB.2Drehung PZSchwB.2Wert matches 2..3 run tag @s add EtiSchwB.2Drehen

# Der hintere Waggon erhält das Etikett nur, wenn sie sich selbst gerade an der Kreuzung befinden.
execute if entity @s[scores={PZSchwB.2Wert=2}] if block ~ ~7 ~ minecraft:red_nether_brick_slab[type=top] unless score VarSchwB.2Drehung PZSchwB.2Wert matches 1..3 run tag @s add EtiSchwB.2Drehen

# Wenn die Drehung bei dem hinteren Waggon durchgeführt werden soll, erhält dieser den Dreh-Richtungs-Wert in sein Punkte-Ziel.
execute store result score @s[tag=EtiSchwB.2Drehen,scores={PZSchwB.2Wert=2}] PZSchwB.2Ausl run data get entity @s data."EigSchwB.2Drehung"[0]
data remove entity @s[tag=EtiSchwB.2Drehen,scores={PZSchwB.2Wert=2}] data."EigSchwB.2Drehung"[0]

# Falls der Dreh-Richtungs-Wert von einem der hinteren Waggons nicht nach rechts oder links zeigt, wird die Drehung abgebrochen.
execute if entity @s[tag=EtiSchwB.2Drehen,scores={PZSchwB.2Wert=2}] unless entity @s[scores={PZSchwB.2Ausl=2..3}] run tag @s remove EtiSchwB.2Drehen

# Wenn das Drehen möglich ist, werden je nach Blickrichtung der Bahn die Insassen mit einem Etikett ausgestattet.
execute at @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ~-10 ~-1 ~-2 run tag @e[dx=19,dy=5,dz=4,tag=!EtiSchwB.2Sitzen,tag=!EtiSchwB.2Unbeachten,tag=!EtiSchwB.2Bewegt] add EtiSchwB.2Bewegen
execute at @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ~-2 ~-1 ~-10 run tag @e[dx=4,dy=5,dz=19,tag=!EtiSchwB.2Sitzen,tag=!EtiSchwB.2Unbeachten,tag=!EtiSchwB.2Bewegt] add EtiSchwB.2Bewegen

# Wenn der Spieler im Triebwagen eine Drehung durchführt, so sollen die beiden anderen Bahnwagen nicht bewegt oder gedreht werden.
execute if entity @s[tag=!EtiSchwB.2Drehen,scores={PZSchwB.2Wert=2}] if score VarSchwB.2Drehung PZSchwB.2Wert matches 2..3 run tag @e[distance=..14,tag=EtiSchwB.2Bewegen] remove EtiSchwB.2Bewegen

# Für die Drehung werden die Mittelpunkt-Koordinaten der Bahn in Variablen gespeichert.
execute if entity @s[tag=EtiSchwB.2Drehen] store result score VarSchwB.2X PZSchwB.2Ausl run data get entity @s Pos[0] 100
execute if entity @s[tag=EtiSchwB.2Drehen] store result score VarSchwB.2Z PZSchwB.2Ausl run data get entity @s Pos[2] 100

# Um die Richtung abfragen zu können, wird der Wert des Spielers in eine Variable gespeichert.
execute if entity @s[tag=EtiSchwB.2Drehen] run scoreboard players operation VarSchwB.2Richtung PZSchwB.2Ausl = @s PZSchwB.2Ausl

# Wenn das Drehen möglich ist, werden alle Insassen ausgewählt und diese rufen jeweils fürs sich die Drehungs-Funktion auf.
execute if entity @s[tag=EtiSchwB.2Drehen] as @e[distance=..25,tag=EtiSchwB.2Bewegen] run function schwebebahn:v2drehung

# Wenn die Drehung möglich ist, werden alle Insassen so gedreht wie es der Fahrer vorgegeben hat.
execute if entity @s[tag=EtiSchwB.2Drehen] at @s[scores={PZSchwB.2Ausl=2}] as @e[distance=..25,tag=EtiSchwB.2Bewegen] at @s run teleport @s ~ ~ ~ ~90 ~
execute if entity @s[tag=EtiSchwB.2Drehen] at @s[scores={PZSchwB.2Ausl=3}] as @e[distance=..25,tag=EtiSchwB.2Bewegen] at @s run teleport @s ~ ~ ~ ~-90 ~

# Wenn das Fahren möglich ist, werden alle Insassen nach vorne bewegt und abhängig davon ob die Bahn nach unten oder oben fahren soll auch dies berücksichtigt.
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 4..6 at @s as @e[distance=..25,tag=EtiSchwB.2Bewegen] positioned as @s run teleport @s ^ ^ ^1

# Die bewegten Insassen in der Bahn erhalten ein Etikett, sodass sie von den hinteren Waggons nicht erneut erfasst werden. Haben alle Waggons die Bewegung durchgeführt, wird das Etikett entfernt.
tag @e[distance=..25,tag=EtiSchwB.2Bewegen,tag=!EtiSchwB.2Bewegt] add EtiSchwB.2Bewegt
execute if entity @s[scores={PZSchwB.2Wert=2}] run tag @e[distance=..36,tag=EtiSchwB.2Bewegt] remove EtiSchwB.2Bewegt

# Danach werden die Etiketten wieder entfernt.
tag @e[distance=..25,tag=EtiSchwB.2Bewegen] remove EtiSchwB.2Bewegen
tag @s[tag=EtiSchwB.2Drehen] remove EtiSchwB.2Drehen

# Wenn die Drehung möglich ist, wird die Bahn-Funktion von der neuen Richtung des Bahn-Markierers aus geladen.
execute at @s run function schwebebahn:v2bahn

# Die Bewegen-Funktion ruft sich pro Waggon erneut auf und merkt sich dabei die Waggon-Nummer.
scoreboard players add VarSchwB.2Nummer PZSchwB.2Wert 1
execute if score VarSchwB.2Nummer PZSchwB.2Wert matches 2 as @e[distance=..25,type=minecraft:marker,tag=EtiSchwB.2Bahn,sort=nearest] if score @s PZSchwB.2Wert = VarSchwB.2Nummer PZSchwB.2Wert at @s run function schwebebahn:v2bewegen

Variante 2: Drehungs-Funktion
Die Drehungs-Funktion dreht jeden einzelnen Insassen der Bahn nach rechts, nach links oder um 180°.

Editor Icon schwebebahn:v2drehung.mcfunction
# Die Position des Insassen wird ausgelesen und in Variablen gespeichert.
execute store result score VarSchwB.2DX PZSchwB.2Ausl run data get entity @s Pos[0] 100
execute store result score VarSchwB.2DZ PZSchwB.2Ausl run data get entity @s Pos[2] 100

# Von den Koordinaten des Insassen werden die Mittelpunkt-Koordinaten abgezogen um die Koordinaten auf den Nullpunkt zu bekommen.
scoreboard players operation VarSchwB.2DX PZSchwB.2Ausl -= VarSchwB.2X PZSchwB.2Ausl
scoreboard players operation VarSchwB.2DZ PZSchwB.2Ausl -= VarSchwB.2Z PZSchwB.2Ausl

# Je nach gewünschte Drehung, ob nach rechts, nach links oder umgedreht, wird eine der beiden oder beide Koordinaten mal minus eins gerechnet.
execute if score VarSchwB.2Richtung PZSchwB.2Ausl matches 2 run scoreboard players operation VarSchwB.2DZ PZSchwB.2Ausl *= KonstSchwB.2MINUSEINS PZSchwB.2Ausl
execute if score VarSchwB.2Richtung PZSchwB.2Ausl matches 3 run scoreboard players operation VarSchwB.2DX PZSchwB.2Ausl *= KonstSchwB.2MINUSEINS PZSchwB.2Ausl

# Ein Markierer wird an der Position des Insassen erzeugt. Dieser erhält auch die exakte Rotation.
execute at @s run summon minecraft:marker ~ ~ ~ {Tags:["EtiSchwB.2Alle","EtiSchwB.2Drehung"]}
execute at @s run teleport @e[type=minecraft:marker,tag=EtiSchwB.2Drehung,sort=nearest,limit=1] ~ ~ ~ ~ ~

# Anschließend wird die neue Position berechnet und in den Markierer gespeichert.
execute store result entity @e[type=minecraft:marker,tag=EtiSchwB.2Drehung,sort=nearest,limit=1] Pos[0] double 0.01 run scoreboard players operation VarSchwB.2DZ PZSchwB.2Ausl += VarSchwB.2X PZSchwB.2Ausl
execute store result entity @e[type=minecraft:marker,tag=EtiSchwB.2Drehung,sort=nearest,limit=1] Pos[2] double 0.01 run scoreboard players operation VarSchwB.2DX PZSchwB.2Ausl += VarSchwB.2Z PZSchwB.2Ausl

# Der Insasse wird an die neue gedrehte Position teleportiert.
teleport @s @e[type=minecraft:marker,tag=EtiSchwB.2Drehung,sort=nearest,limit=1]

# Danach wird der Markierer wieder gelöscht.
kill @e[type=minecraft:marker,tag=EtiSchwB.2Drehung,sort=nearest,limit=1]

Variante 2: Fahren-Funktion
Die Fahren-Funktion prüft ob die Bahn nach vorne fahren kann. Dazu wird geprüft ob sich Gleise voraus befinden und auch Platz vorhanden ist. Nur dann wird die Bewegen-Funktion aufgerufen.

Editor Icon schwebebahn:v2fahren.mcfunction
# Die beiden Variablen werden auf null gesetzt um später auf andere Werte gesetzt zu werden, sofern das möglich ist.
scoreboard players set VarSchwB.2Ebene PZSchwB.2Wert 0
scoreboard players set VarSchwB.2Fahren PZSchwB.2Wert 0

# Es wird geprüft ob sich eine Spur direkt vor der Bahn befindet.
execute positioned ^ ^7 ^11 if block ~ ~ ~ minecraft:black_concrete run scoreboard players set VarSchwB.2Ebene PZSchwB.2Wert 2

# Wenn bisher keine Spur gefunden wurde, wird geprüft ob sich die Bahn noch auf einer ebenen Spur befindet.
scoreboard players set VarSchwB.2Unbelegt PZSchwB.2Wert 0
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 0 if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] store result score VarSchwB.2Unbelegt PZSchwB.2Wert run clone ~-10 ~7 ~ ~10 ~7 ~ ~-10 ~7 ~ filtered minecraft:black_concrete force
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 0 if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 0..1 if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] store result score VarSchwB.2Unbelegt PZSchwB.2Wert run clone ~ ~7 ~-10 ~ ~7 ~10 ~ ~7 ~-10 filtered minecraft:black_concrete force
execute if score VarSchwB.2Unbelegt PZSchwB.2Wert matches 1.. run scoreboard players set VarSchwB.2Ebene PZSchwB.2Wert 2

# Wenn alle Prüfungen fehl schlugen befindet sich garkeine Spur voraus und der Spieler erhält eine Fehlermeldung.
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 0 at @s[tag=!EtiSchwB.2Halten] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] ["Schwebebahn.2:\n",{"text":"Keine Fahrbahn voraus!","color":"red","bold":true}]

# Wenn die Bahn ein Halten-Etikett besitzt, wird die Ebenen-Variable auf null gesetzt sodass scheinbar doch keine Spur voraus sei und der Spieler erhält eine Nachricht.
execute if entity @s[tag=EtiSchwB.2Halten] run scoreboard players set VarSchwB.2Ebene PZSchwB.2Wert 0
execute at @s[tag=EtiSchwB.2Halten] positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt,tag=EtiSchwB.2Steuern] ["Schwebebahn.2:\n",{"text":"Station oder Fahrbahn-Kreuzung erreicht!","color":"green","bold":true}]

# Wenn die Fahrt angehalten werden muss, wird die Variable entsprechend gesetzt.
execute if entity @s[tag=EtiSchwB.2Halten] run scoreboard players set VarSchwB.2Halten PZSchwB.2Ausl 1

# Das Etikett fürs Halten wird sofern vorhanden wieder entfernt und nur dann gegeben, wenn einen Block voraus eine rote Netherziegelstufe auf Spur-Ebene oder eine Ebene darunter sich befindet.
tag @s[tag=EtiSchwB.2Halten] remove EtiSchwB.2Halten
execute if block ^ ^7 ^1 minecraft:red_nether_brick_slab[type=top] run tag @s add EtiSchwB.2Halten

# Falls sich eine Spur voraus befindet, wird geprüft ob direkt vor der Bahn alles frei ist.
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 1..3 positioned ^ ^1 ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air positioned ~ ~1 ~ if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players set VarSchwB.2Fahren PZSchwB.2Wert 1

# Anschließend wird geprüft ob der untere Bereich vor der Bahn frei ist.
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 1..2 if score VarSchwB.2Fahren PZSchwB.2Wert matches 1 positioned ^ ^ ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players set VarSchwB.2Fahren PZSchwB.2Wert 2

# Ebenso wird geprüft ob der obere Bereich vor der Bahn frei ist.
execute if score VarSchwB.2Ebene PZSchwB.2Wert matches 2..3 if score VarSchwB.2Fahren PZSchwB.2Wert matches 1..2 positioned ^ ^5 ^11 if block ~ ~ ~ minecraft:air if block ^-1 ^ ^ minecraft:air if block ^1 ^ ^ minecraft:air if block ^-2 ^ ^ minecraft:air if block ^2 ^ ^ minecraft:air run scoreboard players add VarSchwB.2Fahren PZSchwB.2Wert 2

# Wenn eine Spur voraus war, aber der Bereich nicht frei ist, wird eine Fehlermeldung ausgegeben und der Tempomat deaktiviert.
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 0..3 run data modify entity @s[nbt={data:{EigSchwB.2Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} }] data."EigSchwB.2Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 1..3 at @s positioned ^ ^ ^9 run tellraw @p[distance=..5,tag=EtiSchwB.2Ausgewaehlt] ["Schwebebahn.2:\n",{"text":"Die Fahrbahn ist blockiert!","color":"red","bold":true}]

# Nur wenn die Fahrt unterbrochen wird, muss die entsprechende Variable auf eins gesetzt werden.
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 0..3 run scoreboard players set VarSchwB.2Halten PZSchwB.2Ausl 1

# Wenn die Fahrbahn frei ist, wird von der aktualisierten Position der Schwebebahn die Bahn-Funktion aufgerufen. Sofern die Tempo-Variable bereits bei null angekommen ist, ansonsten wird diese Funktion erneut aufgerufen.
scoreboard players set VarSchwB.2Nummer PZSchwB.2Wert 1
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 4..6 store result score VarSchwB.2Drehung PZSchwB.2Wert if entity @s[tag=EtiSchwB.2Halten]
execute if score VarSchwB.2Fahren PZSchwB.2Wert matches 4..6 at @s run function schwebebahn:v2bewegen

Variante 2: Bahn-Funktion
Die Bahn-Funktion platziert die Bahn an der neuen Position und löscht sie an der alten Position.

Editor Icon schwebebahn:v2bahn.mcfunction
# Wenn der Spieler die Richtung ändert, wird die Schwebebahn an der alten Position entfernt, sodass die Schwebebahn an der neuen Position erscheinen kann, ohne Rückstände zu hinterlassen.
execute at @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.2AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute at @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.2AltePosition,sort=nearest,limit=1] run fill ^ ^6 ^-9 ^ ^6 ^9 minecraft:air replace

# Falls der zweite Waggon diese Funktion aufruft, wird dieser um 180° gedreht, damit der Bahn-Waggon in die entgegengesetzte Richtung zeigt.
teleport @s[scores={PZSchwB.2Wert=2}] ~ ~ ~ ~180 0

# Der Waggon wird abhängig der Blickrichtung platziert.
execute at @s[y_rotation=45..135] run place template schwebebahn:v2bahn ~10 ~ ~2 180
execute at @s[y_rotation=135..-135] run place template schwebebahn:v2bahn ~-2 ~ ~10 counterclockwise_90
execute at @s[y_rotation=-135..-45] run place template schwebebahn:v2bahn ~-10 ~ ~-2 none
execute at @s[y_rotation=-45..45] run place template schwebebahn:v2bahn ~2 ~ ~-10 clockwise_90

# Der zweite Waggon wird wieder in die originale Richtung zurück gedreht.
teleport @s[scores={PZSchwB.2Wert=2}] ~ ~ ~ ~ 0

# Der Markierer für die alte Position wird an die aktuelle Stelle befördert.
teleport @e[distance=..8,type=minecraft:marker,tag=EtiSchwB.2AltePosition,sort=nearest,limit=1] ~ ~ ~ ~ ~

Variante 2: Stopp-Funktion
Die Stopp-Funktion entfernt die Punkte-Ziele, die Objekte und Gegenstände wieder.

Editor Icon schwebebahn:v2stopp.mcfunction
# Die Punkte-Ziele werden wieder gelöscht.
scoreboard objectives remove PZSchwB.2Ausl
scoreboard objectives remove PZSchwB.2Wert

# Die Rüstungsständer und das Holzschwert werden entfernt.
clear @a minecraft:armor_stand{EigSchwB.2Alle:true}
clear @a minecraft:wooden_sword{EigSchwB.2Alle:true}

# Falls die Etiketten noch vorhanden sind, werden sie entfernt.
tag @a[tag=EtiSchwB.2Auswahl] remove EtiSchwB.2Auswahl
tag @a[tag=EtiSchwB.2Steuern] remove EtiSchwB.2Steuern

# Die Schwebahn wird entfernt.
execute at @e[type=minecraft:marker,tag=EtiSchwB.2Bahn] run fill ^-2 ^ ^-10 ^2 ^5 ^10 minecraft:air replace
execute at @e[type=minecraft:marker,tag=EtiSchwB.2Bahn] run fill ^ ^6 ^-9 ^ ^6 ^9 minecraft:air replace

# Drops und alle Objekte werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigSchwB.2Alle:true} } }] add EtiSchwB.2Alle
kill @e[tag=EtiSchwB.2Alle]

# Der Chunk wird entladen.
forceload remove ~ ~
Advertisement