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

Die Eisenbahn ist ein Schienenfahrzeug dass von einem Fahrer bedient werden kann, welches auf dafür vorgegebenen Gleisstrecken fahren kann. Sie besteht immer aus einer Dampflok, welche beim Fahren den Dampf geräuschvoll untermahlt, und aus beliebig vielen Waggons die ihr hinter her folgen. Sie kann von einem Fahrer gesteuert werden, welcher sie auf geraden Gleisstrecken oder Gleiskurven steuern kann.

Variante 1[]

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

Diese Variante ist eine Eisenbahn-Dampflok, welche über den Chat gesteuert werden kann. Beim Einschalten erhält man vier Rüstungsständer die mit Namen kenntlich gemacht sind. wofür man sie benutzen kann. Der erste wird für das Platzieren der Eisenbahn verwendet, zwei nachfolgende Rüstungsständer können für das Platzieren der Gleisspur und der Gleiskreuzung verwendet werden. Der letzte wird für das Errichten der Station verwendet. Hat man eine Gleisstrecke damit erzeugt, kann man den Rüstungsständer für die Eisenbahn mittig ins Gleis platzieren. Dann erscheint eine Dampflok vor dem Spieler und dieser erhält ein Holzschwert, mit welchen man die Dampflok steuern kann. In diese kann man einsteigen, in dem man sich in die Lore setzt. Wählt man dabei das Holzschwert aus, erscheinen im Chat verschiedene Optionen für die Steuerung der Lok. Es gibt die Möglichkeit die Lok zu drehen, sofern die Gleise das zulassen und es gibt die Option den Tempomaten ein- und auszuschalten. Standardmäßig ist dieser ausgeschaltet. Beim Einschalten wird die Dampflok kontinuierlich vorwärts fahren, solange bis sie auf eine Kreuzung oder eine Station stößt. Sie wird auch angehalten, wenn der Spieler das Schwert nicht mehr ausgewählt hat oder die Fahrbahn blockiert ist oder nicht weiter führt. Waggons können platziert werden, in dem man den Eisenbahn-Rüstungsständer mit Hilfe der F-Taste in die Zweithand nimmt. dies löst einen Mechanismus aus, bei dem der Rüstungsständer nun einen Waggon platzieren kann. Der Rüstungsständer für die Station muss auch mittig in einem Gleis platziert werden, damit die Station errichtet wird. Um die Eisenbahn zu entfernen, muss die Lore im Fahrerbereich abgebaut werden.

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 eisenbahn:v1start.mcfunction
# Es werden zwei Punkte-Ziele erstellt.
scoreboard objectives add PZEisenB.1Ausl trigger ["Eisenbahn.1: ",{"text":"Auslöser für Optionen","bold":true}]
scoreboard objectives add PZEisenB.1Wert dummy ["Eisenbahn.1: ",{"text":"Wert der Variablen","bold":true}]

# Eine Konstante wird angelegt.
scoreboard players set KonstEisenB.1MINUSEINS PZEisenB.1Wert -1

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

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

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

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

# Ein Erklärtext wird den Spielern angezeigt.
tellraw @a[distance=..15] ["Eisenbahn.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 Eisenbahn 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 werden kann und die Spuren und Kreuzungen platziert werden können, in dem sie die entsprechenden Funktionen aufruft.

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

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

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

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

# Wenn der Eisenbahn-Rüstungsständer per F-Taste in die Zweithand geholt wurde, wird dem Spieler ein Etikett gegeben. Das wird benutzt um statt der Dampflok einen Waggon platzieren zu können. ein erneutes F-Drücken ändert es wieder in eine Lok um.
execute as @a[tag=!EtiEisenB.1Ausgewaehlt] if data entity @s Inventory[{Slot:-106b}].tag."EigEisenB.1Waggon" run tag @s add EtiEisenB.1Waggon

# Ein Rahmen wird erzeugt, in dem der Eisenbahn-Rüstungsständer kopiert wird, um ihn dort ändern zu können.
execute at @a[tag=EtiEisenB.1Waggon] run summon minecraft:item_frame ~ ~ ~ {Fixed:true,Tags:["EtiEisenB.1Alle","EtiEisenB.1Gegenstand"]}
execute as @a[tag=EtiEisenB.1Waggon] at @s run item replace entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,sort=nearest,limit=1] container.0 from entity @s weapon.offhand

# Der Zustand ob der Gegenstand einen Waggon erzeugt wird gewechselt, sodass er entweder ein Waggon wird oder keiner mehr ist.
execute at @a[tag=EtiEisenB.1Waggon] as @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,sort=nearest,limit=1] store success entity @s Item.tag."EigEisenB.1Waggon" byte 1 store success score @s PZEisenB.1Wert unless entity @s[nbt={Item:{tag:{EigEisenB.1Waggon:true} } }]

# Abhängig davon ob er ein Waggon erzeugen soll oder nicht, wird ein zusätzliches Etikett vergeben.
execute at @a[tag=EtiEisenB.1Waggon] run data modify entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,scores={PZEisenB.1Wert=1},sort=nearest,limit=1] Item.tag.EntityTag.Tags set value ["EtiEisenB.1Alle","EtiEisenB.1Erstellen","EtiEisenB.1Waggon"]
execute at @a[tag=EtiEisenB.1Waggon] run data modify entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,scores={PZEisenB.1Wert=0},sort=nearest,limit=1] Item.tag.EntityTag.Tags set value ["EtiEisenB.1Alle","EtiEisenB.1Erstellen"]

# Abhängig von dem neuen Zustand wird dieser dem Spieler mitgeteilt.
execute as @a[tag=EtiEisenB.1Waggon] at @s if entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,scores={PZEisenB.1Wert=1},sort=nearest,limit=1] run title @s actionbar ["",{"text":"waggon == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
execute as @a[tag=EtiEisenB.1Waggon] at @s if entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,scores={PZEisenB.1Wert=0},sort=nearest,limit=1] run title @s actionbar ["",{"text":"waggon == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Anschließend wird der Gegenstand in die Haupthand des spielers zurück kopiert.
execute as @a[tag=EtiEisenB.1Waggon] at @s run item replace entity @s weapon.mainhand from entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,sort=nearest,limit=1] container.0

# Die Zweithand und der Rahmen werden gelöscht.
execute at @a[tag=EtiEisenB.1Waggon] run kill @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.1Gegenstand,sort=nearest,limit=1]
execute as @a[tag=EtiEisenB.1Waggon] run item replace entity @s weapon.offhand with minecraft:air

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiEisenB.1Waggon] remove EtiEisenB.1Waggon

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

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

# Spieler die Sitzen und das Holzschwert ausgewählt haben, laden von ihrer Position aus mit dem Bahn-Markierer als Ausführer die Auslöser-Funktion.
execute as @a[tag=EtiEisenB.1Ausgewaehlt,tag=EtiEisenB.1Sitzen] unless entity @s[scores={PZEisenB.1Ausl=0}] on vehicle on vehicle at @s as @e[distance=..5,type=minecraft:marker,tag=EtiEisenB.1Bahn,sort=nearest,limit=1] run function eisenbahn: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=EtiEisenB.1Ausgewaehlt,tag=!EtiEisenB.1Auswahl,tag=!EtiEisenB.1Sitzen] actionbar ["",{"text":"Spieler sitzt == ","bold":true},{"text":"falsch","color":"red","bold":true}]
title @a[tag=!EtiEisenB.1Ausgewaehlt,tag=EtiEisenB.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=EtiEisenB.1Ausgewaehlt,tag=!EtiEisenB.1Auswahl] add EtiEisenB.1Auswahl
tag @a[tag=!EtiEisenB.1Ausgewaehlt,tag=EtiEisenB.1Auswahl] remove EtiEisenB.1Auswahl

# Die Eigenschaft des Bahn-Markierers wird in seinen Namen kopiert, da die Namensabfrage einfacher funktioniert.
execute as @e[type=minecraft:marker,tag=EtiEisenB.1Bahn] run data modify entity @s CustomName set from entity @s data."EigEisenB.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=EtiEisenB.1Bahn,tag=!EtiEisenB.1Waggon,name="wahr"] at @s unless entity @p[distance=..5,tag=EtiEisenB.1Sitzen,tag=EtiEisenB.1Ausgewaehlt] run data modify entity @s data."EigEisenB.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 #VarEisenB.1Tick PZEisenB.1Ausl 1
execute if score #VarEisenB.1Tick PZEisenB.1Ausl matches 4.. as @e[type=minecraft:armor_stand,tag=EtiEisenB.1Halter,nbt=!{Passengers:[{}]}] at @s run function eisenbahn:v1entfernen
execute if score #VarEisenB.1Tick PZEisenB.1Ausl matches 4.. as @e[type=minecraft:marker,tag=EtiEisenB.1Bahn,tag=!EtiEisenB.1Waggon,name="wahr"] at @s run scoreboard players set @p[distance=..5,tag=EtiEisenB.1Sitzen,tag=EtiEisenB.1Ausgewaehlt,scores={PZEisenB.1Ausl=0}] PZEisenB.1Ausl 7
execute if score #VarEisenB.1Tick PZEisenB.1Ausl matches 4.. run scoreboard players set #VarEisenB.1Tick PZEisenB.1Ausl 0

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

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

Variante 1: Bauwerks-Funktion
Die Bauwerks-Funktion sorgt dafür dass die Spur, die Spur-Kreuzung und die Station errichtet werden kann.

Editor Icon eisenbahn: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 ~ ~ ~ ~180 0

# Die gerade Spur wird platziert.
execute at @s[tag=EtiEisenB.1Spuren,y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^16 run place template eisenbahn:v1spur ~16 ~ ~-3 clockwise_90
execute at @s[tag=EtiEisenB.1Spuren,y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^16 run place template eisenbahn:v1spur ~-3 ~ ~-16 none

# Das Spur-Kreuz wird platziert.
execute at @s[tag=EtiEisenB.1SpurKreuz] run setblock ^ ^ ^15 minecraft:structure_block{mode:"LOAD",name:"eisenbahn:v1spur_kreuz",posY:0} replace

# Je nach Blickrichtung werden die entsprechenden Daten kopiert.
execute at @s[tag=EtiEisenB.1SpurKreuz,y_rotation=-135..135] unless entity @s[y_rotation=-45..45] run data merge block ^ ^ ^15 {rotation:"NONE",posX:-3,posZ:-16}
execute at @s[tag=EtiEisenB.1SpurKreuz,y_rotation=135..45] unless entity @s[y_rotation=-135..-45] run data merge block ^ ^ ^15 {rotation:"CLOCKWISE_90",posX:16,posZ:-3}

# Der Redstone-Block wird platziert.
execute at @s[tag=EtiEisenB.1SpurKreuz] run setblock ^ ^ ^14 minecraft:redstone_block replace

# Wenn die Station platziert werden soll, wird geprüft ob sich darunter überhaupt eine Spur befindet und nur dann wird der Konstruktionsblock dafür platziert und der Rüstungsständer erhält dann den Wert eins.
execute at @s[tag=EtiEisenB.1Station] store success score @s PZEisenB.1Wert if block ^ ^ ^-1 minecraft:stone_brick_stairs[half=bottom] if block ^ ^ ^1 minecraft:stone_brick_stairs[half=bottom] run setblock ^-20 ^ ^3 minecraft:structure_block{mode:"LOAD",name:"eisenbahn:v1station",posY:0} replace

# Je nach Blickrichtung des Rüstungsständers werden die benötigten Daten in den Konstruktionsblock gespeichert.
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1},y_rotation=-135..-45] run data merge block ^-20 ^ ^3 {rotation:"NONE",posX:0,posZ:-40}
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1},y_rotation=-45..45] run data merge block ^-20 ^ ^3 {rotation:"CLOCKWISE_90",posX:40,posZ:0}
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1},y_rotation=45..135] run data merge block ^-20 ^ ^3 {rotation:"CLOCKWISE_180",posX:0,posZ:40}
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1},y_rotation=135..-135] run data merge block ^-20 ^ ^3 {rotation:"COUNTERCLOCKWISE_90",posX:-40,posZ:0}

