Diese Seite stammt ursprünglich aus de.minecraft.wiki und wurde von der Quelle abweichend verändert.
|
Gruppe: Seeverkehrsanlagen |
mit Mechaniken |
mit Redstone |
Hier: mit Befehlen |
Verfügbar in: Mechanik-Welt |
Die Kanalschleuse wird für das anheben und absenken von Schiffen verwendet. Nicht alle Kanäle sind auf der gleichen Höhe gebaut, aus diesem Grund werden Kanalschleusen eingesetzt um Schiffen und Boote die Möglichkeit zu geben, die Höhenunterschiede zu überwinden. Diese hebt oder senkt das Schiff samt Wasserstand mit Hilfe von Befehlen und öffnet oder schließt die Schleusentore. Die Höhe der Kanalschleuse lässt sich dabei vor dem Bau bestimmen, sodass beliebige und somit einstellbare Höhenunterschiede überwunden werden können. Die Kanalschleuse besteht im grundsätzlichen aus drei Teilen, die beiden Kanäle die verbunden werden sollen, die Schleusentore die nur öffnen wenn der Wasserstand stimmt und die Schleuse selbst, die den Wasserstand anhebt oder absenkt.
Variante 1[]
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
YouTube-Videos zu diesem Thema: | |
---|---|
|
Die Kanalschleuse kann mit Hilfe eines Rüstungsständer erzeugt werden. Man erhält beim Einschalten 16 davon. Wählt man diese in der Schnellleiste aus, erscheint im Chat ein Optionen-Menü. Dort kann man die Höhe von vier bis 64 beliebig einstellen. Hat man die gewünschte Höhe eingestellt, platziert man den Rüstungsständer und die Schleuse ist dann entsprechend so hoch. Die Blickrichtung des Spielers gibt dabei vor in welche Richtung die Kanalschleuse ausgerichtet ist. An der Vorder- und Rückseite der Schleuse befinden sich zwei riesige Tore, die genug Platz bieten, damit Schiffe hindurch fahren können. Damit sich die Tore öffnen ist es nur notwendig als Spieler anwesend zu sein. Danach begibt man sich in die Mitte der Schleuse und wartet ein wenig bis in der Schnellleiste eine Nachricht angezeigt wird, dass die Schleuse gleich den Wasserstand ändern wird. Ist die Zeit vergangen wird der Wasserstand je nach dem wo man sich befindet angehoben oder gesenkt. Oben oder unten angekommen kann man dann durch das Tor hindurch gelangen.
- Einschalten
- Befehl 1.1 Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
- Wiederholen
- Befehl 1.2 Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt.
- Ausschalten
- Befehl 1.3 Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.
Befehlsblöcke mit Befehlen: |
|
Variante 1: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele und gibt dem Spieler den Rüstungsständer, mit dem er die Kanalschleuse platzieren kann.
kanalschleuse:v1start.mcfunction
|
# Die Punkte-Ziele werden erstellt und der Spieler bekommt die Rüstungsständer für die Kanalschleuse. scoreboard objectives add PZKanSchl.1Tor dummy ["Kanalschleuse.1: ",{"text":"Wert wie weit Tor offen ist","bold":true}] scoreboard objectives add PZKanSchl.1Zeit trigger ["Kanalschleuse.1: ",{"text":"Zeit in Ticks und Auslöser","bold":true}] # Den Spielern in einem Umkreis von 15 Blöcken wird der Rüstungsständer für die Kanalschleuse gegeben. give @a[distance=..15] minecraft:armor_stand{EigKanSchl.1Alle:true,EigKanSchl.1Schleuse:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Kanalschleuse","color":"aqua","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um das Tor zu erstellen"']},EntityTag:{Small:true,Marker:true,Invisible:true,NoGravity:true,Tags:["EtiKanSchl.1Alle","EtiKanSchl.1Erstellen"]} } 16 # Der Chunk wird dauerhaft geladen. forceload add ~ ~ |
Variante 1: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler den Rüstungsständer ausgewählt hat um die Höhe einzustellen und sorgt für die Tore und Schleusen, sodass diese ihre Aufgaben durchführen können.
kanalschleuse:v1zyklus.mcfunction
|
# Wenn der Spieler den Schleusen-Rüstungsständer ausgewählt hat, bekommt er ein Etikett. tag @a[nbt={SelectedItem:{tag:{EigKanSchl.1Schleuse:true} } }] add EtiKanSchl.1Ausgewaehlt # Wenn er den Rüstungsständer gerade ausgewählt hat, wird ihm der Auslöserwert festgesetzt und falls er noch keinen Höhenwert besitzt wird dieser auf acht gesetzt. scoreboard players set @a[tag=EtiKanSchl.1Ausgewaehlt,tag=!EtiKanSchl.1Auswahl] PZKanSchl.1Zeit -99 execute as @a[tag=EtiKanSchl.1Ausgewaehlt,tag=!EtiKanSchl.1Auswahl] unless score @s PZKanSchl.1Tor matches 1.. run scoreboard players set @s PZKanSchl.1Tor 8 # Wenn der Spieler den Rüstungsständer auswählt und irgend einen Wert außer null besitzt wird die Auslöser-Funktion geladen. execute as @a[tag=EtiKanSchl.1Ausgewaehlt] unless entity @s[scores={PZKanSchl.1Zeit=0}] run function kanalschleuse:v1ausloeser # Wenn der Spieler den Rüstungsständer auswählt wird ein zusätzliches Etikett vergeben das speichert ob man gerade diesen ausgewählt hat oder nicht. tag @a[tag=EtiKanSchl.1Ausgewaehlt,tag=!EtiKanSchl.1Auswahl] add EtiKanSchl.1Auswahl tag @a[tag=!EtiKanSchl.1Ausgewaehlt,tag=EtiKanSchl.1Auswahl] remove EtiKanSchl.1Auswahl # Das Etikett wird wieder entfernt. tag @a[tag=EtiKanSchl.1Ausgewaehlt] remove EtiKanSchl.1Ausgewaehlt # Wenn der Spieler den Rüstungsständer platziert hat, so wird die Erstellen-Funktion durch diesen aufgerufen. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Erstellen] at @s align y run function kanalschleuse:v1erstellen # Jeden Tick wird der Wert der Rüstungsständer um eins hochgezählt und nur wenn sie den Wert zehn erreicht haben, wird er wieder auf null gesetzt. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Zeit] store result score @s PZKanSchl.1Zeit run scoreboard players add @s[scores={PZKanSchl.1Zeit=..10}] PZKanSchl.1Zeit 1 # Einmal nach zehn Ticks wird geprüft, ob kein Spieler sich im Umkreis von acht Blöcken am Tor befindet und nur dann wird das Etikett entfernt. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1SpielerBeimTor,tag=EtiKanSchl.1Aequator,scores={PZKanSchl.1Zeit=1}] at @s positioned ~-20 ~ ~-7 unless entity @p[dx=40,dy=20,dz=14,gamemode=!spectator] run tag @s remove EtiKanSchl.1SpielerBeimTor execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1SpielerBeimTor,tag=EtiKanSchl.1Pole,scores={PZKanSchl.1Zeit=1}] at @s positioned ~-7 ~ ~-20 unless entity @p[dx=14,dy=20,dz=40,gamemode=!spectator] run tag @s remove EtiKanSchl.1SpielerBeimTor # Es wird geprüft ob sich ein Spieler im Umkreis von acht Blöcken am Tor befindet, nur dann wird dem Rüstungsständer ein Etikett gegeben und sein Wert für die Zeit auf eins gesetzt. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,tag=EtiKanSchl.1Aequator,tag=!EtiKanSchl.1SpielerBeimTor] at @s positioned ~-20 ~ ~-7 if entity @p[dx=40,dy=20,dz=14,gamemode=!spectator] store success score @s PZKanSchl.1Zeit run tag @s add EtiKanSchl.1SpielerBeimTor execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,tag=EtiKanSchl.1Pole,tag=!EtiKanSchl.1SpielerBeimTor] at @s positioned ~-7 ~ ~-20 if entity @p[dx=14,dy=20,dz=40,gamemode=!spectator] store success score @s PZKanSchl.1Zeit run tag @s add EtiKanSchl.1SpielerBeimTor # Nur wenn auch der Wasserstand auf beiden Seiten des Tores gleich hoch ist, bekommt der Rüstungsständer das Etikett um das Tor öffnen zu können. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,tag=!EtiKanSchl.1TorKannOeffnen,scores={PZKanSchl.1Zeit=1}] at @s if block ^7 ^4 ^1 minecraft:water if block ^7 ^4 ^-1 minecraft:water if block ^7 ^5 ^1 minecraft:air if block ^7 ^5 ^-1 minecraft:air run tag @s add EtiKanSchl.1TorKannOeffnen # Einmal alle zehn Ticks wird vom Rüstungsständer aus die Tor-Funktion aufgerufen, wenn alle Voraussetzungen stimmen. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,tag=EtiKanSchl.1TorKannOeffnen,scores={PZKanSchl.1Zeit=1}] at @s positioned ~ ~1 ~ run function kanalschleuse:v1tor # Das Etikett wird entfernt. tag @e[type=minecraft:armor_stand,tag=EtiKanSchl.1TorKannOeffnen,scores={PZKanSchl.1Zeit=1}] remove EtiKanSchl.1TorKannOeffnen # Für den Schleusen-Rüstungsständer wird alle zehn Ticks die Schleusen-Funktion geladen. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Schleuse,scores={PZKanSchl.1Zeit=1}] at @s run function kanalschleuse:v1schleuse |
Variante 1: Auslöser-Funktion
Die Auslöser-Funktion zeigt dem Spieler im Chat die Optionen an, die er hat um die Höhe der Kanalschleuse einzustellen.
kanalschleuse:v1ausloeser.mcfunction
|
# Wenn der Spieler auf eine von zwei Optionen geklickt hat, wird sein Punktestand erhöht oder verringert. scoreboard players add @s[scores={PZKanSchl.1Zeit=1,PZKanSchl.1Tor=..63}] PZKanSchl.1Tor 1 scoreboard players remove @s[scores={PZKanSchl.1Zeit=-1,PZKanSchl.1Tor=5..}] PZKanSchl.1Tor 1 # Der Spieler erhält im Chat alle Schaltflächen die er braucht um die Höhe der Kanalschleuse einstellen zu können. tellraw @s ["Kanalschleuse.1: ",{"text":"\nhoehe = ","bold":true},{"text":"hoehe + 1","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Höhe + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZKanSchl.1Zeit set 1"} },{"text":"\nhoehe = ","bold":true},{"text":"hoehe - 1","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Höhe - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZKanSchl.1Zeit set -1"} },{"text":"\nhoehe == ","bold":true},{"score":{"name":"@s","objective":"PZKanSchl.1Tor"},"color":"dark_purple","bold":true} ] # Der Spieler erhält die Berechtigung die Schaltflächen ein weiteres mal auszulösen und sein Punktestand wird auf null gesetzt. scoreboard players enable @s PZKanSchl.1Zeit scoreboard players set @s PZKanSchl.1Zeit 0 |
Variante 1: Erstellen-Funktion
Die Erstellen-Funktion sorgt für den Aufruf der Funktionen, damit der untere Kanal erzeugt wird und dass die Schleuse gebaut werden kann.
kanalschleuse:v1erstellen.mcfunction
|
# Der Rüstungsständer wird in exakt eine der vier Himmelsrichtungen ausgerichtet. execute if entity @p[y_rotation=135..-135] run teleport @s ~ ~ ~ 180 0 execute if entity @p[y_rotation=-135..-45] run teleport @s ~ ~ ~ 270 0 execute if entity @p[y_rotation=-45..45] run teleport @s ~ ~ ~ 0 0 execute if entity @p[y_rotation=45..135] run teleport @s ~ ~ ~ 90 0 # Die erste Hälfte des Kanals wird auf gleicher Höhe wie der Rüstungsständer aufgerufen und platziert. execute at @s positioned ^ ^ ^15 run function kanalschleuse:v1erstellen_kanal # Bevor die Erstellen-Höhen-Funktion geladen wird, werden die beiden Variablen die dort verwendet werden auf bestimmte Werte gesetzt. scoreboard players set VarKanSchl.1AktuelleHoehe PZKanSchl.1Tor 0 scoreboard players operation VarKanSchl.1Hoehe PZKanSchl.1Tor = @p[distance=..5,scores={PZKanSchl.1Tor=4..}] PZKanSchl.1Tor execute at @s positioned ^ ^ ^82 run function kanalschleuse:v1erstellen_hoehe # Die Bodenfläche der Schleuse wird gesetzt und mit Wasser gefüllt. execute at @s run fill ^8 ^ ^32 ^-8 ^ ^82 minecraft:white_concrete replace execute at @s run fill ^7 ^1 ^33 ^-7 ^4 ^81 minecraft:water replace # Der Wert für die Tor-Öffnungszustände wird auf null gesetzt und anschließend werden Torrahmen abhängig der Blickrichtung aus Quarz gesetzt. scoreboard players set @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Neu,sort=nearest,limit=2] PZKanSchl.1Tor 0 execute at @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Neu,sort=nearest,limit=2] run fill ^-8 ^1 ^ ^8 ^21 ^ minecraft:quartz_block replace # Abhängig von dem Blickwinkel werden Etiketten für Äquator- oder Pole-Ausrichtung vergeben. execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Neu,y_rotation=90,sort=nearest,limit=2] run data merge entity @s {Tags:["EtiKanSchl.1Alle","EtiKanSchl.1Torrahmen","EtiKanSchl.1Aequator","EtiKanSchl.1TorKannOeffnen","EtiKanSchl.1Zeit"]} execute as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Neu,y_rotation=0,sort=nearest,limit=2] run data merge entity @s {Tags:["EtiKanSchl.1Alle","EtiKanSchl.1Torrahmen","EtiKanSchl.1Pole","EtiKanSchl.1TorKannOeffnen","EtiKanSchl.1Zeit"]} # Es wird ein Rüstungsständer erstellt, der den Wasserstand der Schleuse kontrolliert. Er wird ggf. ausgerichtet und bekommt einen Wert. execute at @s run summon minecraft:armor_stand ^ ^ ^57 {Small:true,Marker:true,Invisible:true,NoGravity:true,Tags:["EtiKanSchl.1Alle","EtiKanSchl.1Schleuse","EtiKanSchl.1Zeit"],Rotation:[0.0f,0.0f]} execute at @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^57 as @e[distance=..2,type=minecraft:armor_stand,tag=EtiKanSchl.1Schleuse,sort=nearest,limit=1] at @s run teleport @s ~ ~ ~ 90 0 execute at @s positioned ^ ^ ^57 run scoreboard players set @e[distance=..2,type=minecraft:armor_stand,tag=EtiKanSchl.1Schleuse,sort=nearest,limit=1] PZKanSchl.1Tor 1 # Der ursprünglich platzierte Rüstungsständer wird entfernt. kill @s |
Variante 1: Erstellen-Höhen-Funktion
Die Erstellen-Höhen-Funktion baut die Schleuse entsprechend so hoch wie es der Spieler eingestellt hat und ruft beim Erreichen der Ziel-Höhe die Funktion auf, die den Kanal an der oberen Position setzt.
kanalschleuse:v1erstellen_hoehe.mcfunction
|
# Es werden vier Wände einen Block hoch platziert. fill ^8 ^ ^-50 ^8 ^ ^ minecraft:quartz_block replace fill ^-8 ^ ^-50 ^-8 ^ ^ minecraft:quartz_block replace fill ^-8 ^ ^-50 ^8 ^ ^-50 minecraft:quartz_block replace fill ^-8 ^ ^ ^8 ^ ^ minecraft:white_concrete replace # Wenn die Höhe der Schleuse erreicht wurde, wird die Erstellen-Kanal-Funktion entsprechend aufgerufen um die zweite Hälfte zu platzieren. execute if score VarKanSchl.1AktuelleHoehe PZKanSchl.1Tor = VarKanSchl.1Hoehe PZKanSchl.1Tor positioned ^ ^-4 ^17 rotated ~180 0 run function kanalschleuse:v1erstellen_kanal # Die Variable wird um eins erhöht und anschließend verglichen. Solange sie kleiner gleich der Höhe ist, wird die Funktion sich selbst um einen Block nach oben nochmal aufrufen. scoreboard players add VarKanSchl.1AktuelleHoehe PZKanSchl.1Tor 1 execute if score VarKanSchl.1AktuelleHoehe PZKanSchl.1Tor <= VarKanSchl.1Hoehe PZKanSchl.1Tor positioned ~ ~1 ~ run function kanalschleuse:v1erstellen_hoehe |
Variante 1: Erstellen-Kanal-Funktion
Die Erstellen-Kanal-Funktion platziert den Kanal und erzeugt einen Rüstungsständer der für das Tor wichtig ist.
kanalschleuse:v1erstellen_kanal.mcfunction
|
# Der Konstruktionsblock wird gesetzt. setblock ~ ~ ~ minecraft:structure_block{mode:"LOAD",name:"kanalschleuse:v1kanal",posY:0} replace # Da die Funktion mit einer bestimmten Blickrichtung aufgerufen wird, wird der Quarzblock davon abhängig an eine der vier Positionen platziert. Das wird genutzt um die Blickrichtung zu erfassen und davon abhängig wird dann der Konstruktionsblock entsprechend mit Daten ausgestattet. setblock ^ ^ ^1 minecraft:quartz_block replace execute if block ~ ~ ~-1 minecraft:quartz_block run data merge block ~ ~ ~ {rotation:"COUNTERCLOCKWISE_90",posX:-10,posZ:15} execute if block ~1 ~ ~ minecraft:quartz_block run data merge block ~ ~ ~ {rotation:"NONE",posX:-15,posZ:-10} execute if block ~ ~ ~1 minecraft:quartz_block run data merge block ~ ~ ~ {rotation:"CLOCKWISE_90",posX:10,posZ:-15} execute if block ~-1 ~ ~ minecraft:quartz_block run data merge block ~ ~ ~ {rotation:"CLOCKWISE_180",posX:15,posZ:10} # Der Rüstungsständer für das Tor wird erzeugt und wenn seine Blickrichtung nicht zu der Blickrichtung der Funktion übereinstimmt wird er rotiert. summon minecraft:armor_stand ^ ^ ^17 {Small:true,Marker:true,Invisible:true,NoGravity:true,Tags:["EtiKanSchl.1Alle","EtiKanSchl.1Neu"],Rotation:[0.0f,0.0f]} execute unless block ~ ~ ~1 minecraft:quartz_block unless block ~ ~ ~-1 minecraft:quartz_block as @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Neu,sort=nearest,limit=1] at @s run teleport @s ~ ~ ~ 90 0 # Damit der Konstruktionsblock aktiviert wird, wird ein Redstone-Block über ihm platziert und danach das Eis durch Wasser ersetzt, da die oberste Schicht aus Eis besteht, damit das Wasser nicht über die ränder hinaus läuft. setblock ~ ~1 ~ minecraft:redstone_block replace fill ^7 ^4 ^16 ^-7 ^5 ^-15 minecraft:water replace minecraft:ice |
Variante 1: Tor-Funktion
Die Tor-Funktion speichert die Zustände wie weit ein Tor offen sein soll und ruft dann die Funktion auf, die für das Öffnen des Tores zuständig ist.
kanalschleuse:v1tor.mcfunction
|
# Je nach dem ob das Tor geöffnet oder geschlossen werden soll, wird für diesen Rüstungsständer der Wert hoch oder runtergezählt. scoreboard players remove @s[tag=!EtiKanSchl.1SpielerBeimTor,scores={PZKanSchl.1Tor=1..}] PZKanSchl.1Tor 1 scoreboard players add @s[tag=EtiKanSchl.1SpielerBeimTor,scores={PZKanSchl.1Tor=..6}] PZKanSchl.1Tor 1 # Abhängig von der Richtung des Rüstungsständers wird ein Konstruktionsblock mit dem ausgerichteten ersten Tor platziert. execute if entity @s[tag=EtiKanSchl.1Aequator,scores={PZKanSchl.1Tor=0..}] run setblock ~ ~ ~1 minecraft:structure_block{mode:"LOAD",rotation:"NONE",posX:0,posY:0,posZ:-1,name:"kanalschleuse:v1tor"} replace execute if entity @s[tag=EtiKanSchl.1Pole,scores={PZKanSchl.1Tor=0..}] run setblock ~1 ~ ~ minecraft:structure_block{mode:"LOAD",rotation:"COUNTERCLOCKWISE_90",posX:-1,posY:0,posZ:0,name:"kanalschleuse:v1tor"} replace execute if entity @s[scores={PZKanSchl.1Tor=0..}] run setblock ~ ~ ~ minecraft:redstone_block replace # Die Variable für die Tor-Öffnungsstufe wird auf null gesetzt und danach wird die Tor-Bewegen-Funktion geladen. scoreboard players set VarKanSchl.1Stufe PZKanSchl.1Tor 0 execute if score @s PZKanSchl.1Tor matches 1.. run function kanalschleuse:v1tor_bewegen # Das zweite Tor auf der gegenüberliegenden Seite wird geladen, solange der Wert für die Tor-Öffnungsstufe nicht bei null liegt. execute if entity @s[tag=EtiKanSchl.1Aequator,scores={PZKanSchl.1Tor=0..}] run setblock ~ ~ ~-1 minecraft:structure_block{mode:"LOAD",rotation:"CLOCKWISE_180",posX:0,posY:0,posZ:1,name:"kanalschleuse:v1tor"} replace execute if entity @s[tag=EtiKanSchl.1Pole,scores={PZKanSchl.1Tor=0..}] run setblock ~-1 ~ ~ minecraft:structure_block{mode:"LOAD",rotation:"CLOCKWISE_90",posX:1,posY:0,posZ:0,name:"kanalschleuse:v1tor"} replace # Der Redstone-Block aktiviert den Konstruktionsblock. setblock ~ ~ ~ minecraft:redstone_block replace # Die Variable für die Tor-Öffnungsstufe wird erneut auf null gesetzt und die Tor-Bewegen-Funktion wird geladen. tag @s add EtiKanSchl.1Tor2 scoreboard players set VarKanSchl.1Stufe PZKanSchl.1Tor 0 execute if score @s PZKanSchl.1Tor matches 1.. run function kanalschleuse:v1tor_bewegen tag @s remove EtiKanSchl.1Tor2 |
Variante 1: Tor-Bewegen-Funktion
Die Tor-Bewegen-Funktion bewegt das Tor immer genau um einen Block und wiederholt diesen Schritt, wenn das Tor weiter geöffnet werden soll.
kanalschleuse:v1tor_bewegen.mcfunction
|
# Das erste Tor wird um einen Block zur Seite verschoben. execute if entity @s[tag=!EtiKanSchl.1Tor2] run clone ^ ^ ^ ^6 ^19 ^ ^1 ^ ^ replace move # Das zweite Tor wird um einen Block zur Seite verschoben. execute if entity @s[tag=EtiKanSchl.1Tor2] run clone ^ ^ ^ ^-6 ^19 ^ ^-7 ^ ^ replace move # Damit der Wasserstand auch innerhalb des Tores vorhanden ist, wird Wasser gesetzt. fill ~ ~ ~ ~ ~3 ~ minecraft:water replace # Die Tor-Öffnungsstufe wird um eins erhöht und die Tor-Bewegen-Funktion wird erneut aufgerufen, wenn die Tor-Stufe kleiner ist, als das Tor geöffnet sein soll. scoreboard players add VarKanSchl.1Stufe PZKanSchl.1Tor 1 execute if score VarKanSchl.1Stufe PZKanSchl.1Tor < @s PZKanSchl.1Tor run function kanalschleuse:v1tor_bewegen |
Variante 1: Schleusen-Funktion
Die Schleusen-Funktion zählt die Wartezeit hoch bis der Wasserstand geändert werden soll und speichert die aktuellen Zustände der Schleuse und veranlasst die Wasserstands-Änderung, wenn alle Bedingungen dafür gegeben sind.
kanalschleuse:v1schleuse.mcfunction
|
# Es wird geprüft ob sich der Schleusen-Rüstungsständer ganz unten oder ganz oben an der Schleuse befindet und nur dann bekommt er ein Etikett. execute if block ^-7 ^ ^ minecraft:white_concrete if block ^7 ^ ^ minecraft:white_concrete run tag @s add EtiKanSchl.1Unten execute if block ^-7 ^ ^ minecraft:water if block ^7 ^ ^ minecraft:water if block ^-8 ^5 ^ minecraft:air if block ^8 ^5 ^ minecraft:air run tag @s add EtiKanSchl.1Oben # Wenn der Rüstungsständer den unteren oder oberen Bereich erreicht hat, werden die Etiketten entfernt. tag @s[tag=EtiKanSchl.1Unten,tag=EtiKanSchl.1NachUnten] remove EtiKanSchl.1NachUnten tag @s[tag=EtiKanSchl.1Oben,tag=EtiKanSchl.1NachOben] remove EtiKanSchl.1NachOben # Wenn der Rüstungsständer das Etikett besitzt, dass der Wasserstand geändert werden soll und entweder oben oder sich unten befindet, bekommt er es wieder entfernt. execute if entity @s[tag=EtiKanSchl.1WasserstandAendern] unless entity @s[tag=!EtiKanSchl.1Unten,tag=!EtiKanSchl.1Oben] run tag @s remove EtiKanSchl.1WasserstandAendern # Zuerst wird dem Rüstungsständer das Etikett entfernt, bevor er es wieder bekommt, wenn die Bedingungen stimmen. tag @s[tag=EtiKanSchl.1WasserstandAenderbar] remove EtiKanSchl.1WasserstandAenderbar execute facing entity @e[type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,sort=nearest,limit=1] eyes positioned ^ ^ ^25 if entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiKanSchl.1Torrahmen,scores={PZKanSchl.1Tor=0},sort=nearest,limit=1] run tag @s add EtiKanSchl.1WasserstandAenderbar # Ebenfalls wird ihm das Etikett für Spieler entfernt um es wieder zu vergeben, wenn die Bedingung zutrifft. tag @s[tag=EtiKanSchl.1SpielerInSchleuse] remove EtiKanSchl.1SpielerInSchleuse execute if entity @p[distance=..15,gamemode=!spectator] run tag @s add EtiKanSchl.1SpielerInSchleuse # Es wird eine Zeitlanf hochgezählt damit der Wasserstand der Schleuse nach dem Erreichen des anderen Wasserstandes nicht sofort wieder in die andere Richtung geändert wird, sondern etwas gewartet wird. scoreboard players set @s[tag=!EtiKanSchl.1SpielerInSchleuse,tag=!EtiKanSchl.1WasserstandAenderbar,scores={PZKanSchl.1Tor=2..}] PZKanSchl.1Tor 1 # Wenn der Rüstungsständer unten oder oben ist und der Wasserstand geändert werden kann und sich Spieler dort aufhalten, wird der Wert angehoben. Sobald der Wert 20 erreicht wird das Etikett vergeben, dass nun der wasserstand geändert werden soll. execute unless entity @s[tag=!EtiKanSchl.1Unten,tag=!EtiKanSchl.1Oben] run scoreboard players add @s[tag=EtiKanSchl.1WasserstandAenderbar,tag=EtiKanSchl.1SpielerInSchleuse,scores={PZKanSchl.1Tor=..19}] PZKanSchl.1Tor 1 execute store success score @s[tag=EtiKanSchl.1SpielerInSchleuse,tag=EtiKanSchl.1WasserstandAenderbar,scores={PZKanSchl.1Tor=20..}] PZKanSchl.1Tor run tag @s add EtiKanSchl.1WasserstandAendern # Wenn die Hälfte der Zeit abgelaufen ist, bis der Wasserstand sich ändert, wird allen Spielern in der Mitte der Schleuse über die Schnellleiste angezeigt, dass der Wasserstand sich bald ändern wird. execute if entity @s[tag=EtiKanSchl.1WasserstandAenderbar,tag=EtiKanSchl.1SpielerInSchleuse,scores={PZKanSchl.1Tor=10..19}] run title @a[distance=..15,gamemode=!spectator] actionbar ["",{"text":"Wasserstand wird gleich geändert!","color":"red","bold":true}] # Wenn der Wasserstand sein Soll erreicht, werden die Etiketten entsprechend entfernt. tag @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1Unten,scores={PZKanSchl.1Tor=1}] add EtiKanSchl.1NachOben tag @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1Unten,scores={PZKanSchl.1Tor=1}] remove EtiKanSchl.1Unten tag @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1Oben,scores={PZKanSchl.1Tor=1}] add EtiKanSchl.1NachUnten tag @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1Oben,scores={PZKanSchl.1Tor=1}] remove EtiKanSchl.1Oben # Wenn eine Reihe an Bedingungen zutrifft, wird ein Etikett für nach oben möglich gegeben. execute if entity @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1NachOben,scores={PZKanSchl.1Tor=1}] if block ^-8 ^4 ^ minecraft:quartz_block if block ^8 ^4 ^ minecraft:quartz_block if block ^-8 ^5 ^ minecraft:quartz_block if block ^8 ^5 ^ minecraft:quartz_block run tag @s add EtiKanSchl.1NachObenMoeglich # Abhängig von der Blickrichtung wird der Wasserstand angehoben und alle Objekte ebenfalls. execute if entity @s[tag=EtiKanSchl.1NachObenMoeglich,y_rotation=90] run clone ~-24 ~1 ~-7 ~24 ~21 ~7 ~-24 ~2 ~-7 replace move execute if entity @s[tag=EtiKanSchl.1NachObenMoeglich,y_rotation=0] run clone ~-7 ~1 ~-24 ~7 ~21 ~24 ~-7 ~2 ~-24 replace move execute if entity @s[tag=EtiKanSchl.1NachObenMoeglich,y_rotation=90] positioned ~-24 ~-1 ~-7 as @e[dx=48,dy=20,dz=14] at @s run teleport @s ~ ~1 ~ execute if entity @s[tag=EtiKanSchl.1NachObenMoeglich,y_rotation=0] positioned ~-7 ~-1 ~-24 as @e[dx=14,dy=20,dz=48] at @s run teleport @s ~ ~1 ~ # Das Etikett wird wieder entfernt. tag @s[tag=EtiKanSchl.1NachObenMoeglich] remove EtiKanSchl.1NachObenMoeglich # Wenn eine Reihe an Bedingungen zutrifft, wird ein Etikett für nach unten möglich gegeben. execute if entity @s[tag=EtiKanSchl.1WasserstandAendern,tag=EtiKanSchl.1NachUnten,scores={PZKanSchl.1Tor=1}] if block ^-8 ^ ^ minecraft:quartz_block if block ^8 ^ ^ minecraft:quartz_block if block ^-7 ^ ^ minecraft:water if block ^7 ^ ^ minecraft:water run tag @s add EtiKanSchl.1NachUntenMoeglich # Abhängig von der Blickrichtung wird der Wasserstand verringert und alle Objekte ebenfalls. execute if entity @s[tag=EtiKanSchl.1NachUntenMoeglich,y_rotation=90] run clone ~-24 ~1 ~-7 ~24 ~21 ~7 ~-24 ~ ~-7 replace move execute if entity @s[tag=EtiKanSchl.1NachUntenMoeglich,y_rotation=0] run clone ~-7 ~1 ~-24 ~7 ~21 ~24 ~-7 ~ ~-24 replace move execute if entity @s[tag=EtiKanSchl.1NachUntenMoeglich,y_rotation=90] positioned ~-24 ~-1 ~-7 as @e[dx=48,dy=20,dz=14] at @s run teleport @s ~ ~-1 ~ execute if entity @s[tag=EtiKanSchl.1NachUntenMoeglich,y_rotation=0] positioned ~-7 ~-1 ~-24 as @e[dx=14,dy=20,dz=48] at @s run teleport @s ~ ~-1 ~ # Das Etikett wird wieder entfernt. tag @s[tag=EtiKanSchl.1NachUntenMoeglich] remove EtiKanSchl.1NachUntenMoeglich |
Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele wieder und entfernt die Rüstungsständer.
kanalschleuse:v1stopp.mcfunction
|
# Die Punkte-Ziele werden entfernt. scoreboard objectives remove PZKanSchl.1Tor scoreboard objectives remove PZKanSchl.1Zeit # Der Rüstungsständer wird aus dem Inventar entfernt. clear @a minecraft:armor_stand{EigKanSchl.1Alle:true} # Das eventuell noch vorhandene Etikett wird entfernt. tag @a[tag=EtiKanSchl.1Auswahl] remove EtiKanSchl.1Auswahl # Alle Gegenstände und Rüstungsständer werden entfernt. tag @e[type=minecraft:item,nbt={Item:{tag:{EigKanSchl.1Alle:true} } }] add EtiKanSchl.1Alle kill @e[tag=EtiKanSchl.1Alle] # Der Chunk wird entladen. forceload remove ~ ~ |
|
|
|