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 |
Ein Schiff ist eine Blockkonstruktion die durch einen Konstruktionsblock geladen und durch Befehle gesteuert und bewegt wird. Das Schiff wird durch den Spieler platziert und manövriert und kann sich nur auf Wasser in Flüssen, Meeren oder Kanälen fortbewegen, ebenso lässt sich das Schiff durch den Blickwinkel des Spielers in alle vier Himmelsrichtungen rotieren. Spieler die als Passagiere mit auf dem Schiff fahren, werden mitgenommen, wenn der Spieler mit dem Steuerrad das Schiff bewegt. Das Schiff bewegt sich immer einen Block in die zu fahrende Richtung.
Schiffe können einen Block Wasserunterschied überbrücken, falls jedoch größere Unterschiede zu überbrücken sind, lässt sich das Schiff auch in eine Kanalschleuse bewegen.
Variante 1[]
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
YouTube-Videos zu diesem Thema: | |
---|---|
|
Das Schiff lässt sich über den Chat steuern, wenn man dazu ein Schwert auswählt. Man kann das Schiff mit Hilfe eines Rüstungsständers, den man beim Einschalten erhält, in einem Wasserbereich platzieren. Sobald es platziert wurde, wird man selbst zum Kapitän (per Team) und erhält ein Holzschwert. Immer wenn man es auswählt erscheint im Chat die Option zum Steuern des Schiffes. Man kann die Himmelsrichtungen einstellen und auf fahren klicken um das Schiff einen Block nach vorne zu bewegen. Für den Fall das man nicht ständig klicken muss, gibt es die Option "Tempomat". Wenn man diese aktiviert, fährt das Schiff automatisch vorwärts. Das Schiff kann nur in Gewässern fahren und stoppt sofort, wenn es auf etwas stößt. Zusätzlich zu dem Schiff gibt es drei weitere Rüstungsständer um einen geraden Kanal, eine Kanalkreuzung und einen Hafen zu errichten. Diese werden abhängig der Blickrichtung des Spielers ausgerichtet und platziert. Das Schiff wird durch einen Konstruktionsblock geladen und entsprechend positioniert. Man kann theoretisch auch die Konstruktionsdatei des Schiffes anpassen um ein anderes Schiff fahren zu lassen, dazu muss man aber die Datei austauschen.
- 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 das Punkte-Ziel, das Team und gibt den Spielern vier Rüstungsständer für das Schiff, Kanal, Kanalkreuzung und den Hafen.
schiff:v1start.mcfunction
|
# Das Auslöser-Punkte-Ziel wird erstellt. scoreboard objectives add PZSchiff.1Wert trigger ["Schiff.1: ",{"text":"Auslöser für Nachrichten","bold":true}] # Das Team für Kapitäne wird erstellt. team add TMSchiff.1Kap ["Schiff.1: ",{"text":"Kapitäne","bold":true}] # Der Rüstungsständer für das Schiff wird dem Spieler gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.1Alle:true,display:{Name:'{"text":"Schiff","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um ein Schiff zu erzeugen,"','"welches mit Schaltflächen"','"im Chat gesteuert werden kann."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Schiff","color":"gold","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Erstellen"] } } 16 # Der Rüstungsständer für einen Kanal wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.1Alle:true,display:{Name:'{"text":"Kanal","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Kanal zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Kanal","color":"gold","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Bauwerk","EtiSchiff.1Kanal"] } } 16 # Der Rüstungsständer für eine Kanalkreuzung wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.1Alle:true,display:{Name:'{"text":"Kanalkreuzung","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um eine Kanalkreuzung zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Kanalkreuzung","color":"gold","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Bauwerk","EtiSchiff.1Kanalkreuzung"] } } 16 # Der Rüstungsständer für einen Hafen wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.1Alle:true,display:{Name:'{"text":"Hafen","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Hafen zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Hafen","color":"gold","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Bauwerk","EtiSchiff.1Hafen"] } } 16 # Der Chunk wird dauerhaft geladen. forceload add ~ ~ |
Variante 1: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler mitten im Schiff das Schwert ausgewählt hat und ruft dann die Auslöser-Funktion auf um das schiff steuern zu können. Ebenfalls ruft die Zyklus-Funktion auch die Bauwerk- und die Erstellen-Funktion auf um die Kanäle und das Schiff erzeugen zu können.
schiff:v1zyklus.mcfunction
|
# Wenn ein Rüstungsständer für den Kanal oder Hafen platziert wurde, wird die Bauwerks-Funktion geladen. execute as @e[type=minecraft:armor_stand,tag=EtiSchiff.1Bauwerk] at @s align y run function schiff:v1bauwerk # Wenn der Rüstungsständer für das Schiff platziert wurde, wird die Erstellen-Funktion geladen. execute as @e[type=minecraft:armor_stand,tag=EtiSchiff.1Erstellen] at @s align y run function schiff:v1erstellen # Wenn Spieler das Schwert auswählen, wird ihnen ein Etikett gegeben. tag @a[nbt={SelectedItem:{id:"minecraft:wooden_sword",tag:{EigSchiff.1Schwert:true} } }] add EtiSchiff.1Ausgewaehlt # Wenn sich in der Nähe des Schiffs-Rüstungsständers kein Spieler aufhält der das Schwert ausgewählt hat, wird, falls der Tempomat aktiv ist, dieser deaktiviert, in dem der Name geändert wird. execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] unless entity @p[distance=..5,team=TMSchiff.1Kap,tag=EtiSchiff.1Ausgewaehlt] run data merge entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"red","text":"falsch"}'} # Wenn der Spieler gerade das Schwert ausgewählt hat, wird ihm ein Wert gegeben, damit er die Auslöser-Funktion aktiviert. scoreboard players set @a[tag=EtiSchiff.1Ausgewaehlt,tag=!EtiSchiff.1Auswahl] PZSchiff.1Wert -99 # Spieler die das Schwert ausgewählt haben und irgend einen Wert außer null besitzen, starten vom Schiffs-Rüstungsständer die Auslöser-Funktion. execute as @a[team=TMSchiff.1Kap,tag=EtiSchiff.1Ausgewaehlt,gamemode=!spectator] unless entity @s[scores={PZSchiff.1Wert=0}] at @s as @e[distance=..5,type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] at @s run function schiff:v1ausloeser # Es wird ein zusätzliches Etikett vergeben um zu erfassen ob der Spieler gerade das Schwert ausgewählt hat. tag @a[tag=EtiSchiff.1Ausgewaehlt,tag=!EtiSchiff.1Auswahl] add EtiSchiff.1Auswahl tag @a[tag=!EtiSchiff.1Ausgewaehlt,tag=EtiSchiff.1Auswahl] remove EtiSchiff.1Auswahl # Das Etikett wird wieder entfernt, sodass es nur dann vorhanden ist, wenn das Schwert ausgewählt ist. tag @a[tag=EtiSchiff.1Ausgewaehlt] remove EtiSchiff.1Ausgewaehlt # Dem Tempomat-Rüstungsständer bekommt jeden Tick den Wert um eins erhöht, wenn er aktiviert also "wahr" ist und wird nach vier Ticks wieder auf null gesetzt. Genau einmal in diesem Zyklus bekommt dann der Spieler den Wert auf acht gesetzt, welcher für das Fahren benutzt wird. execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] run scoreboard players add @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",sort=nearest,limit=1] PZSchiff.1Wert 1 execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] run scoreboard players set @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",scores={PZSchiff.1Wert=4..},sort=nearest,limit=1] PZSchiff.1Wert 0 execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] at @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",scores={PZSchiff.1Wert=1},sort=nearest,limit=1] run scoreboard players set @p[distance=..10,gamemode=!spectator,team=TMSchiff.1Kap] PZSchiff.1Wert 8 |
Variante 1: Bauwerk-Funktion
Die Bauwerk-Funktion platziert je nach Bauwerk den entsprechenden Konstruktionsblock oder -blöcke und richtet sie nach dem Blickwinkel des Spielers aus und lässt sie dann aktivieren.
schiff:v1bauwerk.mcfunction
|
# Die Rotation wird auf eine der vier Himmelrichtungen ausgerichtet. teleport @s[y_rotation=135..-135] ~ ~ ~ 180 0 teleport @s[y_rotation=-135..-45] ~ ~ ~ -90 0 teleport @s[y_rotation=-45..45] ~ ~ ~ 0 0 teleport @s[y_rotation=45..135] ~ ~ ~ 90 0 # Wenn der Kanal platziert wird, werden zwei Konstruktionsblöcke in Blickrichtung platziert. execute at @s[tag=EtiSchiff.1Kanal] positioned ^ ^ ^-31.5 run fill ^ ^ ^-0.5 ^ ^ ^0.5 minecraft:structure_block{mode:"LOAD",name:"schiff:v1kanal",posY:0} replace # Für Westen und Osten werden die beiden Konstruktionsblöcke mit den gleichen Ausrichtungsdaten bestückt. execute at @s[tag=EtiSchiff.1Kanal] as @p if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^-31.5 run data merge block ~-0.5 ~ ~ {rotation:"NONE",posX:-31,posZ:-10} execute at @s[tag=EtiSchiff.1Kanal] as @p if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^-31.5 run data merge block ~0.5 ~ ~ {rotation:"CLOCKWISE_180",posX:31,posZ:10} # Für Norden und Süden werden die beiden Konstruktionsblöcke mit den gleichen Ausrichtungsdaten bestückt. execute at @s[tag=EtiSchiff.1Kanal] as @p if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^-31.5 run data merge block ~ ~ ~0.5 {rotation:"COUNTERCLOCKWISE_90",posX:-10,posZ:31} execute at @s[tag=EtiSchiff.1Kanal] as @p if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^-31.5 run data merge block ~ ~ ~-0.5 {rotation:"CLOCKWISE_90",posX:10,posZ:-31} # Doie beiden Konstruktionsblöcke werden mit Redstone-Blöcken aktiviert und eine Eisschicht auf dem Kanal wird durch Wasser ersetzt, da ohne vorgefertigte Eisschicht das Wasser auf Ufer übergeht. execute at @s[tag=EtiSchiff.1Kanal] positioned ^ ^1 ^-31.5 run fill ^ ^ ^-0.5 ^ ^ ^0.5 minecraft:redstone_block replace execute at @s[tag=EtiSchiff.1Kanal] run fill ^7 ^4 ^-1 ^-7 ^4 ^-62 minecraft:water replace minecraft:ice # Wenn die Kanalkreuzung platziert wird, wird ein Konstruktionsblock in Blickrichtung platziert. execute at @s[tag=EtiSchiff.1Kanalkreuzung] run setblock ^ ^ ^-20 minecraft:structure_block{mode:"LOAD",name:"schiff:v1kanalkreuzung",posX:-20,posY:0,posZ:-20} replace # Es wird ein Redstone-Block in Blickrichtung platziert, der den Konstruktionsblock aktiviert und es wird eine Eisschicht auf dem Kanal entfernt. execute at @s[tag=EtiSchiff.1Kanalkreuzung] run setblock ^ ^1 ^-20 minecraft:redstone_block replace execute at @s[tag=EtiSchiff.1Kanalkreuzung] run fill ^20 ^4 ^-1 ^-20 ^4 ^-40 minecraft:water replace minecraft:ice # Wenn der Hafen platziert wird, wird dieser Konstruktionsblock platziert. execute at @s[tag=EtiSchiff.1Hafen] run setblock ~ ~ ~ minecraft:structure_block{mode:"LOAD",name:"schiff:v1hafen",posY:-3} replace # Je nach Himmelsrichtung wird der Konstruktionsblock mit entsprechenden Daten ausgestattet. execute at @s[tag=EtiSchiff.1Hafen,y_rotation=-45..45] run data merge block ~ ~ ~ {rotation:"NONE",posX:-5,posZ:-13} execute at @s[tag=EtiSchiff.1Hafen,y_rotation=45..135] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_90",posX:13,posZ:-5} execute at @s[tag=EtiSchiff.1Hafen,y_rotation=135..-135] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_180",posX:5,posZ:13} execute at @s[tag=EtiSchiff.1Hafen,y_rotation=-135..-45] run data merge block ~ ~ ~ {rotation:"COUNTERCLOCKWISE_90",posX:-13,posZ:5} # Ein Redstone-Block wird platziert um den Konstruktionsblock zu aktivieren. execute at @s[tag=EtiSchiff.1Hafen] run setblock ~ ~1 ~ minecraft:redstone_block replace # Der Rüstungsständer wird entfernt. kill @s |
Variante 1: Erstellen-Funktion
Die Erstellen-Funktion richtet den platzierten Rüstungsständer für eine der vier Himmelsrichtungen exakt aus und darauf basierend wird die Erstellen-Höhe-Funktion aufgerufen. Wenn das Schiff erstellt werden konnte, wird der Spieler mit dem Schwert ausgestattet und dort hinteleportiert.
schiff:v1erstellen.mcfunction
|
# Die Rotation wird auf eine der vier Himmelrichtungen ausgerichtet. teleport @s[y_rotation=135..-135] ~ ~ ~ 180 0 teleport @s[y_rotation=-135..-45] ~ ~ ~ -90 0 teleport @s[y_rotation=-45..45] ~ ~ ~ 0 0 teleport @s[y_rotation=45..135] ~ ~ ~ 90 0 # Es wird geprüft ob an der Stelle wo das Schiff hinkommen könnte auch wirklich Wasser vorhanden ist und nur dann wird die Erstellen-Höhen-Funktion geladen und nur dort kann das Etikett vergeben werden. Wenn es nicht vorhanden ist, bekommt der Spieler eine Fehlermeldung. execute if block ~ ~ ~ minecraft:water at @s positioned ^ ^ ^-16 if block ^ ^ ^-16 minecraft:water if block ^-6 ^ ^ minecraft:water if block ^6 ^ ^ minecraft:water run function schiff:v1erstellen_hoehe execute if entity @s[tag=!EtiSchiff.1Erstellt] run tellraw @p ["Schiff.1: ",{"text":"Um das Schiff zu platzieren muss es im Wasser gesetzt werden und der Platz muss dazu ausreichen!","color":"red","bold":true}] # Wenn das Schiff erstellt werden konnte, wird dem Spieler ein Schwert gegeben, mit dem er das Schiff steuern kann. execute if entity @s[tag=EtiSchiff.1Erstellt] run give @p[distance=..5] minecraft:wooden_sword{EigSchiff.1Alle:true,EigSchiff.1Schwert:true,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Extraschaden",Operation:0,UUID:[0,0,0,1],Slot:"mainhand"}],Unbreakable:true,Enchantments:[{id:-1}],HideFlags:6,display:{Name:'{"text":"Steuerrad","color":"gold","bold":true}',Lore:['"Wähle das Steuerad aus"','"um das Schiff zu steuern"']} } # Je nach dem in welche Richtung der Rüstungsständer blickt, wird dem Schiff-Rüstungsständer der Name und die Rotation entsprechend angepasst. execute at @s[tag=EtiSchiff.1Erstellt,y_rotation=135..-135] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Norden"}',Rotation:[180.0f,0.0f]} execute at @s[tag=EtiSchiff.1Erstellt,y_rotation=-135..-45] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Osten"}',Rotation:[270.0f,0.0f]} execute at @s[tag=EtiSchiff.1Erstellt,y_rotation=-45..45] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Süden"}',Rotation:[0.0f,0.0f]} execute at @s[tag=EtiSchiff.1Erstellt,y_rotation=45..135] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Westen"}',Rotation:[90.0f,0.0f]} # Wenn das Schiff erstellt werden konnte, wird die Schiffs-Funktion aufgerufen. execute at @s[tag=EtiSchiff.1Erstellt] positioned ^ ^ ^-16 as @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] at @s run function schiff:v1schiff # Der Spieler wird in das Team der Kapitäne gesetzt und ins Schiff teleportiert. execute if entity @s[tag=EtiSchiff.1Erstellt] run team join TMSchiff.1Kap @p[distance=..5] execute at @s[tag=EtiSchiff.1Erstellt] as @p[distance=..5,team=TMSchiff.1Kap] positioned as @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] run teleport @s ^ ^3 ^1 ~ ~ # Der Rüstungsständer wird entfernt. kill @s |
Variante 1: Erstellen-Höhen-Funktion
Die Erstellen-Höhen-Funktion sucht Wasseroberfläche in dem sie sich um einen Block nach oben nochmals aufruft, falls sie immer noch im Wasser ist. Hat sie die Wasseroberfläche gefunden, wird der Schiffs-Rüstungsständer erzeugt an dessen Position das Schiff erscheinen wird.
schiff:v1erstellen_hoehe.mcfunction
|
# Wenn Die Funktion die Wasseroberfläche erreicht hat, wird der Schiffs-Rüstungsständer samt dem Tempomat-Rüstungsständer erzeugt. execute unless block ~ ~1 ~ minecraft:water run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Invisible:true,CustomName:'{"text":"Westen","color":"gold","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Schiff","EtiSchiff.1Richtung"],Rotation:[0.0f,0.0f],Passengers:[{id:"minecraft:armor_stand",Small:true,NoGravity:true,Invisible:true,CustomName:'{"text":"falsch","color":"red","bold":true}',Tags:["EtiSchiff.1Alle","EtiSchiff.1Tempomat"] } ] } # Das Etikett wird vergeben, wenn die Wasseroberfläche erreicht wurde. execute unless block ~ ~1 ~ minecraft:water run tag @s add EtiSchiff.1Erstellt # Der Schiffs-Rüstungsständer wird in die gleiche Blickrichtung rotiert wie der Erstellen-Rüstungsständer schaut. execute if entity @s[tag=EtiSchiff.1Erstellt] as @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Schiff,sort=nearest,limit=1] positioned as @s run teleport @s ~ ~ ~ ~ ~ # Wenn eine Schicht Wasser über der aktuellen Position liegt, wird die Erstellen-Höhen-Funktion erneut aufgerufen. execute if entity @s[tag=!EtiSchiff.1Erstellt] positioned ~ ~1 ~ if block ~ ~ ~ minecraft:water if block ^6 ^ ^ minecraft:water if block ^-6 ^ ^ minecraft:water run function schiff:v1erstellen_hoehe |
Variante 1: Auslöser-Funktion
Die Auslöser-Funktion zeigt dem Spieler im Chat die Optionen die er hat um das Schiff zu steuern. Werden Optionen aktiviert, werden sie hier erfasst und eingestellt. Die Schiff-Funktion wird von hier gestartet.
schiff:v1ausloeser.mcfunction
|
# Der Rüstungsständer bekommt den Wert null zugewiesen und anschließend wird geprüft ob der Spieler einen Richtungswechsel einleiten will. Wenn er das vorhat, wird vom Rüstungsständer aus geprüft ob das Schiff gedreht werden kann und nur dann werden neue Werte vergeben. scoreboard players set @s PZSchiff.1Wert 0 execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=1..2}] if block ~ ~ ~14 minecraft:water if block ~ ~ ~-14 minecraft:water if block ~6 ~ ~14 minecraft:water if block ~-6 ~ ~14 minecraft:water if block ~6 ~ ~-14 minecraft:water if block ~-6 ~ ~-14 minecraft:water run scoreboard players set @s PZSchiff.1Wert 1 execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=3..4}] if block ~14 ~ ~ minecraft:water if block ~-14 ~ ~ minecraft:water if block ~14 ~ ~6 minecraft:water if block ~14 ~ ~-6 minecraft:water if block ~-14 ~ ~6 minecraft:water if block ~-14 ~ ~-6 minecraft:water run scoreboard players set @s PZSchiff.1Wert -1 # Wenn der Spieler den Chat angeklickt hat und dabei für den Auslöser den Wert eins bis vier hat, wird damit die entsprechende Richtung eingestellt. execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=1}] run data merge entity @s[scores={PZSchiff.1Wert=1}] {CustomName:'{"bold":true,"color":"blue","text":"Norden"}',Rotation:[180.0f,0.0f]} execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=3}] run data merge entity @s[scores={PZSchiff.1Wert=-1}] {CustomName:'{"bold":true,"color":"gold","text":"Osten"}',Rotation:[270.0f,0.0f]} execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=2}] run data merge entity @s[scores={PZSchiff.1Wert=1}] {CustomName:'{"bold":true,"color":"blue","text":"Süden"}',Rotation:[0.0f,0.0f]} execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=4}] run data merge entity @s[scores={PZSchiff.1Wert=-1}] {CustomName:'{"bold":true,"color":"gold","text":"Westen"}',Rotation:[90.0f,0.0f]} # Im Chat kann der Spieler auch den Tempomat ein- oder ausschalten und dies wird über den Namen des Rüstungsständers geregelt. execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=5}] run data merge entity @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"green","text":"wahr"}'} execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=6}] run data merge entity @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"red","text":"falsch"}'} # Falls der Spieler auf die Fahren-Option angeklickt hat, wird die entsprechende Schiff-Funktion geladen execute if entity @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=8}] run function schiff:v1schiff # Falls der Spieler den Tempomat aktiviert hat, soll er für diesen Zeitraum keine Nachrichten mehr erhalten. Dazu erhält er ein Etikett. execute as @p[distance=..5,team=TMSchiff.1Kap] unless entity @s[scores={PZSchiff.1Wert=5}] if entity @e[distance=..10,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",sort=nearest,limit=1] run tag @s add EtiSchiff.1KeineNachricht # Wenn der Spieler das Schiff in eine andere Richtung rotieren möchte in die das Schiff nicht gedreht werden kann, wird eine Fehlermeldung ausgegeben. execute if entity @s[scores={PZSchiff.1Wert=0}] run tellraw @p[distance=..5,team=TMSchiff.1Kap,scores={PZSchiff.1Wert=1..4}] ["",{"text":"Das Schiff kann an dieser Stelle die Richtung nicht ändern!","color":"red","bold":true}] # Der Spieler erhält im Chat alle Steuerungsoptionen des Schiffes. tellraw @p[distance=..5,team=TMSchiff.1Kap,tag=!EtiSchiff.1KeineNachricht] ["Schiff.1: ",{"text":"\nrichtung = ","bold":true},{"text":"Norden","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Norden"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 1"} },{"text":"\nrichtung = ","bold":true},{"text":"Osten","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Osten"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 3"} },{"text":"\nrichtung = ","bold":true},{"text":"Süden","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Süden"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 2"} },{"text":"\nrichtung = ","bold":true},{"text":"Westen","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Westen"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 4"} },{"text":"\nrichtung == ","bold":true},{"entity":"@e[type=minecraft:armor_stand,tag=EtiSchiff.1Richtung,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"\ntempomat (","bold":true},{"text":"=wahr","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für aktiven Tempomat"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 5"} },{"text":",","bold":true},{"text":"=falsch","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für inaktiven Tempomat"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 6"} },{"text":") == ","bold":true},{"entity":"@e[distance=..10,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"\nfahren(richtung)","color":"gray","bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Schiff fahren"} },"clickEvent":{"action":"run_command","value":"/trigger PZSchiff.1Wert set 8"} }] # Der Spieler erhält die Erlaubnis den Auslöser wieder zu betätigen und sein Wert wird auf null gesetzt. scoreboard players enable @p[distance=..5,team=TMSchiff.1Kap] PZSchiff.1Wert scoreboard players set @p[distance=..5,team=TMSchiff.1Kap] PZSchiff.1Wert 0 # Das Etikett für die Nachrichten-Unterdrückung wird wieder entfernt. tag @p[distance=..5,tag=EtiSchiff.1KeineNachricht] remove EtiSchiff.1KeineNachricht |
Variante 1: Schiff-Funktion
Die Schiff-Funktion erzeugt das Schiff an der aktuellen Position und prüft ob sich das Schiff gedreht hat. Falls das geschehen ist, werden die beiden Seitenbereiche vom gedrehten Schiff gelöscht.
schiff:v1schiff.mcfunction
|
# Bevor das Schiff in die neue Richtung bewegt wird, werden alle Blöcke durch Luft ersetzt, die beim normalen Ersetzen droppen würden. execute rotated ~ 0 run fill ^-6 ^-1 ^-16 ^6 ^14 ^16 minecraft:air replace #schiff:v1drop-bloecke execute rotated ~ 0 run fill ^-6 ^-1 ^-16 ^6 ^14 ^16 minecraft:air replace execute rotated ~ 0 run fill ^-6 ^-2 ^-16 ^6 ^-1 ^16 minecraft:water replace # Wenn der Spieler das Schiff um 90° oder 270° dreht, würden manche Teile davon weiterhin in der Luft bleiben, diese werden überprüft und entfernt. execute rotated ~ 0 if block ^7 ^1 ^1 minecraft:spruce_planks run fill ^7 ^ ^-3 ^15 ^-2 ^3 minecraft:water replace execute rotated ~ 0 if block ^7 ^1 ^1 minecraft:spruce_planks run fill ^7 ^1 ^-5 ^15 ^13 ^5 minecraft:air replace execute rotated ~ 0 if block ^-7 ^1 ^1 minecraft:spruce_planks run fill ^-7 ^ ^-3 ^-15 ^-2 ^3 minecraft:water replace execute rotated ~ 0 if block ^-7 ^1 ^1 minecraft:spruce_planks run fill ^-7 ^1 ^-5 ^-15 ^13 ^5 minecraft:air replace # Wenn sich kein Wasser voraus befindet, wird der Tempomat deaktiviert, also auf "falsch" gesetzt. execute unless block ^ ^-1 ^18 minecraft:water run data merge entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiSchiff.1Tempomat,name="wahr",sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"red","text":"falsch"}'} # Wenn sich Wasser voraus befindet, wird der Rüstungsständer nach vorne teleporitert. execute if block ^ ^-1 ^18 minecraft:water run teleport @s ^ ^ ^1 # Wenn das Schiff tiefer im Wasser liegt oder zu hoch, dann wird das Schiff um einen Block nach unten oder oben bewegt. execute if block ^ ^1 ^18 minecraft:water if block ^-7 ^1 ^ minecraft:water if block ^7 ^1 ^ minecraft:water run teleport @s ^ ^1 ^1 execute if block ^ ^ ^18 minecraft:air if block ^ ^-1 ^18 minecraft:water if block ^-7 ^ ^ minecraft:air if block ^-7 ^-1 ^ minecraft:water if block ^7 ^ ^ minecraft:air if block ^7 ^-1 ^ minecraft:water run teleport @s ^ ^-1 ^1 # Je nach dem in welche Blickrichtung das Schiff schaut, wird der entsprechende Bereich ausgewählt und alle Spieler die sich dort befinden werden mit dem Schiff mitbewegt. execute unless entity @s[name=!"Norden",name=!"Süden"] at @s positioned ~-6 ~-4 ~-16 as @a[dx=12,dy=20,dz=32] positioned as @s positioned ^ ^ ^1 rotated as @s run teleport @s ~ ~ ~ ~ ~ execute unless entity @s[name=!"Westen",name=!"Osten"] at @s positioned ~-16 ~-4 ~-6 as @a[dx=32,dy=20,dz=12] positioned as @s positioned ^ ^ ^1 rotated as @s run teleport @s ~ ~ ~ ~ ~ # Es wird ein Konstruktionsblock platziert, der das Schiff laden kann. execute at @s run setblock ~ ~ ~ minecraft:structure_block{mode:"LOAD",name:"schiff:v1schiff",posY:-2} replace # Je nach Blickrichtung des Schiffes wird der Konstruktionsblock mit entsprechender Daten ausgestattet. execute at @s[name="Westen"] run data merge block ~ ~ ~ {rotation:"NONE",posX:-15,posZ:-6} execute at @s[name="Norden"] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_90",posX:6,posZ:-15} execute at @s[name="Osten"] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_180",posX:15,posZ:6} execute at @s[name="Süden"] run data merge block ~ ~ ~ {rotation:"COUNTERCLOCKWISE_90",posX:-6,posZ:15} # Über dem Konstruktionsblock wird ein Redstone-Block platziert um diesen zu aktivieren. execute at @s run setblock ~ ~1 ~ minecraft:redstone_block replace |
schiff:v1drop-bloecke.json
|
{ "values":[ "#minecraft:buttons", "#minecraft:signs", "#minecraft:wall_signs", "minecraft:tripwire_hook" ] } |
Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel und das Team wieder. Es entfernt Etiketten, Gegenstände und die Rüstungsständer. Ebenfalls werden platzierte Schiffe entfernt.
schiff:v1stopp.mcfunction
|
# Das Punkte.Ziel wird entfernt. scoreboard objectives remove PZSchiff.1Wert # Das Team für Kapitäne wird entfernt. team remove TMSchiff.1Kap # Die Rüstungsständer und das Schwert werden aus den Spieler-Inventaren entfernt. clear @a minecraft:armor_stand{EigSchiff.1Alle:true} clear @a minecraft:wooden_sword{EigSchiff.1Alle:true} # Ein eventuell vorhandenes Etikett wird entfernt. tag @a[tag=EtiSchiff.1Auswahl] remove EtiSchiff.1Auswahl # Die Schiffs-Konstruktion wird an der Position der Rüstungsständer entfernt. execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] rotated ~ 0 run fill ^-6 ^ ^-16 ^6 ^14 ^16 minecraft:air replace #schiff:v1drop-bloecke execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] rotated ~ 0 run fill ^-6 ^ ^-16 ^6 ^14 ^16 minecraft:air replace execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.1Schiff] rotated ~ 0 run fill ^-6 ^-2 ^-16 ^6 ^ ^16 minecraft:water replace # Eventuell gedroppte Gegenstände werden etikettiert und alle Objekte mit diesen Etikett werden entfernt. tag @e[type=minecraft:item,nbt={Item:{tag:{EigSchiff.1Alle:true} } }] add EtiSchiff.1Alle kill @e[tag=EtiSchiff.1Alle] # Der Chunk wird entladen. forceload remove ~ ~ |
Variante 2[]
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
YouTube-Videos zu diesem Thema: | |
---|---|
|
Dieses Schiff wird durch das Laufen auf Deck gesteuert. Ma hält ein Schwert und läuft in die Richtung in die das Schiff sich bewegen soll. Dabei bewegt es sich immer einen Block vorwärts. Beim Einschalten erhält man einen Rüstungsständer, mit dem man das Schiff im Wasser platzieren kann. Sobald man es platziert hat, wird man zum Kapitän (durch den Teambeitritt) und erhält das Schwert um das Schiff zu steuern. Ebenfalls erhält man drei weitere Rüstungsständer mit denen man gerade Kanäle, Kanalkreuzungen und Häfen platzieren kann. Das Schiff kann ein-Block-Wasserunterschiede bewältigen und überall entlang fahren wo sich Wasser befindet und stoppt wenn dort nicht entlanggefahren werden kann. Das Schiff wird durch einen Konstruktionsblock geladen. In der Theorie kann man die Konstruktionsdatei austauschen um ein anderes Schiff zu steuern, allerdings muss darauf geachtet werden dass die Maße des Schiffes stimmen.
- Einschalten
- Befehl 2.1 Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
- Wiederholen
- Befehl 2.2 Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt.
- Ausschalten
- Befehl 2.3 Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.
Befehlsblöcke mit Befehlen: |
|
Variante 2: Start-Funktion
Die Start-Funktion erstellt das Punkte-Ziel, das Team und gibt den Spielern vier Rüstungsständer für das Schiff, Kanal, Kanalkreuzung und den Hafen.
schiff:v2start.mcfunction
|
# Das Auslöser-Punkte-Ziel wird erstellt. scoreboard objectives add PZSchiff.2Wert trigger ["Schiff.2: ",{"text":"Auslöser für Nachrichten","bold":true}] # Das Team für Kapitäne wird erstellt. team add TMSchiff.2Kap ["Schiff.2: ",{"text":"Kapitäne","bold":true}] # Der Rüstungsständer für das Schiff wird dem Spieler gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.2Alle:true,display:{Name:'{"text":"Schiff","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um ein Schiff zu erzeugen,"','"welches mit auswählen des Schwerts"','"und Laufen gesteuert werden kann."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Schiff","color":"red","bold":true}',Tags:["EtiSchiff.2Alle","EtiSchiff.2Erstellen"] } } 16 # Der Rüstungsständer für einen Kanal wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.2Alle:true,display:{Name:'{"text":"Kanal","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Kanal zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Kanal","color":"red","bold":true}',Tags:["EtiSchiff.2Alle","EtiSchiff.2Bauwerk","EtiSchiff.2Kanal"] } } 16 # Der Rüstungsständer für eine Kanalkreuzung wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.2Alle:true,display:{Name:'{"text":"Kanalkreuzung","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um eine Kanalkreuzung zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Kanalkreuzung","color":"red","bold":true}',Tags:["EtiSchiff.2Alle","EtiSchiff.2Bauwerk","EtiSchiff.2Kanalkreuzung"] } } 16 # Der Rüstungsständer für einen Hafen wird gegeben. give @a[distance=..15] minecraft:armor_stand{EigSchiff.2Alle:true,display:{Name:'{"text":"Hafen","color":"red","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Hafen zu erzeugen."']},EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Hafen","color":"red","bold":true}',Tags:["EtiSchiff.2Alle","EtiSchiff.2Bauwerk","EtiSchiff.2Hafen"] } } 16 # Der Chunk wird dauerhaft geladen. forceload add ~ ~ |
Variante 2: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler sich im Schiff befindet und ruft dann die Fahren-Funktion auf. Sie prüft auch ob man Rüstungsständer für Bauwerke oder das Schiff platziert hat und ruft entsprechende Funktionen auf.
schiff:v2zyklus.mcfunction
|
# Wenn ein Rüstungsständer für den Kanal oder Hafen platziert wurde, wird die Bauwerks-Funktion geladen. execute as @e[type=minecraft:armor_stand,tag=EtiSchiff.2Bauwerk] at @s align y run function schiff:v2bauwerk # Wenn der Rüstungsständer für das Schiff platziert wurde, wird die Erstellen-Funktion geladen. execute as @e[type=minecraft:armor_stand,tag=EtiSchiff.2Erstellen] at @s align y run function schiff:v2erstellen # Nur wenn der Spieler das Holzschwert ausgewählt hat, bekommt er ein Etikett. tag @a[team=TMSchiff.2Kap,nbt={SelectedItem:{id:"minecraft:wooden_sword",tag:{EigSchiff.2Schwert:true} } }] add EtiSchiff.2Steuer # Vom Schiffs-Rüstungsständer wird geprüft ob sich fünf Blöcke über ihm ein Spieler mit Schwert aufhält und dieser sich auf Falltüren bewegt hat. Nur dann wird die Fahren-Funktion ausgelöst. execute as @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff] at @s positioned ~ ~5 ~ at @p[distance=0.8..1.5,team=TMSchiff.2Kap,tag=EtiSchiff.2Steuer,gamemode=!spectator] if block ~ ~-1 ~ minecraft:oak_trapdoor[open=false] align xyz positioned ~0.5 ~ ~0.5 rotated ~ 0 run function schiff:v2fahren # Spieler die das Schwert ausgewählt haben, bekommen das Etikett wieder entfernt, damit es nur für einen Moment vorhanden ist. tag @a[tag=EtiSchiff.2Steuer] remove EtiSchiff.2Steuer |
Variante 2: Bauwerk-Funktion
Die Bauwerk-Funktion platziert je nach Bauwerk den entsprechenden Konstruktionsblock oder -blöcke und richtet sie nach dem Blickwinkel des Spielers aus und lässt sie dann aktivieren.
schiff:v2bauwerk.mcfunction
|
# Die Rotation wird auf eine der vier Himmelrichtungen ausgerichtet. teleport @s[y_rotation=135..-135] ~ ~ ~ 180 0 teleport @s[y_rotation=-135..-45] ~ ~ ~ -90 0 teleport @s[y_rotation=-45..45] ~ ~ ~ 0 0 teleport @s[y_rotation=45..135] ~ ~ ~ 90 0 # Wenn der Kanal platziert wird, werden zwei Konstruktionsblöcke in Blickrichtung platziert. execute at @s[tag=EtiSchiff.2Kanal] positioned ^ ^ ^-31.5 run fill ^ ^ ^-0.5 ^ ^ ^0.5 minecraft:structure_block{mode:"LOAD",name:"schiff:v2kanal",posY:0} replace # Für Westen und Osten werden die beiden Konstruktionsblöcke mit den gleichen Ausrichtungsdaten bestückt. execute at @s[tag=EtiSchiff.2Kanal] as @p if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^-31.5 run data merge block ~-0.5 ~ ~ {rotation:"NONE",posX:-31,posZ:-10} execute at @s[tag=EtiSchiff.2Kanal] as @p if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] positioned ^ ^ ^-31.5 run data merge block ~0.5 ~ ~ {rotation:"CLOCKWISE_180",posX:31,posZ:10} # Für Norden und Süden werden die beiden Konstruktionsblöcke mit den gleichen Ausrichtungsdaten bestückt. execute at @s[tag=EtiSchiff.2Kanal] as @p if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^-31.5 run data merge block ~ ~ ~0.5 {rotation:"COUNTERCLOCKWISE_90",posX:-10,posZ:31} execute at @s[tag=EtiSchiff.2Kanal] as @p if entity @s[y_rotation=135..45] unless entity @s[y_rotation=-135..-45] positioned ^ ^ ^-31.5 run data merge block ~ ~ ~-0.5 {rotation:"CLOCKWISE_90",posX:10,posZ:-31} # Doie beiden Konstruktionsblöcke werden mit Redstone-Blöcken aktiviert und eine Eisschicht auf dem Kanal wird durch Wasser ersetzt, da ohne vorgefertigte Eisschicht das Wasser auf Ufer übergeht. execute at @s[tag=EtiSchiff.2Kanal] positioned ^ ^1 ^-31.5 run fill ^ ^ ^-0.5 ^ ^ ^0.5 minecraft:redstone_block replace execute at @s[tag=EtiSchiff.2Kanal] run fill ^7 ^4 ^-1 ^-7 ^4 ^-62 minecraft:water replace minecraft:ice # Wenn die Kanalkreuzung platziert wird, wird ein Konstruktionsblock in Blickrichtung platziert. execute at @s[tag=EtiSchiff.2Kanalkreuzung] run setblock ^ ^ ^-20 minecraft:structure_block{mode:"LOAD",name:"schiff:v2kanalkreuzung",posX:-20,posY:0,posZ:-20} replace # Es wird ein Redstone-Block in Blickrichtung platziert, der den Konstruktionsblock aktiviert und es wird eine Eisschicht auf dem Kanal entfernt. execute at @s[tag=EtiSchiff.2Kanalkreuzung] run setblock ^ ^1 ^-20 minecraft:redstone_block replace execute at @s[tag=EtiSchiff.2Kanalkreuzung] run fill ^20 ^4 ^-1 ^-20 ^4 ^-40 minecraft:water replace minecraft:ice # Wenn der Hafen platziert wird, wird dieser Konstruktionsblock platziert. execute at @s[tag=EtiSchiff.2Hafen] run setblock ~ ~ ~ minecraft:structure_block{mode:"LOAD",name:"schiff:v2hafen",posY:-3} replace # Je nach Himmelsrichtung wird der Konstruktionsblock mit entsprechenden Daten ausgestattet. execute at @s[tag=EtiSchiff.2Hafen,y_rotation=-45..45] run data merge block ~ ~ ~ {rotation:"NONE",posX:-5,posZ:-13} execute at @s[tag=EtiSchiff.2Hafen,y_rotation=45..135] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_90",posX:13,posZ:-5} execute at @s[tag=EtiSchiff.2Hafen,y_rotation=135..-135] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_180",posX:5,posZ:13} execute at @s[tag=EtiSchiff.2Hafen,y_rotation=-135..-45] run data merge block ~ ~ ~ {rotation:"COUNTERCLOCKWISE_90",posX:-13,posZ:5} # Ein Redstone-Block wird platziert um den Konstruktionsblock zu aktivieren. execute at @s[tag=EtiSchiff.2Hafen] run setblock ~ ~1 ~ minecraft:redstone_block replace # Der Rüstungsständer wird entfernt. kill @s |
Variante 2: Erstellen-Funktion
Die Erstellen-Funktion richtet den platzierten Rüstungsständer für eine der vier Himmelsrichtungen exakt aus und darauf basierend wird die Erstellen-Höhe-Funktion aufgerufen. Wenn das Schiff erstellt werden konnte, wird der Spieler mit dem Schwert ausgestattet und dort hinteleportiert.
schiff:v2erstellen.mcfunction
|
# Die Rotation wird auf eine der vier Himmelrichtungen ausgerichtet. teleport @s[y_rotation=135..-135] ~ ~ ~ 180 0 teleport @s[y_rotation=-135..-45] ~ ~ ~ -90 0 teleport @s[y_rotation=-45..45] ~ ~ ~ 0 0 teleport @s[y_rotation=45..135] ~ ~ ~ 90 0 # Es wird geprüft ob an der Stelle wo das Schiff hinkommen könnte auch wirklich Wasser vorhanden ist und nur dann wird die Erstellen-Höhen-Funktion geladen und nur dort kann das Etikett vergeben werden. Wenn es nicht vorhanden ist, bekommt der Spieler eine Fehlermeldung. execute if block ~ ~ ~ minecraft:water at @s positioned ^ ^ ^-16 if block ^ ^ ^-16 minecraft:water if block ^-6 ^ ^ minecraft:water if block ^6 ^ ^ minecraft:water run function schiff:v2erstellen_hoehe execute if entity @s[tag=!EtiSchiff.2Erstellt] run tellraw @p ["Schiff.2: ",{"text":"Um das Schiff zu platzieren muss es im Wasser gesetzt werden und der Platz muss dazu ausreichen!","color":"red","bold":true}] # Wenn das Schiff erstellt werden konnte, wird dem Spieler ein Schwert gegeben, mit dem er das Schiff steuern kann. execute if entity @s[tag=EtiSchiff.2Erstellt] run give @p[distance=..5] minecraft:wooden_sword{EigSchiff.2Alle:true,EigSchiff.2Schwert:true,AttributeModifiers:[{AttributeName:"minecraft:generic.attack_damage",Amount:-1,Name:"Extraschaden",Operation:0,UUID:[0,0,0,1],Slot:"mainhand"}],Unbreakable:true,Enchantments:[{id:-1}],HideFlags:6,display:{Name:'{"text":"Steuerrad","color":"gold","bold":true}',Lore:['"Wähle das Steuerad aus"','"um das Schiff zu steuern"']} } # Je nach dem in welche Richtung der Rüstungsständer blickt, wird dem Schiff-Rüstungsständer der Name und die Rotation entsprechend angepasst. execute if entity @s[tag=EtiSchiff.2Erstellt,y_rotation=135..-135] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Norden"}',Rotation:[180.0f,0.0f]} execute if entity @s[tag=EtiSchiff.2Erstellt,y_rotation=-135..-45] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Osten"}',Rotation:[270.0f,0.0f]} execute if entity @s[tag=EtiSchiff.2Erstellt,y_rotation=-45..45] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Süden"}',Rotation:[0.0f,0.0f]} execute if entity @s[tag=EtiSchiff.2Erstellt,y_rotation=45..135] positioned ^ ^ ^-16 run data merge entity @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Westen"}',Rotation:[90.0f,0.0f]} # Wenn das Schiff erstellt werden konnte, wird die Schiffs-Funktion aufgerufen. execute if entity @s[tag=EtiSchiff.2Erstellt] positioned ^ ^ ^-16 as @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] at @s run function schiff:v2schiff # Der Spieler wird in das Team der Kapitäne gesetzt und ins Schiff teleportiert. execute if entity @s[tag=EtiSchiff.2Erstellt] run team join TMSchiff.2Kap @p[distance=..5] execute if entity @s[tag=EtiSchiff.2Erstellt] as @p[distance=..5,team=TMSchiff.2Kap] positioned as @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] run teleport @s ^ ^5 ^-1 ~ ~ # Der Rüstungsständer wird entfernt. kill @s |
Variante 2: Erstellen-Höhen-Funktion
Die Erstellen-Höhen-Funktion sucht Wasseroberfläche in dem sie sich um einen Block nach oben nochmals aufruft, falls sie immer noch im Wasser ist. Hat sie die Wasseroberfläche gefunden, wird der Schiffs-Rüstungsständer erzeugt an dessen Position das Schiff erscheinen wird.
schiff:v2erstellen_hoehe.mcfunction
|
# Wenn Die Funktion die Wasseroberfläche erreicht hat, wird der Schiffs-Rüstungsständer samt dem Tempomat-Rüstungsständer erzeugt. execute unless block ~ ~1 ~ minecraft:water run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Invisible:true,CustomName:'{"text":"Westen","color":"gold","bold":true}',Tags:["EtiSchiff.2Alle","EtiSchiff.2Schiff","EtiSchiff.2Richtung"],Rotation:[0.0f,0.0f]} # Das Etikett wird vergeben, wenn die Wasseroberfläche erreicht wurde. execute unless block ~ ~1 ~ minecraft:water run tag @s add EtiSchiff.2Erstellt # Der Schiffs-Rüstungsständer wird in die gleiche Blickrichtung rotiert wie der Erstellen-Rüstungsständer schaut. execute if entity @s[tag=EtiSchiff.2Erstellt] as @e[distance=..2,type=minecraft:armor_stand,tag=EtiSchiff.2Schiff,sort=nearest,limit=1] positioned as @s run teleport @s ~ ~ ~ ~ ~ # Wenn eine Schicht Wasser über der aktuellen Position liegt, wird die Erstellen-Höhen-Funktion erneut aufgerufen. execute if entity @s[tag=!EtiSchiff.2Erstellt] positioned ~ ~1 ~ if block ~ ~ ~ minecraft:water if block ^6 ^ ^ minecraft:water if block ^-6 ^ ^ minecraft:water run function schiff:v2erstellen_hoehe |
Variante 2: Fahren-Funktion
Die Fahren-Funktion prüft ob sich das Schiff an die neue Position gelangen kann, falls dort Wasser ist, wird das Schiff bewegt, ansonsten bekommt der Spieler eine Fehlermeldung.
schiff:v2fahren.mcfunction
|
# Es wird von der Position des Spielers aus fünf Blöcke tiefer geprüft ob an der neuen Position Wasser vorhanden ist, sodass dort das Schiff hingelangen kann und nur wenn die Prüfung erfolgreich ist, bekommt der Rüstungsständer das Etikett. execute positioned ~ ~-5 ~ rotated ~ 0 if block ^ ^ ^14 minecraft:water if block ^ ^ ^-14 minecraft:water if block ^-6 ^ ^14 minecraft:water if block ^6 ^ ^14 minecraft:water if block ^-6 ^ ^-14 minecraft:water if block ^6 ^ ^-14 minecraft:water run tag @s add PZSchiff.2NeueRichtung # Wenn der Rüstungsständer nicht das Etikett besitzt, wird eine Fehlermeldung ausgegeben und der Spieler wird an seine Ausgangsposition zurück teleportiert. execute if entity @s[tag=!PZSchiff.2NeueRichtung] run tellraw @p[distance=..2,team=TMSchiff.2Kap,tag=EtiSchiff.2Steuer] ["Schiff.2: ",{"text":"Das Schiff kann in diese Richtung nicht gedreht oder gefahren werden.","color":"red","bold":true}] execute positioned as @s[tag=!PZSchiff.2NeueRichtung] positioned ~ ~5 ~ run teleport @p[distance=..2,team=TMSchiff.2Kap,tag=EtiSchiff.2Steuer] ~ ~ ~ # Wenn die neue Position des Schiffes möglich ist, wird der Rüstungsständer an die neue Stelle teleportiert. teleport @s[tag=PZSchiff.2NeueRichtung] ~ ~-5 ~ ~ 0 # Wenn der Rüstungsständer in eine Richtung schaut in die er bisher noch nicht geschaut hat, wird er genau in die Himmelsrichtung ausgerichtet und bekommt als Namen den der Himmelsrichtung. data merge entity @s[tag=PZSchiff.2NeueRichtung,y_rotation=135..-135,name=!"Norden"] {CustomName:'{"bold":true,"color":"blue","text":"Norden"}',Rotation:[180.0f,0.0f]} data merge entity @s[tag=PZSchiff.2NeueRichtung,y_rotation=-135..-45,name=!"Osten"] {CustomName:'{"bold":true,"color":"gold","text":"Osten"}',Rotation:[270.0f,0.0f]} data merge entity @s[tag=PZSchiff.2NeueRichtung,y_rotation=-45..45,name=!"Süden"] {CustomName:'{"bold":true,"color":"blue","text":"Süden"}',Rotation:[0.0f,0.0f]} data merge entity @s[tag=PZSchiff.2NeueRichtung,y_rotation=45..135,name=!"Westen"] {CustomName:'{"bold":true,"color":"gold","text":"Westen"}',Rotation:[90.0f,0.0f]} # Der Schiff-Rüstungsständer ruft die Schiff-Funktion auf, wenn der Rüstungsständer das Etikett dafür besitzt. execute at @s[tag=PZSchiff.2NeueRichtung] run function schiff:v2schiff # Das etikett wird anschließend wieder entfernt. tag @s[tag=PZSchiff.2NeueRichtung] remove PZSchiff.2NeueRichtung |
Variante 2: Schiff-Funktion
Die Schiff-Funktion erzeugt das Schiff an der aktuellen Position und prüft ob sich das Schiff gedreht hat. Falls das geschehen ist, werden die beiden Seitenbereiche vom gedrehten Schiff gelöscht.
schiff:v2schiff.mcfunction
|
# Bevor das Schiff in die neue Richtung bewegt wird, werden alle Blöcke durch Luft ersetzt, die beim normalen Ersetzen droppen würden. execute rotated ~ 0 run fill ^-4 ^-1 ^-12 ^4 ^14 ^12 minecraft:air replace #schiff:v2drop-bloecke execute rotated ~ 0 run fill ^-4 ^-1 ^-12 ^4 ^14 ^12 minecraft:air replace execute rotated ~ 0 run fill ^-4 ^-2 ^-12 ^4 ^-1 ^12 minecraft:water replace # Wenn der Spieler das Schiff um 90° oder 270° dreht, würden manche Teile davon weiterhin in der Luft bleiben, diese werden überprüft und entfernt. execute rotated ~ 0 if block ^5 ^2 ^-1 minecraft:dark_oak_planks run fill ^5 ^-2 ^-3 ^12 ^ ^3 minecraft:water replace execute rotated ~ 0 if block ^5 ^2 ^-1 minecraft:dark_oak_planks run fill ^5 ^1 ^-5 ^12 ^13 ^5 minecraft:air replace execute rotated ~ 0 if block ^-5 ^2 ^-1 minecraft:dark_oak_planks run fill ^-5 ^-2 ^-3 ^-12 ^ ^3 minecraft:water replace execute rotated ~ 0 if block ^-5 ^2 ^-1 minecraft:dark_oak_planks run fill ^-5 ^1 ^-5 ^-12 ^13 ^5 minecraft:air replace # Wenn das Schiff tiefer im Wasser liegt oder zu hoch, dann wird das Schiff um einen Block nach unten oder oben bewegt. execute if block ^ ^1 ^16 minecraft:water if block ^-7 ^1 ^ minecraft:water if block ^7 ^1 ^ minecraft:water run teleport @s ~ ~1 ~ execute if block ^ ^ ^16 minecraft:air if block ^ ^-1 ^16 minecraft:water if block ^-7 ^ ^ minecraft:air if block ^-7 ^-1 ^ minecraft:water if block ^7 ^ ^ minecraft:air if block ^7 ^-1 ^ minecraft:water run teleport @s ~ ~-1 ~ # Je nach dem in welche Blickrichtung das Schiff schaut, wird der entsprechende Bereich ausgewählt und alle Spieler die sich dort befinden werden mit dem Schiff mitbewegt. execute unless entity @s[name=!"Norden",name=!"Süden"] at @s positioned ~-6 ~-4 ~-14 as @a[dx=12,dy=20,dz=28,team=!TMSchiff.2Kap] positioned as @s positioned ^ ^ ^1 rotated as @s run teleport @s ~ ~ ~ ~ ~ execute unless entity @s[name=!"Westen",name=!"Osten"] at @s positioned ~-14 ~-4 ~-6 as @a[dx=28,dy=20,dz=12,team=!TMSchiff.2Kap] positioned as @s positioned ^ ^ ^1 rotated as @s run teleport @s ~ ~ ~ ~ ~ # Es wird ein Konstruktionsblock platziert, der das Schiff laden kann. execute at @s run setblock ~ ~ ~ minecraft:structure_block{mode:"LOAD",name:"schiff:v2schiff",posY:-2} replace # Je nach Blickrichtung des Schiffes wird der Konstruktionsblock mit entsprechender Daten ausgestattet. execute at @s[name="Westen"] run data merge block ~ ~ ~ {rotation:"NONE",posX:-11,posZ:-4} execute at @s[name="Norden"] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_90",posX:4,posZ:-11} execute at @s[name="Osten"] run data merge block ~ ~ ~ {rotation:"CLOCKWISE_180",posX:11,posZ:4} execute at @s[name="Süden"] run data merge block ~ ~ ~ {rotation:"COUNTERCLOCKWISE_90",posX:-4,posZ:11} # Über dem Konstruktionsblock wird ein Redstone-Block platziert um diesen zu aktivieren. execute at @s run setblock ~ ~1 ~ minecraft:redstone_block replace |
schiff:v2drop-bloecke.json
|
{ "values":[ "#minecraft:buttons", "#minecraft:signs", "#minecraft:wall_signs", "#minecraft:wooden_pressure_plates", "minecraft:ladder" ] } |
Variante 2: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel und das Team wieder. Es entfernt Etiketten, Gegenstände und die Rüstungsständer. Ebenfalls werden platzierte Schiffe entfernt.
schiff:v2stopp.mcfunction
|
# Das Punkte.Ziel wird entfernt. scoreboard objectives remove PZSchiff.2Wert # Das Team für Kapitäne wird entfernt. team remove TMSchiff.2Kap # Die Rüstungsständer und das Schwert werden aus den Spieler-Inventaren entfernt. clear @a minecraft:armor_stand{EigSchiff.2Alle:true} clear @a minecraft:wooden_sword{EigSchiff.2Alle:true} # Die Schiffs-Konstruktion wird an der Position der Rüstungsständer entfernt. execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff] rotated ~ 0 run fill ^-6 ^ ^-14 ^6 ^14 ^14 minecraft:air replace #schiff:v2drop-bloecke execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff] rotated ~ 0 run fill ^-6 ^ ^-14 ^6 ^14 ^14 minecraft:air replace execute at @e[type=minecraft:armor_stand,tag=EtiSchiff.2Schiff] rotated ~ 0 run fill ^-6 ^-2 ^-14 ^6 ^ ^14 minecraft:water replace # Eventuell gedroppte Gegenstände werden etikettiert und alle Objekte mit diesen Etikett werden entfernt. tag @e[type=minecraft:item,nbt={Item:{tag:{EigSchiff.2Alle:true} } }] add EtiSchiff.2Alle kill @e[tag=EtiSchiff.2Alle] # Der Chunk wird entladen. forceload remove ~ ~ |
|
|
|