# Nur wenn der Konstruktionsblock platziert werden konnte, wird ein Redstone-Block daneben platziert um diesen zu aktivieren.
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1}] run setblock ^-20 ^ ^4 minecraft:redstone_block replace

# Es wird eine rote Netherziegelstufe platziert, sodass die Bahn dort hält.
execute at @s[tag=EtiEisenB.1Station,scores={PZEisenB.1Wert=1}] run setblock ~ ~ ~ minecraft:red_nether_brick_slab replace

# Falls keine Spur gefunden wurde um die Station zu platzieren, wird eine Fehlermeldung ausgegeben.
execute at @s[tag=EtiEisenB.1Station] unless entity @s[scores={PZEisenB.1Wert=1}] run tellraw @a[distance=..5] ["Eisenbahn.1:\n",{"text":"Unter dem Rüstungsständer wurde keine Spur gefunden oder der Rüstungsständer wurde quer zur Spur platziert!","color":"red","bold":true}]

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

Variante 1: Erstellen-Funktion
Die Erstellen-Funktion erzeugt die Dampflok und den Waggon.

Editor Icon eisenbahn:v1erstellen.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 ^ ^1 ^-14 ~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 result score @s PZEisenB.1Wert if block ^1 ^-1 ^ minecraft:stone_brick_stairs[half=bottom]
execute at @s[scores={PZEisenB.1Wert=1}] store result score @s PZEisenB.1Wert if block ^-1 ^-1 ^ minecraft:stone_brick_stairs[half=bottom]
execute if entity @s[scores={PZEisenB.1Wert=0}] run tellraw @p[distance=..5] ["Eisenbahn.1:\n",{"text":"Es wurde unter der zu erzeugenden Eisenbahn keine vollständige Eisenbahn-Spur gefunden!","color":"red","bold":true}]
tag @s[scores={PZEisenB.1Wert=0}] remove EtiEisenB.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=EtiEisenB.1Erstellen] store result score @s PZEisenB.1Wert run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:structure_void replace minecraft:air
execute at @s[tag=EtiEisenB.1Erstellen] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace minecraft:structure_void
tag @s[tag=EtiEisenB.1Erstellen,scores={PZEisenB.1Wert=..1304}] remove EtiEisenB.1Erstellen

# Falls kein Platz vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiEisenB.1Erstellen,scores={PZEisenB.1Wert=1..}] run tellraw @p[distance=..5] ["Eisenbahn.1:\n",{"text":"Für die Eisenbahn ist an der geforderten Position kein Platz!","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=EtiEisenB.1Erstellen,tag=!EtiEisenB.1Waggon] run give @p[distance=..5] minecraft:wooden_sword{EigEisenB.1Alle:true,EigEisenB.1Steuer:true,Unbreakable:true,HideFlags:6,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Nullschaden",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 die eigentliche Bahn wird erzeugt.
execute at @s[tag=EtiEisenB.1Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.1Alle","EtiEisenB.1Entfernen","EtiEisenB.1Ausrichten","EtiEisenB.1Bahn"],data:{EigEisenB.1Tempomat:'{"bold":true,"color":"red","text":"falsch"}'} }

execute at @s[tag=EtiEisenB.1Erstellen,tag=EtiEisenB.1Waggon] run tag @e[distance=..1,type=minecraft:marker,tag=EtiEisenB.1Bahn,sort=nearest,limit=1] add EtiEisenB.1Waggon
execute at @s[tag=EtiEisenB.1Erstellen,tag=EtiEisenB.1Waggon] run data merge entity @e[distance=..1,type=minecraft:marker,tag=EtiEisenB.1Waggon,sort=nearest,limit=1] {data:{EigEisenB.1Drehung:[] } }

# Ein zweiter Markierer, der die alte Position der Bahn markiert, wird erzeugt.
execute at @s[tag=EtiEisenB.1Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.1Alle","EtiEisenB.1Entfernen","EtiEisenB.1Ausrichten","EtiEisenB.1Unbeachten","EtiEisenB.1AltePosition"]}

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

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

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

# Danach wird ihnen das Etikett entfernt.
execute if entity @s[tag=EtiEisenB.1Erstellen] run tag @e[distance=..13,tag=EtiEisenB.1Ausrichten,sort=nearest,limit=3] remove EtiEisenB.1Ausrichten

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

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

Variante 1: Entfernen-Funktion
Die Entfernen-Funktion entfernt alle Bestandteile der Eisenbahn und erzeugt einen Drop mit dem man sie erneut erzeugen kann.

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

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

# Wenn die Bahn bereits vorhanden ist, wird diese entfernt.
execute if entity @s[tag=!EtiEisenB.1Erstellen] at @e[distance=..3,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace #eisenbahn:v1droppen
execute if entity @s[tag=!EtiEisenB.1Erstellen] at @e[distance=..3,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace

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

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

Variante 1: Auslöser-Funktion
Die Auslöser-Funktion ermöglicht es, dass im Chat alle Steuerungs-Optionen der Eisenbahn angezeigt werden und ausgeführt werden können.

Editor Icon eisenbahn: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 PZEisenB.1Ausl run scoreboard players get @p[distance=..1,tag=EtiEisenB.1Ausgewaehlt,scores={PZEisenB.1Ausl=1..}] PZEisenB.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 drei anderen Richtungen die Bahn drehen möchte.
execute store success score @s[scores={PZEisenB.1Ausl=0}] PZEisenB.1Ausl unless data entity @s data."EigEisenB.1Richtung"[1]
execute at @s[scores={PZEisenB.1Ausl=1..4}] run function eisenbahn:v1drehen

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

# Wenn der Spieler den Tempomat eingeschaltet hat, wird signalisiert dass er fahren möchte, dadurch wird die Fahren-Funktion geladen.
execute at @s[scores={PZEisenB.1Ausl=7}] run function eisenbahn: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={PZEisenB.1Ausl=7},nbt={data:{EigEisenB.1Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} }] run tellraw @p[distance=..1,tag=EtiEisenB.1Sitzen,tag=EtiEisenB.1Ausgewaehlt] ["Strassenbahn.1:\n",{"text":"richtung = ","bold":true},{"text":"drehen(","extra":[{"entity":"@s","nbt":"data.\"EigEisenB.1Richtung\"[1]","color":"gray","interpret":true},{"text":")"}],"color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für nach Rechts"} },"clickEvent":{"action":"run_command","value":"/trigger PZEisenB.1Ausl set 2"} },"\n",{"text":"richtung = ","bold":true},{"text":"drehen(","extra":[{"entity":"@s","nbt":"data.\"EigEisenB.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 PZEisenB.1Ausl set 3"} },"\n",{"text":"richtung = ","bold":true},{"text":"drehen(","extra":[{"entity":"@s","nbt":"data.\"EigEisenB.1Richtung\"[2]","color":"gray","interpret":true},{"text":")"}],"color":"gray","bold":true,"underlined":true,"hoverEvent":{"action":"show_text","contents":{"text":"Tippe für Drehung um 180°"} },"clickEvent":{"action":"run_command","value":"/trigger PZEisenB.1Ausl set 4"} },"\n",{"text":"richtung == ","bold":true},{"entity":"@s","nbt":"data.\"EigEisenB.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 PZEisenB.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 PZEisenB.1Ausl set 6"} },"\n",{"text":"tempomat == ","bold":true},{"entity":"@s","nbt":"data.\"EigEisenB.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=EtiEisenB.1Ausgewaehlt] PZEisenB.1Ausl
scoreboard players set @p[distance=..1,tag=EtiEisenB.1Ausgewaehlt] PZEisenB.1Ausl 0

Variante 1: Drehen-Funktion
Die Drehen-Funktion prüft ob eine Drehung der Eisenbahn möglich ist und ruft nur dann die Bewegen-Funktion auf.

Editor Icon eisenbahn: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 VarEisenB.1Spur PZEisenB.1Wert 0
scoreboard players set VarEisenB.1Drehen PZEisenB.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 entity @s[scores={PZEisenB.1Ausl=2..3}] rotated ~90 0 positioned ^ ^-1 ^2 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] positioned ^ ^ ^-4 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.1Spur PZEisenB.1Wert 1

# Wenn keine Spur in Dreh-Richtung vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 0 at @s[scores={PZEisenB.1Ausl=2..4}] run tellraw @p[distance=..5,tag=EtiEisenB.1Ausgewaehlt] ["Eisenbahn.1:\n",{"text":"Die Eisenbahn kann an dieser Stelle aufgrund von fehlenden Gleisen nicht gedreht werden!","color":"red","bold":true}]

# Wenn der Spieler nach rechts oder links abbigen will, wird geprüft ob Spuren rechts oder links vorhanden sind, anschließend wird geprüft ob rechts wie auch links nichts im Weg ist.
scoreboard players set VarEisenB.1Unbelegt PZEisenB.1Wert 0
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if entity @s[scores={PZEisenB.1Ausl=2..3}] store result score VarEisenB.1Unbelegt PZEisenB.1Wert run fill ^-14 ^ ^-2 ^-3 ^6 ^2 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 1.. run fill ^-14 ^ ^-2 ^-3 ^6 ^2 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 420 run scoreboard players set VarEisenB.1Drehen PZEisenB.1Wert 1

scoreboard players set VarEisenB.1Unbelegt PZEisenB.1Wert 0
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Drehen PZEisenB.1Wert matches 1 if entity @s[scores={PZEisenB.1Ausl=2..3}] store result score VarEisenB.1Unbelegt PZEisenB.1Wert run fill ^14 ^ ^-2 ^3 ^6 ^2 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Drehen PZEisenB.1Wert matches 1 if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 1.. run fill ^14 ^ ^-2 ^3 ^6 ^2 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Drehen PZEisenB.1Wert matches 1 if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 420 run scoreboard players set VarEisenB.1Drehen PZEisenB.1Wert 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={PZEisenB.1Ausl=4}] run scoreboard players set VarEisenB.1Drehen PZEisenB.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 VarEisenB.1Spur PZEisenB.1Wert matches 1 if score VarEisenB.1Drehen PZEisenB.1Wert matches 0..1 at @s[scores={PZEisenB.1Ausl=2..4}] run tellraw @p[distance=..5,tag=EtiEisenB.1Ausgewaehlt] ["Eisenbahn.1:\n",{"text":"Die Eisenbahn kann an dieser Stelle aufgrund von Platzmangel nicht gedreht werden!","color":"red","bold":true}]

# Wenn die Bahn gedreht werden kann, wird die Bewegen-Funktion mit entsprechend gesetzten Variablen aufgerufen.
scoreboard players set VarEisenB.1Drehung PZEisenB.1Wert 0
execute if score VarEisenB.1Drehen PZEisenB.1Wert matches 2 run scoreboard players operation VarEisenB.1Drehung PZEisenB.1Wert = @s PZEisenB.1Ausl
execute if score VarEisenB.1Drehen PZEisenB.1Wert matches 2 run function eisenbahn:v1bewegen

# Dem Bahn-Markierer wird die Richtungs-Eigenschaft gegeben, sodass sie abhängig der Blickrichtung, richtig sortiert werden kann.
data modify entity @s data."EigEisenB.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."EigEisenB.1Richtung" append from entity @s data."EigEisenB.1Richtung"[0]
data remove entity @s[y_rotation=135..45] data."EigEisenB.1Richtung"[0]

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

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

Variante 1: Bewegen-Funktion
Die Bewegen-Funktion bewegt die Insassen der Eisenbahn nach vorne oder dreht sie in die gewünschte Richtung.

Editor Icon eisenbahn:v1bewegen.mcfunction
# Wenn die Bahn anhalten muss wegen einer Station oder Kreuzung, so wird den zwei Waggons Nummer zwei und drei in ihren Datenbereich ein neuer Listen-Eintrag hinzugefügt, dieser wird ans Ende der Liste gesetzt.
execute if entity @s[tag=EtiEisenB.1Waggon] if score VarEisenB.1Fahren PZEisenB.1Wert matches 4..6 if score VarEisenB.1Drehung PZEisenB.1Wert matches 1..3 run data modify entity @s data."EigEisenB.1Drehung" append value 0

# Wenn der Spieler den ersten Waggon dreht, wird den beiden anderen Waggons der Drehungs-Richtungs-Wert in die Liste übergeben, damit sie in dem Moment wo sie an eine Kreuzung kommen, wissen in welche Richtung sie steuern müssen.
execute if entity @s[tag=EtiEisenB.1Waggon] if score VarEisenB.1Drehung PZEisenB.1Wert matches 1..3 store result entity @s data."EigEisenB.1Drehung"[-1] int 1 run scoreboard players get VarEisenB.1Drehung PZEisenB.1Wert

# Wenn der Spieler eine Drehung anordnet, wird dies mit einem Etikett markiert.
execute if entity @s[tag=!EtiEisenB.1Waggon] if score VarEisenB.1Drehung PZEisenB.1Wert matches 2..3 run tag @s add EtiEisenB.1Drehen

# Wenn die beiden hinteren Waggons auf eine Kreuzung gestoßen sind, wird mit Hilfe eines Etiketts dieser Umstand markiert.
execute if entity @s[tag=EtiEisenB.1Waggon] store result score VarEisenB.1Unbelegt PZEisenB.1Wert run clone ~ ~-2 ~ ~ ~-1 ~ ~ ~-2 ~ filtered minecraft:red_nether_brick_slab force
execute if entity @s[tag=EtiEisenB.1Waggon] if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 1..2 unless score VarEisenB.1Drehung PZEisenB.1Wert matches 1..3 run tag @s add EtiEisenB.1Drehen

# Wenn die beiden hinteren Waggons der Bahn drehen sollen, wird der erste Wert in der Liste ausgelesen und in dem Punkte-Ziel gespeichert und anschließend wird der erste Listeneintrag gelöscht.
execute store result score @s[tag=EtiEisenB.1Drehen,tag=EtiEisenB.1Waggon] PZEisenB.1Ausl run data get entity @s data."EigEisenB.1Drehung"[0]
data remove entity @s[tag=EtiEisenB.1Drehen,tag=EtiEisenB.1Waggon] data."EigEisenB.1Drehung"[0]

# Falls der ausgelesene Drehungs-Richtungs-Wert, nicht nach links oder rechts vorgibt, so wird der Drehvorgang gar nicht erst eingeleitet.
execute if entity @s[tag=EtiEisenB.1Drehen,tag=EtiEisenB.1Waggon] unless entity @s[scores={PZEisenB.1Ausl=2..3}] run tag @s remove EtiEisenB.1Drehen

# Es werden alle Insassen, je nach Blickrichtung der Bahn, mit einem Etikett ausgestattet.
execute at @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ~-14 ~-1 ~-2 run tag @e[dx=28,dy=8,dz=4,tag=!EtiEisenB.1Sitzen,tag=!EtiEisenB.1Unbeachten,tag=!EtiEisenB.1Bewegt] add EtiEisenB.1Bewegen
execute at @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ~-2 ~-1 ~-14 run tag @e[dx=4,dy=8,dz=28,tag=!EtiEisenB.1Sitzen,tag=!EtiEisenB.1Unbeachten,tag=!EtiEisenB.1Bewegt] add EtiEisenB.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=!EtiEisenB.1Drehen,tag=EtiEisenB.1Waggon] if score VarEisenB.1Drehung PZEisenB.1Wert matches 2..3 run tag @e[distance=..20,tag=EtiEisenB.1Bewegen] remove EtiEisenB.1Bewegen

# Für die Drehung werden die Mittelpunkt-Koordinaten der Bahn in Variablen gespeichert.
execute if entity @s[tag=EtiEisenB.1Drehen] store result score VarEisenB.1X PZEisenB.1Wert run data get entity @s Pos[0] 100
execute if entity @s[tag=EtiEisenB.1Drehen] store result score VarEisenB.1Z PZEisenB.1Wert 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=EtiEisenB.1Drehen] run scoreboard players operation VarEisenB.1Richtung PZEisenB.1Wert = @s PZEisenB.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=EtiEisenB.1Drehen] as @e[distance=..20,tag=EtiEisenB.1Bewegen] run function eisenbahn:v1drehung

# Wenn die Drehung möglich ist, werden alle Insassen so gedreht wie es der Fahrer vorgegeben hat.
execute if entity @s[tag=EtiEisenB.1Drehen] at @s[scores={PZEisenB.1Ausl=2}] as @e[distance=..20,tag=EtiEisenB.1Bewegen] at @s run teleport @s ~ ~ ~ ~90 ~
execute if entity @s[tag=EtiEisenB.1Drehen] at @s[scores={PZEisenB.1Ausl=3}] as @e[distance=..20,tag=EtiEisenB.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 VarEisenB.1Fahren PZEisenB.1Wert matches 4..6 at @s as @e[distance=..20,tag=EtiEisenB.1Bewegen] positioned as @s run teleport @s ^ ^ ^1
execute if score VarEisenB.1Fahren PZEisenB.1Wert matches 5 as @e[distance=..20,tag=EtiEisenB.1Bewegen] at @s run teleport @s ~ ~-1 ~
execute if score VarEisenB.1Fahren PZEisenB.1Wert matches 6 as @e[distance=..20,tag=EtiEisenB.1Bewegen] at @s run teleport @s ~ ~1 ~

# Damit nur die Insassen des jeweiligen Waggons bewegt werden, erhalten alle bereits bewegten Insassen ein Etikett, welches erst beim Abschließen der Bewegung bei allen drei Waggons wieder entfernt wird.
tag @e[distance=..20,tag=EtiEisenB.1Bewegen,tag=!EtiEisenB.1Bewegt] add EtiEisenB.1Bewegt

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

# Mit der aktualisierten Position der Eisenbahn, wird die Bahn-Funktion aufgerufen.
execute at @s run function eisenbahn:v1bahn

# Die Bewegen-Funktion ruft sich pro Waggon erneut auf und merkt sich dabei die Waggon-Nummer.
tag @s add EtiEisenB.1Fahren
execute at @s positioned ^ ^ ^-20 as @e[distance=..50,type=minecraft:marker,tag=EtiEisenB.1Bahn,tag=EtiEisenB.1Waggon,tag=!EtiEisenB.1Fahren,sort=nearest,limit=1] at @s run function eisenbahn:v1bewegen

# Die Etiketten werden nach dem rekursiven Aufruf der Bewegen-Funktion wieder entfernt.
tag @s[tag=EtiEisenB.1Fahren] remove EtiEisenB.1Fahren
tag @e[distance=..20,tag=EtiEisenB.1Bewegt] remove EtiEisenB.1Bewegt

Variante 1: Drehungs-Funktion
Die Drehungs-Funktion dreht jeden einzelnen Insassen um die gewünschte Drehung.

Editor Icon eisenbahn:v1drehung.mcfunction
# Die Position des Insassen wird ausgelesen und in Variablen gespeichert.
execute store result score VarEisenB.1DX PZEisenB.1Wert run data get entity @s Pos[0] 100
execute store result score VarEisenB.1DZ PZEisenB.1Wert 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 VarEisenB.1DX PZEisenB.1Wert -= VarEisenB.1X PZEisenB.1Wert
scoreboard players operation VarEisenB.1DZ PZEisenB.1Wert -= VarEisenB.1Z PZEisenB.1Wert

# 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 VarEisenB.1Richtung PZEisenB.1Wert matches 2..4 unless score VarEisenB.1Richtung PZEisenB.1Wert matches 3 run scoreboard players operation VarEisenB.1DZ PZEisenB.1Wert *= KonstEisenB.1MINUSEINS PZEisenB.1Wert
execute if score VarEisenB.1Richtung PZEisenB.1Wert matches 3..4 run scoreboard players operation VarEisenB.1DX PZEisenB.1Wert *= KonstEisenB.1MINUSEINS PZEisenB.1Wert
execute if score VarEisenB.1Richtung PZEisenB.1Wert matches 4 run scoreboard players operation VarEisenB.1DZ PZEisenB.1Wert >< VarEisenB.1DX PZEisenB.1Wert

# Ein Markierer wird an der Position des Insassen erzeugt. Dieser erhält auch die exakte Rotation.
execute at @s run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.1Alle","EtiEisenB.1Drehung"]}
execute at @s run teleport @e[type=minecraft:marker,tag=EtiEisenB.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=EtiEisenB.1Drehung,sort=nearest,limit=1] Pos[0] double 0.01 run scoreboard players operation VarEisenB.1DZ PZEisenB.1Wert += VarEisenB.1X PZEisenB.1Wert
execute store result entity @e[type=minecraft:marker,tag=EtiEisenB.1Drehung,sort=nearest,limit=1] Pos[2] double 0.01 run scoreboard players operation VarEisenB.1DX PZEisenB.1Wert += VarEisenB.1Z PZEisenB.1Wert

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

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

Variante 1: Fahren-Funktion
Die Fahren-Funktion prüft ob die Eisenbahn nach vorne fahren kann und nur dann wird die Bewegen-Funktion aufgerufen.

Editor Icon eisenbahn: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 VarEisenB.1Ebene PZEisenB.1Wert 0
scoreboard players set VarEisenB.1Fahren PZEisenB.1Wert 0

# Zuerst wird geprüft ob voraus eine Spur eine Ebene höher als die aktuelle Fahrbahn ist.
execute positioned ^ ^ ^15 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.1Ebene PZEisenB.1Wert 3

# Es wird geprüft ob sich eine Spur direkt vor der Bahn befindet.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 0 positioned ^ ^-1 ^15 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.1Ebene PZEisenB.1Wert 2

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

# Wenn auch dass nicht mehr der Fall ist, wird geprüft ob die Spur eine Ebene unter der aktuellen Spur ist.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 0 positioned ^ ^-2 ^-14 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.1Ebene PZEisenB.1Wert 1

# Wenn alle Prüfungen fehl schlugen befindet sich garkeine Spur voraus und der Spieler erhält eine Fehlermeldung.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 0 at @s[tag=!EtiEisenB.1Halten] run tellraw @p[distance=..5,tag=EtiEisenB.1Ausgewaehlt] ["Eisenbahn.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=EtiEisenB.1Halten] run scoreboard players set VarEisenB.1Ebene PZEisenB.1Wert 0
execute at @s[tag=EtiEisenB.1Halten] run tellraw @p[distance=..5,tag=EtiEisenB.1Ausgewaehlt] ["Eisenbahn.1:\n",{"text":"Station oder Fahrbahn-Kreuzung erreicht!","color":"green","bold":true}]

# Das Etikett fürs Halten wird sofern vorhanden wieder entfernt und nur dann wieder vergeben, wenn einen Block voraus eine rote Netherziegelstufe auf Spur-Ebene oder eine Ebene darunter sich befindet.
tag @s[tag=EtiEisenB.1Halten] remove EtiEisenB.1Halten
execute store result score VarEisenB.1Unbelegt PZEisenB.1Wert run clone ^ ^-2 ^1 ^ ^-1 ^1 ^ ^-2 ^1 filtered minecraft:red_nether_brick_slab force
execute if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 1..2 run tag @s add EtiEisenB.1Halten

# Falls sich eine Spur voraus befindet, wird geprüft ob direkt vor der Bahn alles frei ist.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 1..3 positioned ^ ^1 ^15 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 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 VarEisenB.1Fahren PZEisenB.1Wert 1

# Anschließend wird geprüft ob der untere Bereich vor der Bahn frei ist.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 1..2 if score VarEisenB.1Fahren PZEisenB.1Wert matches 1 positioned ^ ^ ^15 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 VarEisenB.1Fahren PZEisenB.1Wert 2

# Ebenso wird geprüft ob der obere Bereich vor der Bahn frei ist.
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 2..3 if score VarEisenB.1Fahren PZEisenB.1Wert matches 1..2 positioned ^ ^6 ^15 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 VarEisenB.1Fahren PZEisenB.1Wert 2

# Je nach dem was frei ist, wird dann geprüft ob die Bahn nach unten fahren kann. Ist der Bereich unter der Bahn frei wird die Variable entsprechend gesetzt.
scoreboard players set VarEisenB.1Unbelegt PZEisenB.1Wert 0
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 1 if score VarEisenB.1Fahren PZEisenB.1Wert matches 2 store result score VarEisenB.1Unbelegt PZEisenB.1Wert positioned ^2 ^-1 ^14 run fill ^ ^ ^ ^-4 ^ ^-27 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 1 if score VarEisenB.1Fahren PZEisenB.1Wert matches 2 positioned ^2 ^-1 ^14 run fill ^ ^ ^ ^-4 ^ ^-27 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 140 run scoreboard players set VarEisenB.1Fahren PZEisenB.1Wert 5

# Falls Bereiche frei sind, die fürs nach oben Fahren deuten, wird geprüft ob die Bahn nach oben fahren könnte und dann entsprechend eine Variable mit Wert gesetzt.
scoreboard players set VarEisenB.1Unbelegt PZEisenB.1Wert 0
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 3 if score VarEisenB.1Fahren PZEisenB.1Wert matches 3 store result score VarEisenB.1Unbelegt PZEisenB.1Wert positioned ^2 ^7 ^14 run fill ^ ^ ^ ^-4 ^ ^-27 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.1Ebene PZEisenB.1Wert matches 3 if score VarEisenB.1Fahren PZEisenB.1Wert matches 3 positioned ^2 ^7 ^14 run fill ^ ^ ^ ^-4 ^ ^-27 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.1Unbelegt PZEisenB.1Wert matches 140 run scoreboard players set VarEisenB.1Fahren PZEisenB.1Wert 6

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

# Wenn das Fahren möglich ist, wird die Bewegen-Funktion geladen.
scoreboard players set VarEisenB.1Drehung PZEisenB.1Ausl 0
execute if score VarEisenB.1Fahren PZEisenB.1Wert matches 4..6 store result score VarEisenB.1Drehung PZEisenB.1Wert if entity @s[tag=EtiEisenB.1Halten]
execute if score VarEisenB.1Fahren PZEisenB.1Wert matches 4..6 run function eisenbahn:v1bewegen

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

Editor Icon eisenbahn:v1bahn.mcfunction
# Wenn der Spieler die Richtung ändert, wird die Eisenbahn an der alten Position entfernt, sodass die Eisenbahn an der neuen Position erscheinen kann, ohne Rückstände zu hinterlassen.
execute if entity @s[tag=!EtiEisenB.1Waggon] at @e[distance=..8,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace #eisenbahn:v1droppen
execute if entity @s[tag=!EtiEisenB.1Waggon] at @e[distance=..8,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace

# Falls es sich bei der Bahn um einen Waggon handelt, wird ein kleinerer Teil entfernt.
execute if entity @s[tag=EtiEisenB.1Waggon] at @e[distance=..8,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-6 ^2 ^8 ^6 minecraft:air replace #eisenbahn:v1droppen
execute if entity @s[tag=EtiEisenB.1Waggon] at @e[distance=..8,type=minecraft:marker,tag=EtiEisenB.1AltePosition,sort=nearest,limit=1] run fill ^-2 ^ ^-6 ^2 ^8 ^6 minecraft:air replace

# Bei jedem vierten Aufruf für die Lok, Dampf und Geräusche erzeugt.
scoreboard players add @s PZEisenB.1Wert 1
execute if entity @s[scores={PZEisenB.1Wert=4..}] run playsound minecraft:entity.wither.shoot voice @a[distance=..50] ^ ^8 ^12 0.4 1 0.1
execute if entity @s[scores={PZEisenB.1Wert=4..}] run playsound minecraft:entity.minecart.inside voice @a[distance=..50] ^ ^8 ^12 0.4 1 0.1
execute if entity @s[scores={PZEisenB.1Wert=4..}] run particle minecraft:large_smoke ^ ^8 ^12 0.5 2 0.5 0 20 force @a[distance=..25]
execute if entity @s[scores={PZEisenB.1Wert=4..}] run particle minecraft:firework ^ ^8 ^12 0.5 2 0.5 0 10 force @a[distance=..25]
scoreboard players set @s[scores={PZEisenB.1Wert=4..}] PZEisenB.1Wert 0

# Die Dampflok wird abhängig der Blickrichtung platziert.
execute at @s[y_rotation=45..135,tag=!EtiEisenB.1Waggon] run place template eisenbahn:v1bahn ~-14 ~ ~-2 none
execute at @s[y_rotation=135..-135,tag=!EtiEisenB.1Waggon] run place template eisenbahn:v1bahn ~2 ~ ~-14 clockwise_90
execute at @s[y_rotation=-135..-45,tag=!EtiEisenB.1Waggon] run place template eisenbahn:v1bahn ~14 ~ ~2 180
execute at @s[y_rotation=-45..45,tag=!EtiEisenB.1Waggon] run place template eisenbahn:v1bahn ~-2 ~ ~14 counterclockwise_90

# Der Waggon wird abhängig der Blickrichtung platziert.
execute at @s[y_rotation=45..135,tag=EtiEisenB.1Waggon] run place template eisenbahn:v1bahn_waggon ~-6 ~ ~-2 none
execute at @s[y_rotation=135..-135,tag=EtiEisenB.1Waggon] run place template eisenbahn:v1bahn_waggon ~2 ~ ~-6 clockwise_90
execute at @s[y_rotation=-135..-45,tag=EtiEisenB.1Waggon] run place template eisenbahn:v1bahn_waggon ~6 ~ ~2 180
execute at @s[y_rotation=-45..45,tag=EtiEisenB.1Waggon] run place template eisenbahn:v1bahn_waggon ~-2 ~ ~6 counterclockwise_90

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

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht alle Punkte-Ziele und alle Bestandteile der Eisenbahn.

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

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

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

# Die Eisenbahn wird entfernt.
execute at @e[type=minecraft:marker,tag=EtiEisenB.1Bahn] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace #eisenbahn:v1droppen
execute at @e[type=minecraft:marker,tag=EtiEisenB.1Bahn] run fill ^-2 ^ ^-14 ^2 ^8 ^14 minecraft:air replace

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

# Der Chunk wird wieder entladen.
forceload remove ~ ~

Variante 2[]

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

Diese Variante ist eine Eisenbahn-Dampflok, welche über das Inventar einer Güterlore bedienbar ist, welche als Benutzeroberfläche aufgebaut ist. Beim Einschalten erhält der Spieler vier Rüstungsständer. Der erste ist für das Platzieren der Eisenbahn, die zwei nächsten Rüstungsständer werden dafür benutzt um die Gleisspuren und die Gleiskreuzungen zu platzieren. der letzte wird verwendet um die Station zu errichten. Hat man Gleise gebaut, kann man die Dampflok darauf platzieren. Man erhält dann ein Holzschwert, welches man auswählen muss um die Dampflok zu steuern. Nur dann erscheint eine Güterlore in der sich mehrere Gegenstände befinden. Die Kompasse sind dazu da um die Eisenbahn zu drehen, während die Lore dafür verwendet wird um den Tempomaten zu aktivieren. Dieser sorgt dafür, wenn er eingeschaltet ist, dass die Dampflok unaufhörlich vorwärts fährt. Sie beendet erst dann die Fahrt, wenn eine Kreuzung oder Station erreicht wurde. Ungeplant hört sie auch auf vorwärts zu fahren, wenn die Gleisstrecke endet, wenn Hindernisse auf der Gleisstrecke sind oder wenn der Fahrer das Holzschwert nicht mehr ausgewählt hat oder aus der Fahrer-Lore ausgestiegen ist. Um Waggons zu platzieren muss man den Eisenbahn-Rüstungsständer auswählen und dabei die F-Taste einmal drücken. Das löst einen Mechanismus aus, sodass der nun platzierte Rüstungsständer Waggons anstelle von Dampfloks erzeugt. Durch ein erneutes F-Drücken kann wieder die Dampflok platziert werden. Die erzeugten Waggons folgen der Dampflok, so fern sie hinter ihr aufgestellt wurden.

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 eisenbahn:v2start.mcfunction
# Es werden zwei Punkte-Ziele erstellt.
scoreboard objectives add PZEisenB.2Ausl dummy ["Eisenbahn.2: ",{"text":"Auslöser für Optionen","bold":true}]
scoreboard objectives add PZEisenB.2Wert dummy ["Eisenbahn.2: ",{"text":"Wert der Variablen","bold":true}]

# Eine Konstante wird angelegt.
scoreboard players set KonstEisenB.2MINUSEINS PZEisenB.2Wert -1

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

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

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

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

# Ein Erklärtext wird den Spielern angezeigt.
tellraw @a[distance=..15] ["Eisenbahn.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 Eisenbahn zu benutzen.","bold":true}]

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

Variante 2: Zyklus-Funktion
Die Zyklus-Funktion ermöglicht es, dass die Eisenbahn erzeugt werden kann und dass die Gleisspuren platziert werden können, in dem sie die dafür benötigten Funktionen aufruft.

Editor Icon eisenbahn:v2zyklus.mcfunction
# An der Position eines gesetzten Rüstungsständer, der für Bauwerke verwendet wird, wird die Bauwerks-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiEisenB.2Bauwerk] at @s align y run function eisenbahn:v2bauwerk

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

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

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

# Wenn der Eisenbahn-Rüstungsständer per F-Taste in die Zweithand geholt wurde, wird dem Spieler ein Etikett gegeben. Das wird benutzt um statt der Dampflok einen Waggon platzieren zu können. ein erneutes F-Drücken ändert es wieder in eine Lok um.
execute as @a[tag=!EtiEisenB.2Ausgewaehlt] if data entity @s Inventory[{Slot:-106b}].tag."EigEisenB.2Waggon" run tag @s add EtiEisenB.2Waggon

# Ein Rahmen wird erzeugt, in dem der Eisenbahn-Rüstungsständer kopiert wird, um ihn dort ändern zu können.
execute at @a[tag=EtiEisenB.2Waggon] run summon minecraft:item_frame ~ ~ ~ {Fixed:true,Tags:["EtiEisenB.2Alle","EtiEisenB.2Gegenstand"]}
execute as @a[tag=EtiEisenB.2Waggon] at @s run item replace entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,sort=nearest,limit=1] container.0 from entity @s weapon.offhand

# Der Zustand ob der Gegenstand einen Waggon erzeugt wird gewechselt, sodass er entweder ein Waggon wird oder keiner mehr ist.
execute at @a[tag=EtiEisenB.2Waggon] as @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,sort=nearest,limit=1] store success entity @s Item.tag."EigEisenB.2Waggon" byte 1 store success score @s PZEisenB.2Wert unless entity @s[nbt={Item:{tag:{EigEisenB.2Waggon:true} } }]

# Abhängig davon ob er ein Waggon erzeugen soll oder nicht, wird ein zusätzliches Etikett vergeben.
execute at @a[tag=EtiEisenB.2Waggon] run data modify entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,scores={PZEisenB.2Wert=1},sort=nearest,limit=1] Item.tag.EntityTag.Tags set value ["EtiEisenB.2Alle","EtiEisenB.2Erstellen","EtiEisenB.2Waggon"]
execute at @a[tag=EtiEisenB.2Waggon] run data modify entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,scores={PZEisenB.2Wert=0},sort=nearest,limit=1] Item.tag.EntityTag.Tags set value ["EtiEisenB.2Alle","EtiEisenB.2Erstellen"]

# Abhängig von dem neuen Zustand wird dieser dem Spieler mitgeteilt.
execute as @a[tag=EtiEisenB.2Waggon] at @s if entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,scores={PZEisenB.2Wert=1},sort=nearest,limit=1] run title @s actionbar ["",{"text":"waggon == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
execute as @a[tag=EtiEisenB.2Waggon] at @s if entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,scores={PZEisenB.2Wert=0},sort=nearest,limit=1] run title @s actionbar ["",{"text":"waggon == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Anschließend wird der Gegenstand in die Haupthand des spielers zurück kopiert.
execute as @a[tag=EtiEisenB.2Waggon] at @s run item replace entity @s weapon.mainhand from entity @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,sort=nearest,limit=1] container.0

# Die Zweithand und der Rahmen werden gelöscht.
execute at @a[tag=EtiEisenB.2Waggon] run kill @e[distance=..1.5,type=minecraft:item_frame,tag=EtiEisenB.2Gegenstand,sort=nearest,limit=1]
execute as @a[tag=EtiEisenB.2Waggon] run item replace entity @s weapon.offhand with minecraft:air

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiEisenB.2Waggon] remove EtiEisenB.2Waggon

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

# Wenn Spieler das Steuer gerade erst ausgewählt haben, wird an ihrer Position eine Güterlore erzeugt. Anschließend bekommt die Güterlore den Wert null.
execute at @a[tag=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Auswahl,tag=EtiEisenB.2Sitzen] run summon minecraft:chest_minecart ~ ~0.5 ~ {NoGravity:true,Invulnerable:true,CustomName:'{"text":"Eisenbahn","color":"red","bold":true}',Tags:["EtiEisenB.2Alle","EtiEisenB.2Menu"]}
execute at @a[tag=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Auswahl,tag=EtiEisenB.2Sitzen] run scoreboard players set @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] PZEisenB.2Ausl 0

# Solange der Spieler das Holzschwert ausgewählt hat, wird die Güterlore immer an seine Position teleportiert.
execute at @a[tag=EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Sitzen] run teleport @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] ~ ~0.5 ~ ~ 0

# Wenn der Spieler nicht sitzt aber das Schwert ausgewählt hat, wird seine Auswahl auf null gesetzt.
tag @a[tag=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Sitzen,tag=EtiEisenB.2Sitzt] add EtiEisenB.2Auswahl
tag @a[tag=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Sitzen,tag=EtiEisenB.2Sitzt] remove EtiEisenB.2Ausgewaehlt

# Wenn der Spieler das Holzschwert nicht mehr auswählt, wird die Güterlore geleert und anschließend gelöscht.
execute at @a[tag=!EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Auswahl] run data remove entity @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] Items
execute at @a[tag=!EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Auswahl] run kill @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1]

# Von der Güterlore wird die Anzahl der belegten Slots ausgelesen und nur wenn sie nicht mit der normalen Anzahl übereinstimmt, wird die Menü-Funktion geladen.
execute as @e[type=minecraft:chest_minecart,tag=EtiEisenB.2Menu] store result score @s PZEisenB.2Wert run data get entity @s Items
execute as @e[type=minecraft:chest_minecart,tag=EtiEisenB.2Menu] unless entity @s[scores={PZEisenB.2Wert=4},tag=!EtiEisenB.2MenuOeffnen] at @s at @e[distance=..6,type=minecraft:armor_stand,tag=EtiEisenB.2Halter,sort=nearest,limit=1] positioned ^ ^-2 ^4 at @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] run function eisenbahn:v2menu

# 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=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Auswahl,tag=!EtiEisenB.2Sitzen] actionbar ["",{"text":"Spieler sitzt == ","bold":true},{"text":"falsch","color":"red","bold":true}]
title @a[tag=!EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Auswahl,tag=EtiEisenB.2Sitzen] actionbar ["",{"text":"Steuer ausgewählt == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Die Etiketten werden vergeben oder entfernt um zu ermitteln wann der Spieler sich gerade gesetzt hat oder aussteigt.
tag @a[tag=EtiEisenB.2Sitzen,tag=!EtiEisenB.2Sitzt] add EtiEisenB.2Sitzt
tag @a[tag=!EtiEisenB.2Sitzen,tag=EtiEisenB.2Sitzt] remove EtiEisenB.2Sitzt

# 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=EtiEisenB.2Ausgewaehlt,tag=!EtiEisenB.2Auswahl] add EtiEisenB.2Auswahl
tag @a[tag=!EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Auswahl] remove EtiEisenB.2Auswahl

# Die Eigenschaft für den Tempomat wird in den Namen des Bahn-Markierers kopiert, sodass man eine einfachere Abfragemöglichkeit hat.
execute as @e[type=minecraft:marker,tag=EtiEisenB.2Bahn] run data modify entity @s CustomName set from entity @s data."EigEisenB.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=EtiEisenB.2Bahn,tag=!EtiEisenB.2Waggon,name="wahr"] at @s positioned ^ ^2 ^-4 unless entity @p[distance=..5,tag=EtiEisenB.2Sitzen,tag=EtiEisenB.2Ausgewaehlt] at @s rotated ~180 0 positioned ^ ^2 ^-4 unless entity @p[distance=..5,tag=EtiEisenB.2Sitzen,tag=EtiEisenB.2Ausgewaehlt] at @s rotated ~90 0 positioned ^ ^2 ^-4 unless entity @p[distance=..5,tag=EtiEisenB.2Sitzen,tag=EtiEisenB.2Ausgewaehlt] at @s rotated ~270 0 positioned ^ ^2 ^-4 unless entity @p[distance=..5,tag=EtiEisenB.2Sitzen,tag=EtiEisenB.2Ausgewaehlt] run data modify entity @s data."EigEisenB.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 von der Menü-Lore der erste Gegenstand entfernt, damit die Menü-Funktion im nächsten Durchlauf in jeden Fall ausgeführt wird, denn dort wird die Fahren-Funktion ausgelöst. 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 #VarEisenB.2Tick PZEisenB.2Ausl 1
execute if score #VarEisenB.2Tick PZEisenB.2Ausl matches 4.. as @e[type=minecraft:armor_stand,tag=EtiEisenB.2Halter,nbt=!{Passengers:[{}]}] at @s run function eisenbahn:v2entfernen
execute if score #VarEisenB.2Tick PZEisenB.2Ausl matches 4.. at @e[type=minecraft:marker,tag=EtiEisenB.2Bahn,tag=!EtiEisenB.2Waggon,name="wahr"] positioned ^ ^2 ^-4 run tag @e[distance=..5,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] add EtiEisenB.2MenuOeffnen
execute if score #VarEisenB.2Tick PZEisenB.2Ausl matches 4.. run scoreboard players set #VarEisenB.2Tick PZEisenB.2Ausl 0

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

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

Variante 2: Bauwerks-Funktion
Die Bauwerks-Funktion errichtet die Spuren, Spur-Kreuzungen und die Station.

Editor Icon eisenbahn: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 ~ ~ ~ ~180 0

# Die gerade Spur wird platziert.
execute at @s[tag=EtiEisenB.2Spuren,y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^16 run place template eisenbahn:v2spur ~16 ~ ~-3 clockwise_90
execute at @s[tag=EtiEisenB.2Spuren,y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^16 run place template eisenbahn:v2spur ~-3 ~ ~-16 none

# Das Spur-Kreuz wird platziert.
execute at @s[tag=EtiEisenB.2SpurKreuz] run setblock ^ ^ ^15 minecraft:structure_block{mode:"LOAD",name:"eisenbahn:v2spur_kreuz",posY:0} replace

# Je nach Blickrichtung werden die entsprechenden Daten kopiert.
execute at @s[tag=EtiEisenB.2SpurKreuz,y_rotation=-135..135] unless entity @s[y_rotation=-45..45] run data merge block ^ ^ ^15 {rotation:"NONE",posX:-3,posZ:-16}
execute at @s[tag=EtiEisenB.2SpurKreuz,y_rotation=135..45] unless entity @s[y_rotation=-135..-45] run data merge block ^ ^ ^15 {rotation:"CLOCKWISE_90",posX:16,posZ:-3}

# Der Redstone-Block wird platziert.
execute at @s[tag=EtiEisenB.2SpurKreuz] run setblock ^ ^ ^14 minecraft:redstone_block replace

# Der Boden um der Spur herum wird mit Gras aufgefüllt.
execute at @s[tag=EtiEisenB.2Spuren] run fill ^3 ^ ^ ^-3 ^ ^32 minecraft:grass_block replace minecraft:air
execute at @s[tag=EtiEisenB.2SpurKreuz] run fill ^16 ^ ^12 ^-16 ^ ^18 minecraft:grass_block replace minecraft:air

# Wenn die Station platziert werden soll, wird geprüft ob sich darunter überhaupt eine Spur befindet und nur dann wird der Konstruktionsblock dafür platziert und der Rüstungsständer erhält dann den Wert eins.
execute at @s[tag=EtiEisenB.2Station] store success score @s PZEisenB.2Wert if block ^ ^ ^-1 minecraft:stone_brick_stairs[half=bottom] if block ^ ^ ^1 minecraft:stone_brick_stairs[half=bottom] run setblock ^-20 ^ ^3 minecraft:structure_block{mode:"LOAD",name:"eisenbahn:v2station",posY:0} replace

# Je nach Blickrichtung des Rüstungsständers werden die benötigten Daten in den Konstruktionsblock gespeichert.
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1},y_rotation=-135..-45] run data merge block ^-20 ^ ^3 {rotation:"NONE",posX:0,posZ:-40}
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1},y_rotation=-45..45] run data merge block ^-20 ^ ^3 {rotation:"CLOCKWISE_90",posX:40,posZ:0}
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1},y_rotation=45..135] run data merge block ^-20 ^ ^3 {rotation:"CLOCKWISE_180",posX:0,posZ:40}
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1},y_rotation=135..-135] run data merge block ^-20 ^ ^3 {rotation:"COUNTERCLOCKWISE_90",posX:-40,posZ:0}

# Nur wenn der Konstruktionsblock platziert werden konnte, wird ein Redstone-Block daneben platziert um diesen zu aktivieren.
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1}] run setblock ^-20 ^ ^4 minecraft:redstone_block replace

# Es wird eine rote Netherziegelstufe platziert, sodass die Bahn dort hält.
execute at @s[tag=EtiEisenB.2Station,scores={PZEisenB.2Wert=1}] run setblock ~ ~ ~ minecraft:red_nether_brick_slab replace

# Falls keine Spur gefunden wurde um die Station zu platzieren, wird eine Fehlermeldung ausgegeben.
execute at @s[tag=EtiEisenB.2Station] unless entity @s[scores={PZEisenB.2Wert=1}] run tellraw @a[distance=..5] ["Eisenbahn.2:\n",{"text":"Unter dem Rüstungsständer wurde keine Spur gefunden oder der Rüstungsständer wurde quer zur Spur platziert!","color":"red","bold":true}]

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

Variante 2: Erstellen-Funktion
Die Erstellen-Funktion erzeugt die Dampflok oder den Waggon.

Editor Icon eisenbahn: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 ^ ^1 ^-18 ~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 result score @s PZEisenB.2Wert if block ^1 ^-1 ^ minecraft:stone_brick_stairs[half=bottom]
execute at @s[scores={PZEisenB.2Wert=1}] store result score @s PZEisenB.2Wert if block ^-1 ^-1 ^ minecraft:stone_brick_stairs[half=bottom]
execute if entity @s[scores={PZEisenB.2Wert=0}] run tellraw @p[distance=..5] ["Eisenbahn.2:\n",{"text":"Es wurde unter der zu erzeugenden Eisenbahn keine vollständige Eisenbahn-Spur gefunden!","color":"red","bold":true}]
tag @s[scores={PZEisenB.2Wert=0}] remove EtiEisenB.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=EtiEisenB.2Erstellen] store result score @s PZEisenB.2Wert run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:structure_void replace minecraft:air
execute at @s[tag=EtiEisenB.2Erstellen] run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:air replace minecraft:structure_void
tag @s[tag=EtiEisenB.2Erstellen,scores={PZEisenB.2Wert=..1464}] remove EtiEisenB.2Erstellen

# Falls kein Platz vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiEisenB.2Erstellen,scores={PZEisenB.2Wert=1..}] run tellraw @p[distance=..5] ["Eisenbahn.2:\n",{"text":"Für die Eisenbahn ist an der geforderten Position kein Platz!","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=EtiEisenB.2Erstellen,tag=!EtiEisenB.2Waggon] run give @p[distance=..5] minecraft:wooden_sword{EigEisenB.2Alle:true,EigEisenB.2Steuer:true,Unbreakable:true,HideFlags:6,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Nullschaden",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 die eigentliche Bahn wird erzeugt.
execute at @s[tag=EtiEisenB.2Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.2Alle","EtiEisenB.2Entfernen","EtiEisenB.2Ausrichten","EtiEisenB.2Bahn"],data:{EigEisenB.2Tempomat:'{"bold":true,"color":"red","text":"falsch"}'} }

execute at @s[tag=EtiEisenB.2Erstellen,tag=EtiEisenB.2Waggon] run tag @e[distance=..1,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] add EtiEisenB.2Waggon
execute at @s[tag=EtiEisenB.2Erstellen,tag=EtiEisenB.2Waggon] run data merge entity @e[distance=..1,type=minecraft:marker,tag=EtiEisenB.2Waggon,sort=nearest,limit=1] {data:{EigEisenB.2Drehung:[] } }

# Ein zweiter Markierer, der die alte Position der Bahn markiert, wird erzeugt.
execute at @s[tag=EtiEisenB.2Erstellen] run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.2Alle","EtiEisenB.2Entfernen","EtiEisenB.2Ausrichten","EtiEisenB.2Unbeachten","EtiEisenB.2AltePosition"]}

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

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

# Der Bahn-Markierer ruft die Bahn-Funktion auf und dabei wird ihm auch der Wert fürs Tempo auf eins gesetzt.
execute at @s[tag=EtiEisenB.2Erstellen] as @e[distance=..36,type=minecraft:marker,tag=EtiEisenB.2Bahn,tag=EtiEisenB.2Ausrichten,sort=nearest,limit=7] at @s run function eisenbahn:v2bahn

# Danach wird ihnen das Etikett entfernt.
execute if entity @s[tag=EtiEisenB.2Erstellen] run tag @e[distance=..36,tag=EtiEisenB.2Ausrichten,sort=nearest,limit=7] remove EtiEisenB.2Ausrichten

# Falls die Eisenbahn nicht erzeugt werden konnte, wird die Entfernen-Funktion geladen.
execute store success score @s PZEisenB.2Wert run tag @s[tag=!EtiEisenB.2Erstellen] add EtiEisenB.2Erstellen
execute at @s[scores={PZEisenB.2Wert=1}] run function eisenbahn:v2entfernen

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


Variante 2: Entfernen-Funktion
Die Entfernen-Funktion löscht alle Bestandteile der Eisenbahn und erstellt einen Drop, mit dem man eine neue Eisenbahn erzeugen kann.

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

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

# Wenn die Bahn bereits vorhanden ist, wird diese entfernt.
execute if entity @s[tag=!EtiEisenB.2Erstellen] at @e[distance=..36,type=minecraft:marker,tag=EtiEisenB.2AltePosition,sort=nearest,limit=3] run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:air replace #eisenbahn:v2droppen
execute if entity @s[tag=!EtiEisenB.2Erstellen] at @e[distance=..36,type=minecraft:marker,tag=EtiEisenB.2AltePosition,sort=nearest,limit=3] run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:air replace

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

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

Variante 2: Menü-Funktion
Die Menü-Funktion stellt alle Optionen für das Steuern der Eisenbahn in Form von Gegenständen bereit.

Editor Icon eisenbahn:v2menu.mcfunction
# Wenn der Spieler einen der Gegenstände in der Güterlore angeklickt hat oder mit Q rausgeworfen hat, wird ihm der Wert auf eins gesetzt.
execute at @s as @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Sitzen] store success score @s PZEisenB.2Wert run clear @s #eisenbahn:v2menu{EigEisenB.2Alle:true}
execute at @s as @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt,tag=EtiEisenB.2Sitzen,scores={PZEisenB.2Wert=0}] store success score @s PZEisenB.2Wert run kill @e[distance=..6,type=minecraft:item,nbt={Item:{tag:{EigEisenB.2Alle:true} } }]

# Wenn nicht exakt drei Gegenstände vorhanden sind werden alle Gegenstände gelöscht, damit eventuell weitere hinzugefügte Gegenstände ebenfalls entfernt werden.
execute unless entity @s[scores={PZEisenB.2Wert=3}] run data remove entity @s Items
tag @s[tag=EtiEisenB.2MenuOeffnen] remove EtiEisenB.2MenuOeffnen

# Wenn die Lore im Menü angeklickt wurde, für den Tempomat, wird ein Etikett vergeben.
execute at @s[nbt=!{Items:[{Slot:13b,Count:1b}]}] if entity @p[distance=..5,scores={PZEisenB.2Wert=1}] run tag @s add EtiEisenB.2Tempomat

# Es wird der aktuelle Zustand ausgelesen.
execute if entity @s[tag=EtiEisenB.2Tempomat] store success score VarEisenB.2Tempomat PZEisenB.2Wert if entity @s[tag=EtiEisenB.2TempomatWahr]

# Je nach Zustand, wird der jeweils andere aktiv.
execute if entity @s[tag=EtiEisenB.2Tempomat] if score VarEisenB.2Tempomat PZEisenB.2Wert matches 0 run tag @s add EtiEisenB.2TempomatWahr
execute if entity @s[tag=EtiEisenB.2Tempomat] if score VarEisenB.2Tempomat PZEisenB.2Wert matches 1 run tag @s remove EtiEisenB.2TempomatWahr

# Die Eigenschaft Tempomat wird entsprechend gesetzt.
execute if entity @s[tag=!EtiEisenB.2TempomatWahr] run data modify entity @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] data."EigEisenB.2Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'
execute if entity @s[tag=EtiEisenB.2TempomatWahr] run data modify entity @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] data."EigEisenB.2Tempomat" set value '{"bold":true,"color":"green","text":"wahr"}'

# Je nach dem ob der Tempomat aktiv oder nicht aktiv ist, wird eine Lore oder Antriebslore in den Slot gelegt.
item replace entity @s[tag=!EtiEisenB.2TempomatWahr] container.13 with minecraft:minecart{EigEisenB.2Alle:true,EigEisenB.2Menu:true,display:{Name:'{"text":"Tempomat == falsch","color":"red","bold":true}'} }
item replace entity @s[tag=EtiEisenB.2TempomatWahr] container.13 with minecraft:furnace_minecart{EigEisenB.2Alle:true,EigEisenB.2Menu:true,display:{Name:'{"text":"Tempomat == wahr","color":"green","bold":true}'} }

# Danach wird das Etikett entfernt.
tag @s[tag=EtiEisenB.2Tempomat] remove EtiEisenB.2Tempomat

# Zuerst wird der Wert für die Drehungs-Richtung auf null gesetzt.
scoreboard players set @s PZEisenB.2Ausl 0

# Wenn der Spieler auf eine der drei Kompasse geklickt hat, wird die entsprechende Drehungs-Richtung als Wert gespeichert.
execute at @s[nbt=!{Items:[{Slot:4b,id:"minecraft:compass",Count:1b}]}] if entity @p[distance=..5,scores={PZEisenB.2Wert=1}] run scoreboard players set @s PZEisenB.2Ausl 4
execute at @s[nbt=!{Items:[{Slot:12b,id:"minecraft:compass",Count:1b}]}] if entity @p[distance=..5,scores={PZEisenB.2Wert=1}] run scoreboard players set @s PZEisenB.2Ausl 3
execute at @s[nbt=!{Items:[{Slot:14b,id:"minecraft:compass",Count:1b}]}] if entity @p[distance=..5,scores={PZEisenB.2Wert=1}] run scoreboard players set @s PZEisenB.2Ausl 2

# Danach wird der Wert für die Drehungs-Richtung in den Bahn-Markierer kopiert.
scoreboard players operation @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] PZEisenB.2Ausl = @s PZEisenB.2Ausl

# Anschließend wird geprüft ob der Markierer die Eigenschaft für die Richtung besitzt und falls nicht erhält er den Wert eins. Wenn er den Wert eins bis vier besitzt wird die Drehen-Funktion geladen.
scoreboard players set VarEisenB.2Nummer PZEisenB.2Wert 0
execute as @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,scores={PZEisenB.2Ausl=0},sort=nearest,limit=1] store success score @s PZEisenB.2Ausl unless data entity @s data."EigEisenB.2Richtung"[1]
execute as @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,scores={PZEisenB.2Ausl=1..4},sort=nearest,limit=1] at @s run function eisenbahn:v2drehen

# Die drei Kompasse werden in die entsprechenden Slots gelegt.
item replace entity @s container.4 with minecraft:compass{EigEisenB.2Alle:true,EigEisenB.2Menu:true,display:{Name:'{"text":"Drehung = 180","color":"gold","bold":true}'} }
item replace entity @s container.12 with minecraft:compass{EigEisenB.2Alle:true,EigEisenB.2Menu:true,display:{Name:'{"text":"Drehung = Links","color":"blue","bold":true}'} }
item replace entity @s container.14 with minecraft:compass{EigEisenB.2Alle:true,EigEisenB.2Menu:true,display:{Name:'{"text":"Drehung = Rechts","color":"blue","bold":true}'} }

# Die drei Kompasse bekommen entsprechende Beschreibungen in denen die neue Richtung angezeigt wird.
data modify entity @s Items[{Slot:4b}].tag.display.Lore append from entity @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] data."EigEisenB.2Richtung"[2]
data modify entity @s Items[{Slot:12b}].tag.display.Lore append from entity @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] data."EigEisenB.2Richtung"[3]
data modify entity @s Items[{Slot:14b}].tag.display.Lore append from entity @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,sort=nearest,limit=1] data."EigEisenB.2Richtung"[1]

# Wenn die Bahn einen aktiven Tempomaten besitzt, wird der Wert entsprechend gesetzt.
scoreboard players set @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,nbt={data:{EigEisenB.2Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} },sort=nearest,limit=1] PZEisenB.2Ausl 7

# Die Fahren-Funktion wird von dem Bahn-Markierer aufgerufen.
execute as @e[distance=..6,type=minecraft:marker,tag=EtiEisenB.2Bahn,scores={PZEisenB.2Ausl=7},sort=nearest,limit=1] at @s run function eisenbahn:v2fahren
JSON Icon eisenbahn:v2menu.json
{
  "values": [
    "minecraft:minecart",
    "minecraft:furnace_minecart",
    "minecraft:compass"
  ]
}

Variante 2: Drehen-Funktion
Die Drehen-Funktion prüft ob die Eisenbahn gedreht werden kann und ruft nur dann die Bewegen-Funktion auf.

Editor Icon eisenbahn: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 VarEisenB.2Spur PZEisenB.2Wert 0
scoreboard players set VarEisenB.2Drehen PZEisenB.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 entity @s[scores={PZEisenB.2Ausl=2..3}] rotated ~90 0 positioned ^ ^-1 ^2 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] positioned ^ ^ ^-4 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.2Spur PZEisenB.2Wert 1

# Wenn keine Spur in Dreh-Richtung vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 0 at @s[scores={PZEisenB.2Ausl=2..4}] positioned ^ ^2 ^-4 run tellraw @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt] ["Eisenbahn.2:\n",{"text":"Die Eisenbahn kann an dieser Stelle aufgrund von fehlenden Gleisen nicht gedreht werden!","color":"red","bold":true}]

# Wenn der Spieler nach rechts oder links abbigen will, wird geprüft ob Spuren rechts oder links vorhanden sind, anschließend wird geprüft ob rechts wie auch links nichts im Weg ist.
scoreboard players set VarEisenB.2Unbelegt PZEisenB.2Wert 0
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if entity @s[scores={PZEisenB.2Ausl=2..3}] store result score VarEisenB.2Unbelegt PZEisenB.2Wert run fill ^-18 ^ ^-2 ^-3 ^6 ^2 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 1.. run fill ^-18 ^ ^-2 ^-3 ^6 ^2 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 560 run scoreboard players set VarEisenB.2Drehen PZEisenB.2Wert 1

scoreboard players set VarEisenB.2Unbelegt PZEisenB.2Wert 0
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Drehen PZEisenB.2Wert matches 1 if entity @s[scores={PZEisenB.2Ausl=2..3}] store result score VarEisenB.2Unbelegt PZEisenB.2Wert run fill ^18 ^ ^-2 ^3 ^6 ^2 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Drehen PZEisenB.2Wert matches 1 if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 1.. run fill ^18 ^ ^-2 ^3 ^6 ^2 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Drehen PZEisenB.2Wert matches 1 if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 560 run scoreboard players set VarEisenB.2Drehen PZEisenB.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={PZEisenB.2Ausl=4}] run scoreboard players set VarEisenB.2Drehen PZEisenB.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 VarEisenB.2Spur PZEisenB.2Wert matches 1 if score VarEisenB.2Drehen PZEisenB.2Wert matches 0..1 at @s[scores={PZEisenB.2Ausl=2..4}] positioned ^ ^2 ^-4 run tellraw @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt] ["Eisenbahn.2:\n",{"text":"Die Eisenbahn kann an dieser Stelle aufgrund von Platzmangel nicht gedreht werden!","color":"red","bold":true}]

# Wenn die Bahn gedreht werden kann, wird die Bewegen-Funktion mit entsprechend gesetzten Variablen aufgerufen.
scoreboard players set VarEisenB.2Drehung PZEisenB.2Wert 0
execute if score VarEisenB.2Drehen PZEisenB.2Wert matches 2 run scoreboard players set VarEisenB.2Nummer PZEisenB.2Wert 1
execute if score VarEisenB.2Drehen PZEisenB.2Wert matches 2 run scoreboard players operation VarEisenB.2Drehung PZEisenB.2Wert = @s PZEisenB.2Ausl
execute if score VarEisenB.2Drehen PZEisenB.2Wert matches 2 run function eisenbahn:v2bewegen

# Dem Bahn-Markierer wird die Richtungs-Eigenschaft gegeben, sodass sie abhängig der Blickrichtung, richtig sortiert werden kann.
data modify entity @s data."EigEisenB.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."EigEisenB.2Richtung" append from entity @s data."EigEisenB.2Richtung"[0]
data remove entity @s[y_rotation=135..45] data."EigEisenB.2Richtung"[0]

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

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


Variante 2: Bewegen-Funktion
Die Bewegen-Funktion bewegt die Insassen der Eisenbahn nach vorne oder dreht sie in die gewünschte Richtung.

Editor Icon eisenbahn:v2bewegen.mcfunction
# Wenn die Bahn anhalten muss wegen einer Station oder Kreuzung, so wird den zwei Waggons Nummer zwei und drei in ihren Datenbereich ein neuer Listen-Eintrag hinzugefügt, dieser wird ans Ende der Liste gesetzt.
execute if entity @s[tag=EtiEisenB.2Waggon] if score VarEisenB.2Fahren PZEisenB.2Wert matches 4..6 if score VarEisenB.2Drehung PZEisenB.2Wert matches 1..3 run data modify entity @s data."EigEisenB.2Drehung" append value 0

# Wenn der Spieler den ersten Waggon dreht, wird den beiden anderen Waggons der Drehungs-Richtungs-Wert in die Liste übergeben, damit sie in dem Moment wo sie an eine Kreuzung kommen, wissen in welche Richtung sie steuern müssen.
execute if entity @s[tag=EtiEisenB.2Waggon] if score VarEisenB.2Drehung PZEisenB.2Wert matches 1..3 store result entity @s data."EigEisenB.2Drehung"[-1] int 1 run scoreboard players get VarEisenB.2Drehung PZEisenB.2Wert

# Wenn der Spieler eine Drehung anordnet, wird dies mit einem Etikett markiert.
execute if entity @s[tag=!EtiEisenB.2Waggon] if score VarEisenB.2Drehung PZEisenB.2Wert matches 2..3 run tag @s add EtiEisenB.2Drehen

# Wenn die beiden hinteren Waggons auf eine Kreuzung gestoßen sind, wird mit Hilfe eines Etiketts dieser Umstand markiert.
execute if entity @s[tag=EtiEisenB.2Waggon] store result score VarEisenB.2Unbelegt PZEisenB.2Wert run clone ~ ~-2 ~ ~ ~-1 ~ ~ ~-2 ~ filtered minecraft:red_nether_brick_slab force
execute if entity @s[tag=EtiEisenB.2Waggon] if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 1..2 unless score VarEisenB.2Drehung PZEisenB.2Wert matches 1..3 run tag @s add EtiEisenB.2Drehen

# Wenn die beiden hinteren Waggons der Bahn drehen sollen, wird der erste Wert in der Liste ausgelesen und in dem Punkte-Ziel gespeichert und anschließend wird der erste Listeneintrag gelöscht.
execute store result score @s[tag=EtiEisenB.2Drehen,tag=EtiEisenB.2Waggon] PZEisenB.2Ausl run data get entity @s data."EigEisenB.2Drehung"[0]
data remove entity @s[tag=EtiEisenB.2Drehen,tag=EtiEisenB.2Waggon] data."EigEisenB.2Drehung"[0]

# Falls der ausgelesene Drehungs-Richtungs-Wert, nicht nach links oder rechts vorgibt, so wird der Drehvorgang gar nicht erst eingeleitet.
execute if entity @s[tag=EtiEisenB.2Drehen,tag=EtiEisenB.2Waggon] unless entity @s[scores={PZEisenB.2Ausl=2..3}] run tag @s remove EtiEisenB.2Drehen

# Es werden alle Insassen, je nach Blickrichtung der Bahn, mit einem Etikett ausgestattet.
execute at @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ~-9 ~-1 ~-2 run tag @e[dx=19,dy=3,dz=4,tag=!EtiEisenB.2Sitzen,tag=!EtiEisenB.2Unbeachten,tag=!EtiEisenB.2Bewegt] add EtiEisenB.2Bewegen
execute at @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ~-2 ~-1 ~-9 run tag @e[dx=4,dy=3,dz=19,tag=!EtiEisenB.2Sitzen,tag=!EtiEisenB.2Unbeachten,tag=!EtiEisenB.2Bewegt] add EtiEisenB.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=!EtiEisenB.2Drehen,tag=EtiEisenB.2Waggon] if score VarEisenB.2Drehung PZEisenB.2Wert matches 2..3 run tag @e[distance=..14,tag=EtiEisenB.2Bewegen] remove EtiEisenB.2Bewegen

# Für die Drehung werden die Mittelpunkt-Koordinaten der Bahn in Variablen gespeichert.
execute if entity @s[tag=EtiEisenB.2Drehen] store result score VarEisenB.2X PZEisenB.2Wert run data get entity @s Pos[0] 100
execute if entity @s[tag=EtiEisenB.2Drehen] store result score VarEisenB.2Z PZEisenB.2Wert 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=EtiEisenB.2Drehen] run scoreboard players operation VarEisenB.2Richtung PZEisenB.2Wert = @s PZEisenB.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=EtiEisenB.2Drehen] as @e[distance=..14,tag=EtiEisenB.2Bewegen] run function eisenbahn:v2drehung

# Wenn die Drehung möglich ist, werden alle Insassen so gedreht wie es der Fahrer vorgegeben hat.
execute if entity @s[tag=EtiEisenB.2Drehen] at @s[scores={PZEisenB.2Ausl=2}] as @e[distance=..14,tag=EtiEisenB.2Bewegen] at @s run teleport @s ~ ~ ~ ~90 ~
execute if entity @s[tag=EtiEisenB.2Drehen] at @s[scores={PZEisenB.2Ausl=3}] as @e[distance=..14,tag=EtiEisenB.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 VarEisenB.2Fahren PZEisenB.2Wert matches 4..6 at @s as @e[distance=..14,tag=EtiEisenB.2Bewegen] positioned as @s run teleport @s ^ ^ ^1
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 5 as @e[distance=..14,tag=EtiEisenB.2Bewegen] at @s run teleport @s ~ ~-1 ~
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 6 as @e[distance=..14,tag=EtiEisenB.2Bewegen] at @s run teleport @s ~ ~1 ~

# Damit nur die Insassen des jeweiligen Waggons bewegt werden, erhalten alle bereits bewegten Insassen ein Etikett, welches erst beim Abschließen der Bewegung bei allen drei Waggons wieder entfernt wird.
tag @e[distance=..20,tag=EtiEisenB.2Bewegen,tag=!EtiEisenB.2Bewegt] add EtiEisenB.2Bewegt

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

# Mit der aktualisierten Position der Eisenbahn, wird die Bahn-Funktion aufgerufen.
execute at @s run function eisenbahn:v2bahn

# Die Bewegen-Funktion ruft sich pro Waggon erneut auf und merkt sich dabei die Waggon-Nummer.
tag @s add EtiEisenB.2Fahren
execute at @s positioned ^ ^ ^-20 as @e[distance=..50,type=minecraft:marker,tag=EtiEisenB.2Bahn,tag=EtiEisenB.2Waggon,tag=!EtiEisenB.2Fahren,sort=nearest,limit=1] at @s run function eisenbahn:v2bewegen

# Die Etiketten werden nach dem rekursiven Aufruf der Bewegen-Funktion wieder entfernt.
tag @s[tag=EtiEisenB.2Fahren] remove EtiEisenB.2Fahren
tag @e[distance=..20,tag=EtiEisenB.2Bewegt] remove EtiEisenB.2Bewegt

Variante 2: Drehungs-Funktion
Die Drehungs-Funktion dreht jeden einzelnen Insassen um die gewünschte Richtung.

Editor Icon eisenbahn:v2drehung.mcfunction
# Die Position des Insassen wird ausgelesen und in Variablen gespeichert.
execute store result score VarEisenB.2DX PZEisenB.2Wert run data get entity @s Pos[0] 100
execute store result score VarEisenB.2DZ PZEisenB.2Wert 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 VarEisenB.2DX PZEisenB.2Wert -= VarEisenB.2X PZEisenB.2Wert
scoreboard players operation VarEisenB.2DZ PZEisenB.2Wert -= VarEisenB.2Z PZEisenB.2Wert

# 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 VarEisenB.2Richtung PZEisenB.2Wert matches 2..4 unless score VarEisenB.2Richtung PZEisenB.2Wert matches 3 run scoreboard players operation VarEisenB.2DZ PZEisenB.2Wert *= KonstEisenB.2MINUSEINS PZEisenB.2Wert
execute if score VarEisenB.2Richtung PZEisenB.2Wert matches 3..4 run scoreboard players operation VarEisenB.2DX PZEisenB.2Wert *= KonstEisenB.2MINUSEINS PZEisenB.2Wert
execute if score VarEisenB.2Richtung PZEisenB.2Wert matches 4 run scoreboard players operation VarEisenB.2DZ PZEisenB.2Wert >< VarEisenB.2DX PZEisenB.2Wert

# Ein Markierer wird an der Position des Insassen erzeugt. Dieser erhält auch die exakte Rotation.
execute at @s run summon minecraft:marker ~ ~ ~ {Tags:["EtiEisenB.2Alle","EtiEisenB.2Drehung"]}
execute at @s run teleport @e[type=minecraft:marker,tag=EtiEisenB.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=EtiEisenB.2Drehung,sort=nearest,limit=1] Pos[0] double 0.01 run scoreboard players operation VarEisenB.2DZ PZEisenB.2Wert += VarEisenB.2X PZEisenB.2Wert
execute store result entity @e[type=minecraft:marker,tag=EtiEisenB.2Drehung,sort=nearest,limit=1] Pos[2] double 0.01 run scoreboard players operation VarEisenB.2DX PZEisenB.2Wert += VarEisenB.2Z PZEisenB.2Wert

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

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

Variante 2: Fahren-Funktion
Die Fahren-Funktion prüft ob die Eisenbahn nach vorne fahren kann und nur dann wird die Bewegen-Funktion aufgerufen.

Editor Icon eisenbahn: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 VarEisenB.2Ebene PZEisenB.2Wert 0
scoreboard players set VarEisenB.2Fahren PZEisenB.2Wert 0

# Zuerst wird geprüft ob voraus eine Spur eine Ebene höher als die aktuelle Fahrbahn ist.
execute positioned ^ ^ ^19 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.2Ebene PZEisenB.2Wert 3

# Es wird geprüft ob sich eine Spur direkt vor der Bahn befindet.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 0 positioned ^ ^-1 ^19 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.2Ebene PZEisenB.2Wert 2

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

# Wenn auch dass nicht mehr der Fall ist, wird geprüft ob die Spur eine Ebene unter der aktuellen Spur ist.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 0 positioned ^ ^-2 ^-18 if block ^1 ^ ^ minecraft:stone_brick_stairs[half=bottom] if block ^-1 ^ ^ minecraft:stone_brick_stairs[half=bottom] run scoreboard players set VarEisenB.2Ebene PZEisenB.2Wert 1

# Wenn alle Prüfungen fehl schlugen befindet sich garkeine Spur voraus und der Spieler erhält eine Fehlermeldung.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 0 at @s[tag=!EtiEisenB.2Halten] positioned ^ ^2 ^-4 run tellraw @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt] ["Eisenbahn.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=EtiEisenB.2Halten] run scoreboard players set VarEisenB.2Ebene PZEisenB.2Wert 0
execute at @s[tag=EtiEisenB.2Halten] positioned ^ ^2 ^-4 run tellraw @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt] ["Eisenbahn.2:\n",{"text":"Station oder Fahrbahn-Kreuzung 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=EtiEisenB.2Halten] remove EtiEisenB.2Halten
execute store result score VarEisenB.2Unbelegt PZEisenB.2Wert run clone ^ ^-2 ^1 ^ ^-1 ^1 ^ ^-2 ^1 filtered minecraft:red_nether_brick_slab force
execute if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 1..2 run tag @s add EtiEisenB.2Halten

# Falls sich eine Spur voraus befindet, wird geprüft ob direkt vor der Bahn alles frei ist.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 1..3 positioned ^ ^1 ^19 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 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 VarEisenB.2Fahren PZEisenB.2Wert 1

# Anschließend wird geprüft ob der untere Bereich vor der Bahn frei ist.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 1..2 if score VarEisenB.2Fahren PZEisenB.2Wert matches 1 positioned ^ ^ ^19 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 VarEisenB.2Fahren PZEisenB.2Wert 2

# Ebenso wird geprüft ob der obere Bereich vor der Bahn frei ist.
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 2..3 if score VarEisenB.2Fahren PZEisenB.2Wert matches 1..2 positioned ^ ^6 ^19 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 VarEisenB.2Fahren PZEisenB.2Wert 2

# Je nach dem was frei ist, wird dann geprüft ob die Bahn nach unten fahren kann. Ist der Bereich unter der Bahn frei wird die Variable entsprechend gesetzt.
scoreboard players set VarEisenB.2Unbelegt PZEisenB.2Wert 0
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 1 if score VarEisenB.2Fahren PZEisenB.2Wert matches 2 store result score VarEisenB.2Unbelegt PZEisenB.2Wert positioned ^2 ^-1 ^18 run fill ^ ^ ^ ^-4 ^ ^-36 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 1 if score VarEisenB.2Fahren PZEisenB.2Wert matches 2 positioned ^2 ^-1 ^18 run fill ^ ^ ^ ^-4 ^ ^-36 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 185 run scoreboard players set VarEisenB.2Fahren PZEisenB.2Wert 5

# Falls Bereiche frei sind, die fürs nach oben Fahren deuten, wird geprüft ob die Bahn nach oben fahren könnte und dann entsprechend eine Variable mit Wert gesetzt.
scoreboard players set VarEisenB.2Unbelegt PZEisenB.2Wert 0
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 3 if score VarEisenB.2Fahren PZEisenB.2Wert matches 3 store result score VarEisenB.2Unbelegt PZEisenB.2Wert positioned ^2 ^8 ^18 run fill ^ ^ ^ ^-4 ^ ^-36 minecraft:structure_void replace minecraft:air
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 3 if score VarEisenB.2Fahren PZEisenB.2Wert matches 3 positioned ^2 ^8 ^18 run fill ^ ^ ^ ^-4 ^ ^-36 minecraft:air replace minecraft:structure_void
execute if score VarEisenB.2Unbelegt PZEisenB.2Wert matches 185 run scoreboard players set VarEisenB.2Fahren PZEisenB.2Wert 6

# Wenn eine Spur voraus war, aber der Bereich nicht frei ist, wird eine Fehlermeldung ausgegeben und der Tempomat deaktiviert.
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 0..3 run data modify entity @s[nbt={data:{EigEisenB.2Tempomat:'{"bold":true,"color":"green","text":"wahr"}'} }] data."EigEisenB.2Tempomat" set value '{"bold":true,"color":"red","text":"falsch"}'
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 0..3 positioned ^ ^2 ^-4 run tag @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] remove EtiEisenB.2TempomatWahr
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 0..3 positioned ^ ^2 ^-4 run tag @e[distance=..6,type=minecraft:chest_minecart,tag=EtiEisenB.2Menu,sort=nearest,limit=1] add EtiEisenB.2MenuOeffnen
execute if score VarEisenB.2Ebene PZEisenB.2Wert matches 1.. if score VarEisenB.2Fahren PZEisenB.2Wert matches 0..3 at @s positioned ^ ^2 ^-4 run tellraw @p[distance=..5,tag=EtiEisenB.2Ausgewaehlt] ["Eisenbahn.2:\n",{"text":"Die Fahrbahn ist blockiert!","color":"red","bold":true}]

# Wenn das Fahren möglich ist, wird die Bewegen-Funktion geladen.
scoreboard players set VarEisenB.2Nummer PZEisenB.2Wert 1
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 4..6 store result score VarEisenB.2Drehung PZEisenB.2Wert if entity @s[tag=EtiEisenB.2Halten]
execute if score VarEisenB.2Fahren PZEisenB.2Wert matches 4..6 run function eisenbahn:v2bewegen

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

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

# Bei jedem vierten Aufruf für die Lok, Dampf und Geräusche erzeugt.
scoreboard players add @s PZEisenB.2Wert 1
execute if entity @s[scores={PZEisenB.2Wert=4..}] run playsound minecraft:entity.wither.shoot voice @a[distance=..50] ^ ^8 ^15 0.4 1 0.1
execute if entity @s[scores={PZEisenB.2Wert=4..}] run playsound minecraft:entity.minecart.inside voice @a[distance=..50] ^ ^8 ^15 0.4 1 0.1
execute if entity @s[scores={PZEisenB.2Wert=4..}] run particle minecraft:large_smoke ^ ^8 ^15 0.5 2 0.5 0 20 force @a[distance=..25]
execute if entity @s[scores={PZEisenB.2Wert=4..}] run particle minecraft:firework ^ ^8 ^15 0.5 2 0.5 0 10 force @a[distance=..25]
scoreboard players set @s[scores={PZEisenB.2Wert=4..}] PZEisenB.2Wert 0

# Die Dampflok wird abhängig der Blickrichtung platziert.
execute at @s[y_rotation=45..135,tag=!EtiEisenB.2Waggon] run place template eisenbahn:v2bahn ~-18 ~ ~-2 none
execute at @s[y_rotation=135..-135,tag=!EtiEisenB.2Waggon] run place template eisenbahn:v2bahn ~2 ~ ~-18 clockwise_90
execute at @s[y_rotation=-135..-45,tag=!EtiEisenB.2Waggon] run place template eisenbahn:v2bahn ~18 ~ ~2 180
execute at @s[y_rotation=-45..45,tag=!EtiEisenB.2Waggon] run place template eisenbahn:v2bahn ~-2 ~ ~18 counterclockwise_90

# Der Waggon wird abhängig der Blickrichtung platziert.
execute at @s[y_rotation=45..135,tag=EtiEisenB.2Waggon] run place template eisenbahn:v2bahn_waggon ~-15 ~ ~-2 none
execute at @s[y_rotation=135..-135,tag=EtiEisenB.2Waggon] run place template eisenbahn:v2bahn_waggon ~2 ~ ~-15 clockwise_90
execute at @s[y_rotation=-135..-45,tag=EtiEisenB.2Waggon] run place template eisenbahn:v2bahn_waggon ~15 ~ ~2 180
execute at @s[y_rotation=-45..45,tag=EtiEisenB.2Waggon] run place template eisenbahn:v2bahn_waggon ~-2 ~ ~15 counterclockwise_90

# Der Markierer für die alte Position wird an die aktuelle Stelle befördert.
teleport @e[distance=..8,type=minecraft:marker,tag=EtiEisenB.2AltePosition,sort=nearest,limit=1] ~ ~ ~ ~ ~
JSON Icon eisenbahn:v2droppen.json
{
  "values": [
    "minecraft:gray_carpet",
    "minecraft:lever",
    "#minecraft:buttons",
    "minecraft:ladder"
  ]
}

Variante 2: Stopp-Funktion
Die Stopp-Funktion entfernt die Punkte-Ziele und die Bestandteile der Eisenbahn wieder.

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

# Die eventuell noch vorhandenen Etiketten werden entfernt.
tag @a[tag=EtiEisenB.2Sitzt] remove EtiEisenB.2Sitzt
tag @a[tag=EtiEisenB.2Auswahl] remove EtiEisenB.2Auswahl

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

# Die Eisenbahn wird entfernt.
execute at @e[type=minecraft:marker,tag=EtiEisenB.2Bahn] run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:air replace #eisenbahn:v2droppen
execute at @e[type=minecraft:marker,tag=EtiEisenB.2Bahn] run fill ^-2 ^ ^-18 ^2 ^7 ^18 minecraft:air replace

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

# Der Chunk wird wieder entladen.
forceload remove ~ ~
Advertisement