K (Änderungen von Ambossmann (Diskussion) wurden auf die letzte Version von 87.123.128.147 zurückgesetzt) Markierungen: Zurücksetzung Mobile Bearbeitung Mobile Bearbeitung |
K (Änderungen von ILeonx (Diskussion) wurden auf die letzte Version von Ambossmann zurückgesetzt) Markierungen: Zurücksetzung Mobile Bearbeitung Mobile Bearbeitung |
||
Zeile 1: | Zeile 1: | ||
+ | {{Unterseite|gruppe=Systeme| |
||
− | {{Unt$rs$it$|grupp$=Syst$m$| |
||
− | {{ |
+ | {{Seitenkopf|dw=m}} |
}} |
}} |
||
− | Das ''' |
+ | Das '''Wegfindungssystem''' (engl. ''[[de.wikipedia:Pathfinding|Pathfinding]]'') setzt alles daran den kürzesten Weg zum Ziel zu finden. Je nach Ausführung kann es auch Hindernisse in Form von Wänden oder auch [[Labyrinth- und Irrgartengenerator (Befehle)|Irrgärten]] umgehen. |
− | == |
+ | == Variante 1 == |
+ | {{Voraussetzung| |
||
− | {{Vorauss$tzung| |
||
− | *[[ |
+ | *[[Zähler (Befehle)]] |
− | *[[ |
+ | *[[Vergleicher (Befehle)]] |
− | *[[ |
+ | *[[Objekt-Steuerung (Befehle)]] |
*{{mcw|Funktion}} |
*{{mcw|Funktion}} |
||
| |
| |
||
− | *{{Gridbild| |
+ | *{{Gridbild|Hebel|link}} |
− | *{{Gridbild| |
+ | *{{Gridbild|Redstone-Fackel|link}} |
− | *{{Gridbild| |
+ | *{{Gridbild|Befehlsblock|link}} |
− | *{{Gridbild| |
+ | *{{Gridbild|Wiederhol-Befehlsblock|link}} |
− | | |
+ | |videos= |
− | (HFObmVTdEMQ, |
+ | (HFObmVTdEMQ,NOPEname) |
− | (J2RdAillu9U, |
+ | (J2RdAillu9U,GamerGuppy) |
}} |
}} |
||
− | {{ |
+ | {{Bilderfolge|#1#2|Wegfindungssystem (Befehle) Bild 1.|400px|list=1}} |
− | + | Bei diesem Wegfindungssystem erhält man einen Start- und einen Endpunkt-Rüstungsständer in die Hand. Man kann beide platzieren und es wird ein Weg vom Startpunkt ausgehend zum Zielpunkt gesucht. Dabei können sich auch Hindernisse auf dem Weg befinden. |
|
+ | ;Einschalten |
||
− | ;Einschalt$n |
||
− | *{{bb|1|1}} |
+ | *{{bb|1|1}} Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet. |
+ | ;Wiederholen |
||
− | ;Wi$d$rhol$n |
||
− | *{{bb|1|2}} |
+ | *{{bb|1|2}} Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt. |
+ | ;Ausschalten |
||
− | ;Ausschalt$n |
||
− | *{{bb|1|3}} |
+ | *{{bb|1|3}} Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab. |
− | {{ |
+ | {{Ausklappmenü|offen=1|{{bb}}| |
− | {{bb|1|1|i|4=function |
+ | {{bb|1|1|i|4=function wegfindungssystem:v1start}} |
− | {{bb|1|2|w|4=function |
+ | {{bb|1|2|w|4=function wegfindungssystem:v1zyklus}} |
− | {{bb|1|3|i|4=function |
+ | {{bb|1|3|i|4=function wegfindungssystem:v1stopp}} |
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Start}} |
− | + | Die Start-Funktion erstellt die Punktestand-Ziele und gibt dem Spieler zwei Rüstungsständer für den Start und das Ziel. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1start|alias=v1start|1= |
− | # |
+ | # Zwei Punktestand-Ziele für die Berechnung des Weges werden erstellt. |
− | + | scoreboard objectives add PZWegFS.1Wert dummy ["Wegfindungssystem.1: ",{"text":"Wert","bold":true}] |
|
− | + | scoreboard objectives add PZWegFS.1Vergl dummy ["Wegfindungssystem.1: ",{"text":"Temporärer Wert","bold":true}] |
|
− | # |
+ | # Die Variable Vorgänger wird angelegt und mit dem Wert eins belegt. |
+ | scoreboard players set #VarWegFS.1Vorgaenger PZWegFS.1Wert 1 |
||
− | scor$board play$rs s$t #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt 1 |
||
− | # |
+ | # Dem nächstgelegenen Spieler in einem Umkreis von 15 Metern werden zwei Rüstungsständer ins Inventar gelegt. Welche den Startpunkt und den Endpunkt darstellen. |
− | + | give @p[distance=..15] minecraft:armor_stand{wegfindungssystem:"v1gegenstand",display:{Name:'{"text":"Startpunkt","color":"blue","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Startpunkt zu markieren"']},EntityTag:{Small:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Startpunkt","color":"blue","bold":true}',Tags:["EtiWegFS.1Alle","EtiWegFS.1Erstellen"] } } |
|
− | + | give @p[distance=..15] minecraft:armor_stand{wegfindungssystem:"v1gegenstand",display:{Name:'{"text":"Endpunkt","color":"green","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Endpunkt zu markieren"']},EntityTag:{Small:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Endpunkt","color":"green","bold":true}',Tags:["EtiWegFS.1Alle","EtiWegFS.1Ziel"] } } |
|
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Zyklus}} |
− | + | Die Zyklus-Funktion schaut ob der Spieler den Startpunkt-Rüstungsständer platziert hat und ruft daraufhin die Erstellen-Funktion auf. Gleichzeitig wird geprüft ob der Weg noch nicht komplett gefunden ist und dann wird die Knoten-Funktion aufgerufen. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1zyklus|alias=v1zyklus|1= |
− | # |
+ | # Wenn der Startpunkt-Rüstungsständer platziert wurde, wird von seiner Position zentrisch aus die Erstellen-Funktion geladen |
− | + | execute as @e[tag=EtiWegFS.1Erstellen] at @s align xyz positioned ~0.5 ~ ~0.5 run function wegfindungssystem:v1erstellen |
|
− | # |
+ | # Solange noch nicht der Zielpunkt gefunden wurde, wird von Knoten-Rüstungsständern aus die Knoten-Funktion aufgerufen. |
− | + | execute unless entity @e[tag=EtiWegFS.1Fertig] if entity @e[tag=EtiWegFS.1Ziel] as @e[tag=EtiWegFS.1Knoten] at @s align xyz positioned ~0.5 ~ ~0.5 run function wegfindungssystem:v1knoten |
|
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Erstellen}} |
− | + | Die Erstellen-Funktion sorgt für den Start der Wegberechnung, in dem der Start-Rüstungsständer als Knoten behandelt wird und von ihm aus weitere Knoten erzeugt werden. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1erstellen|1= |
− | # |
+ | # Immer wenn der Startpunkt-Rüstungsständer erstellt wurde, wird ein vorhandener Weg wieder gelöscht. |
− | kill @ |
+ | kill @e[tag=EtiWegFS.1Knoten] |
− | # |
+ | # Der Startpunkt-Rüstungsständer erhält drei neue Etiketten, sodass sein Erstellen-Etikett entfernt wird und er bekommt den Wert null. |
− | data |
+ | data merge entity @s {Tags:["EtiWegFS.1Alle","EtiWegFS.1Knoten","EtiWegFS.1Start"]} |
− | + | scoreboard players set @e[tag=EtiWegFS.1Start] PZWegFS.1Wert 0 |
|
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Knoten}} |
− | + | Die Knoten-Funktion schaut ob sich ein Hindernis zwischen Start- und Endpunkt befindet, falls es der Fall ist, wird die Hindernis-Funktion aufgerufen. Ansonsten wird ein neuer Knoten in Richtung Endpunkt platziert und mit den Werten ausgestattet. Die Alias-Datei [[#wegfindungssystem:v1nichtsolide]] beinhaltet alle nicht soliden Blöcken. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1knoten|1= |
− | # |
+ | # Wenn sich ander aktuellen Position solide Blöcke aufhalten, wird die Hindernis-Funktion aufgerufen |
− | + | execute unless block ~ ~ ~ #wegfindungssystem:v1nichtsolide run function wegfindungssystem:v1hindernis |
|
− | # |
+ | # Wenn sich innerhalb eines Meters um den Knoten der Zielpunkt befindet, wird ihm das Etikett gegeben. |
− | + | execute if entity @e[tag=EtiWegFS.1Ziel,distance=..0.99] run tag @s add EtiWegFS.1Fertig |
|
− | # |
+ | # Wenn der eigene Rüstungsständer keines von zwei Etiketten besitzt, so schaut er Richtung Ziel und die nächste zentrische Position aus wird angepeilt um dort zu prüfen ob sich dort nicht schon ein Knoten-Rüstungsständer befindet. Falls nicht wird einer erzeugt. |
− | + | execute if entity @s[tag=!EtiWegFS.1NichtSpawnen,tag=!EtiWegFS.1Hindernis] facing entity @e[tag=EtiWegFS.1Ziel] feet anchored feet align xyz positioned ~0.5 ~ ~0.5 positioned ^ ^ ^1 anchored feet align xyz positioned ~0.5 ~0.5 ~0.5 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.99] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} |
|
− | # |
+ | # Wenn die Nummer bei einem oder mehreren Knoten fehlt, wird der aktuelle Wert mit dem Wert der Vorgänger-Variable addiert und dem übergeben, dem die Nummer fehlt. |
− | + | execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert |
|
− | + | execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert |
|
− | tag @ |
+ | tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt |
}} |
}} |
||
− | {{JSON- |
+ | {{JSON-Datei|name=wegfindungssystem:v1nichtsolide|type=alias|1= |
{ |
{ |
||
− | " |
+ | "values":[ |
− | " |
+ | "minecraft:air", |
− | " |
+ | "minecraft:cave_air", |
− | " |
+ | "minecraft:void_air", |
− | "# |
+ | "#minecraft:banners", |
− | "# |
+ | "#minecraft:buttons", |
− | "# |
+ | "#minecraft:carpets", |
− | "# |
+ | "#minecraft:corals", |
− | "# |
+ | "#minecraft:flower_pots", |
− | "# |
+ | "#minecraft:rails", |
− | "# |
+ | "#minecraft:saplings", |
− | "# |
+ | "#minecraft:wooden_buttons", |
− | " |
+ | "minecraft:allium", |
+ | "minecraft:attached_melon_stem", |
||
− | "min$craft:attach$d_m$lon_st$m", |
||
+ | "minecraft:attached_pumpkin_stem", |
||
− | "min$craft:attach$d_pumpkin_st$m", |
||
− | " |
+ | "minecraft:azure_bluet", |
− | " |
+ | "minecraft:beetroots", |
− | " |
+ | "minecraft:blue_orchid", |
− | " |
+ | "minecraft:carrots", |
− | " |
+ | "minecraft:cocoa", |
− | " |
+ | "minecraft:comparator", |
− | " |
+ | "minecraft:dandelion", |
− | " |
+ | "minecraft:dead_bush", |
− | " |
+ | "minecraft:fern", |
− | " |
+ | "minecraft:fire", |
− | " |
+ | "minecraft:grass", |
− | " |
+ | "minecraft:large_fern", |
− | " |
+ | "minecraft:lever", |
− | " |
+ | "minecraft:lilac", |
− | " |
+ | "minecraft:melon_stem", |
− | " |
+ | "minecraft:orange_tulip", |
− | " |
+ | "minecraft:oxeye_daisy", |
− | " |
+ | "minecraft:peony", |
− | " |
+ | "minecraft:pink_tulip", |
− | " |
+ | "minecraft:poppy", |
− | " |
+ | "minecraft:potatoes", |
− | " |
+ | "minecraft:pumpkin_stem", |
− | " |
+ | "minecraft:red_tulip", |
− | " |
+ | "minecraft:repeater", |
− | " |
+ | "minecraft:rose_bush", |
− | " |
+ | "minecraft:redstone_torch", |
− | " |
+ | "minecraft:redstone_wire", |
− | " |
+ | "minecraft:repeater", |
− | "# |
+ | "#minecraft:signs", |
− | " |
+ | "minecraft:snow", |
− | " |
+ | "minecraft:tall_grass", |
− | " |
+ | "minecraft:torch", |
− | " |
+ | "minecraft:tripwire", |
− | " |
+ | "minecraft:tripwire_hook", |
− | " |
+ | "minecraft:turtle_egg", |
− | "# |
+ | "#minecraft:wall_signs", |
− | " |
+ | "minecraft:wall_torch", |
− | " |
+ | "minecraft:wheat", |
+ | "minecraft:white_tulip" |
||
− | "min$craft:whit$_tulip" |
||
] |
] |
||
} |
} |
||
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Hindernis}} |
− | + | Die Hindernis-Funktion prüft um den Knoten-Rüstungsständer ob dort noch ein neuer Knoten für den Weg gebildet werden kann, ansonsten wird der eigene Rüstungsständer entfernt. Falls neue Wege möglich sind, wird die Schritte-Funktion aufgerufen. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1hindernis|1= |
− | # |
+ | # Dem Knoten-Rüstungsständer werden zwei Etiketten gegeben und der Kopfslot wird geleert. |
− | data |
+ | data merge entity @s {ArmorItems:[{},{},{},{}]} |
− | tag @s add |
+ | tag @s add EtiWegFS.1Hindernis |
− | tag @s add |
+ | tag @s add EtiWegFS.1Selbst |
− | # |
+ | # Der aktuelle Punktestand wird kopiert und anschließend zieht der Wert der Vorgänger-Variable sich von diesem ab. |
− | + | scoreboard players operation @s PZWegFS.1Vergl = @s PZWegFS.1Wert |
|
+ | scoreboard players operation @s PZWegFS.1Vergl -= #VarWegFS.1Vorgaenger PZWegFS.1Wert |
||
− | scor$board play$rs op$ration @s PZW$gFS.1V$rgl -= #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt |
||
− | # An |
+ | # An der aktuellen zentrierten Position muss sich ein solider Block befinden, dann wird in einem Radius von 1,2 Metern nach Knoten-Rüstungsständern geschaut die zur Seite stehen und den gleichen Wert besitzen. Von diesen wird die Schritte-Funktion aufgerufen. |
− | + | execute at @s align xyz positioned ~0.5 ~ ~0.5 unless block ~ ~1 ~ #wegfindungssystem:v1nichtsolide as @e[tag=EtiWegFS.1Knoten,distance=..1.2] at @s if entity @s[tag=!EtiWegFS.1NichtSeite] if score @s PZWegFS.1Wert = @e[tag=EtiWegFS.1Selbst,limit=1] PZWegFS.1Vergl run function wegfindungssystem:v1schritte |
|
− | tag @s |
+ | tag @s remove EtiWegFS.1Selbst |
− | # |
+ | # Der eigene Rüstungsständer wird entfernt, wenn er das Etikett immer noch besitzt. |
− | kill @s[tag= |
+ | kill @s[tag=EtiWegFS.1Hindernis] |
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Schritte}} |
− | + | Die Schritte-Funktion erzeugt in jede Richtung einen Knoten-Rüstungsständer, von dem aus der Weg weiter berechnet wird. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1schritte|1= |
+ | # Der Rüstungsständer bekommt zwei Etiketten. |
||
− | # D$r Rüstungsständ$r b$kommt zw$i Etik$tt$n. |
||
− | tag @s add |
+ | tag @s add EtiWegFS.1NichtSpawnen |
− | tag @s add |
+ | tag @s add EtiWegFS.1NichtSeite |
− | # In |
+ | # In den vier Himmelsrichtungen wird geprüft ob sich dort noch kein Rüstungsständer aufhält. Falls das der Fall ist, wird an der jeweiligen Stelle ein Rüstungsständer gespawnt. |
− | + | execute positioned ~1 ~ ~ unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} |
|
− | + | execute positioned ~ ~ ~1 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} |
|
− | + | execute positioned ~-1 ~ ~ unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} |
|
− | + | execute positioned ~ ~ ~-1 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} |
|
− | # |
+ | # Bei allen, bei denen die Nummer fehlt, wird die Nummer berechnet in dem sie das ergebnis aus der Addition des eigenen Rüstungsständer plus dem Vorgänger bekommen. |
− | + | execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert |
|
− | + | execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert |
|
− | tag @ |
+ | tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt |
}} |
}} |
||
− | {{fü|1| |
+ | {{fü|1|name=Stopp}} |
− | + | Die Stopp-Funktion löscht die beiden Punktestand-Ziele und entfernt die Rüstungsständer aus dem Inventar und auf dem Boden. |
|
− | {{f| |
+ | {{f|name=wegfindungssystem:v1stopp|alias=v1stopp|1= |
+ | # Die beiden Punktestand-Ziele werden entfernt. |
||
− | # Di$ b$id$n Punkt$stand-Zi$l$ w$rd$n $ntf$rnt. |
||
+ | scoreboard objectives remove PZWegFS.1Wert |
||
− | scor$board obj$ctiv$s r$mov$ PZW$gFS.1W$rt |
||
+ | scoreboard objectives remove PZWegFS.1Vergl |
||
− | scor$board obj$ctiv$s r$mov$ PZW$gFS.1V$rgl |
||
+ | # Die Rüstungsständer werden aus dem Inventar wieder gelöscht. |
||
− | # Di$ Rüstungsständ$r w$rd$n aus d$m Inv$ntar wi$d$r g$löscht. |
||
− | + | clear @a minecraft:armor_stand{wegfindungssystem:"v1gegenstand"} |
|
− | # Falls |
+ | # Falls die Rüstungsständer auf den Boden gedroppt wurden erhalten sie ein Etikett. Alle Objekte mit dem Etikett werden gelöscht. |
− | tag @ |
+ | tag @e[type=minecraft:item,nbt={Item:{tag:{wegfindungssystem:"v1gegenstand"} } }] add EtiWegFS.1Alle |
− | kill @ |
+ | kill @e[tag=EtiWegFS.1Alle] |
}} |
}} |
||
− | {{ |
+ | {{Unterseite| |
− | {{Navbox- |
+ | {{Navbox-Technik}} |
− | {{Navbox- |
+ | {{Navbox-Technik|Technik}} |
}} |
}} |
Aktuelle Version vom 3. Oktober 2021, 11:07 Uhr
Gruppe: Systeme |
mit Mechaniken |
mit Redstone |
Hier: mit Befehlen |
Verfügbar in: Mechanik-Welt |
Das Wegfindungssystem (engl. Pathfinding) setzt alles daran den kürzesten Weg zum Ziel zu finden. Je nach Ausführung kann es auch Hindernisse in Form von Wänden oder auch Irrgärten umgehen.
Variante 1
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
YouTube-Videos zu diesem Thema: | |
---|---|
|
Bei diesem Wegfindungssystem erhält man einen Start- und einen Endpunkt-Rüstungsständer in die Hand. Man kann beide platzieren und es wird ein Weg vom Startpunkt ausgehend zum Zielpunkt gesucht. Dabei können sich auch Hindernisse auf dem Weg befinden.
- 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 Punktestand-Ziele und gibt dem Spieler zwei Rüstungsständer für den Start und das Ziel.
wegfindungssystem:v1start.mcfunction
|
# Zwei Punktestand-Ziele für die Berechnung des Weges werden erstellt. scoreboard objectives add PZWegFS.1Wert dummy ["Wegfindungssystem.1: ",{"text":"Wert","bold":true}] scoreboard objectives add PZWegFS.1Vergl dummy ["Wegfindungssystem.1: ",{"text":"Temporärer Wert","bold":true}] # Die Variable Vorgänger wird angelegt und mit dem Wert eins belegt. scoreboard players set #VarWegFS.1Vorgaenger PZWegFS.1Wert 1 # Dem nächstgelegenen Spieler in einem Umkreis von 15 Metern werden zwei Rüstungsständer ins Inventar gelegt. Welche den Startpunkt und den Endpunkt darstellen. give @p[distance=..15] minecraft:armor_stand{wegfindungssystem:"v1gegenstand",display:{Name:'{"text":"Startpunkt","color":"blue","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Startpunkt zu markieren"']},EntityTag:{Small:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Startpunkt","color":"blue","bold":true}',Tags:["EtiWegFS.1Alle","EtiWegFS.1Erstellen"] } } give @p[distance=..15] minecraft:armor_stand{wegfindungssystem:"v1gegenstand",display:{Name:'{"text":"Endpunkt","color":"green","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um den Endpunkt zu markieren"']},EntityTag:{Small:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Endpunkt","color":"green","bold":true}',Tags:["EtiWegFS.1Alle","EtiWegFS.1Ziel"] } } |
Variante 1: Zyklus-Funktion
Die Zyklus-Funktion schaut ob der Spieler den Startpunkt-Rüstungsständer platziert hat und ruft daraufhin die Erstellen-Funktion auf. Gleichzeitig wird geprüft ob der Weg noch nicht komplett gefunden ist und dann wird die Knoten-Funktion aufgerufen.
wegfindungssystem:v1zyklus.mcfunction
|
# Wenn der Startpunkt-Rüstungsständer platziert wurde, wird von seiner Position zentrisch aus die Erstellen-Funktion geladen execute as @e[tag=EtiWegFS.1Erstellen] at @s align xyz positioned ~0.5 ~ ~0.5 run function wegfindungssystem:v1erstellen # Solange noch nicht der Zielpunkt gefunden wurde, wird von Knoten-Rüstungsständern aus die Knoten-Funktion aufgerufen. execute unless entity @e[tag=EtiWegFS.1Fertig] if entity @e[tag=EtiWegFS.1Ziel] as @e[tag=EtiWegFS.1Knoten] at @s align xyz positioned ~0.5 ~ ~0.5 run function wegfindungssystem:v1knoten |
Variante 1: Erstellen-Funktion
Die Erstellen-Funktion sorgt für den Start der Wegberechnung, in dem der Start-Rüstungsständer als Knoten behandelt wird und von ihm aus weitere Knoten erzeugt werden.
wegfindungssystem:v1erstellen.mcfunction
|
# Immer wenn der Startpunkt-Rüstungsständer erstellt wurde, wird ein vorhandener Weg wieder gelöscht. kill @e[tag=EtiWegFS.1Knoten] # Der Startpunkt-Rüstungsständer erhält drei neue Etiketten, sodass sein Erstellen-Etikett entfernt wird und er bekommt den Wert null. data merge entity @s {Tags:["EtiWegFS.1Alle","EtiWegFS.1Knoten","EtiWegFS.1Start"]} scoreboard players set @e[tag=EtiWegFS.1Start] PZWegFS.1Wert 0 |
Variante 1: Knoten-Funktion
Die Knoten-Funktion schaut ob sich ein Hindernis zwischen Start- und Endpunkt befindet, falls es der Fall ist, wird die Hindernis-Funktion aufgerufen. Ansonsten wird ein neuer Knoten in Richtung Endpunkt platziert und mit den Werten ausgestattet. Die Alias-Datei #wegfindungssystem:v1nichtsolide beinhaltet alle nicht soliden Blöcken.
wegfindungssystem:v1knoten.mcfunction
|
# Wenn sich ander aktuellen Position solide Blöcke aufhalten, wird die Hindernis-Funktion aufgerufen execute unless block ~ ~ ~ #wegfindungssystem:v1nichtsolide run function wegfindungssystem:v1hindernis # Wenn sich innerhalb eines Meters um den Knoten der Zielpunkt befindet, wird ihm das Etikett gegeben. execute if entity @e[tag=EtiWegFS.1Ziel,distance=..0.99] run tag @s add EtiWegFS.1Fertig # Wenn der eigene Rüstungsständer keines von zwei Etiketten besitzt, so schaut er Richtung Ziel und die nächste zentrische Position aus wird angepeilt um dort zu prüfen ob sich dort nicht schon ein Knoten-Rüstungsständer befindet. Falls nicht wird einer erzeugt. execute if entity @s[tag=!EtiWegFS.1NichtSpawnen,tag=!EtiWegFS.1Hindernis] facing entity @e[tag=EtiWegFS.1Ziel] feet anchored feet align xyz positioned ~0.5 ~ ~0.5 positioned ^ ^ ^1 anchored feet align xyz positioned ~0.5 ~0.5 ~0.5 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.99] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} # Wenn die Nummer bei einem oder mehreren Knoten fehlt, wird der aktuelle Wert mit dem Wert der Vorgänger-Variable addiert und dem übergeben, dem die Nummer fehlt. execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt |
Variante 1: Hindernis-Funktion
Die Hindernis-Funktion prüft um den Knoten-Rüstungsständer ob dort noch ein neuer Knoten für den Weg gebildet werden kann, ansonsten wird der eigene Rüstungsständer entfernt. Falls neue Wege möglich sind, wird die Schritte-Funktion aufgerufen.
wegfindungssystem:v1hindernis.mcfunction
|
# Dem Knoten-Rüstungsständer werden zwei Etiketten gegeben und der Kopfslot wird geleert. data merge entity @s {ArmorItems:[{},{},{},{}]} tag @s add EtiWegFS.1Hindernis tag @s add EtiWegFS.1Selbst # Der aktuelle Punktestand wird kopiert und anschließend zieht der Wert der Vorgänger-Variable sich von diesem ab. scoreboard players operation @s PZWegFS.1Vergl = @s PZWegFS.1Wert scoreboard players operation @s PZWegFS.1Vergl -= #VarWegFS.1Vorgaenger PZWegFS.1Wert # An der aktuellen zentrierten Position muss sich ein solider Block befinden, dann wird in einem Radius von 1,2 Metern nach Knoten-Rüstungsständern geschaut die zur Seite stehen und den gleichen Wert besitzen. Von diesen wird die Schritte-Funktion aufgerufen. execute at @s align xyz positioned ~0.5 ~ ~0.5 unless block ~ ~1 ~ #wegfindungssystem:v1nichtsolide as @e[tag=EtiWegFS.1Knoten,distance=..1.2] at @s if entity @s[tag=!EtiWegFS.1NichtSeite] if score @s PZWegFS.1Wert = @e[tag=EtiWegFS.1Selbst,limit=1] PZWegFS.1Vergl run function wegfindungssystem:v1schritte tag @s remove EtiWegFS.1Selbst # Der eigene Rüstungsständer wird entfernt, wenn er das Etikett immer noch besitzt. kill @s[tag=EtiWegFS.1Hindernis] |
Variante 1: Schritte-Funktion
Die Schritte-Funktion erzeugt in jede Richtung einen Knoten-Rüstungsständer, von dem aus der Weg weiter berechnet wird.
wegfindungssystem:v1schritte.mcfunction
|
# Der Rüstungsständer bekommt zwei Etiketten. tag @s add EtiWegFS.1NichtSpawnen tag @s add EtiWegFS.1NichtSeite # In den vier Himmelsrichtungen wird geprüft ob sich dort noch kein Rüstungsständer aufhält. Falls das der Fall ist, wird an der jeweiligen Stelle ein Rüstungsständer gespawnt. execute positioned ~1 ~ ~ unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} execute positioned ~ ~ ~1 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} execute positioned ~-1 ~ ~ unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} execute positioned ~ ~ ~-1 unless entity @e[tag=EtiWegFS.1Knoten,distance=..0.5] run summon minecraft:armor_stand ~ ~ ~ {Small:true,NoGravity:true,Marker:true,Invisible:true,Tags:["EtiWegFS.1Alle","EtiWegFS.1NrFehlt","EtiWegFS.1Knoten"],ArmorItems:[{},{},{},{id:"minecraft:cyan_concrete",Count:1b}]} # Bei allen, bei denen die Nummer fehlt, wird die Nummer berechnet in dem sie das ergebnis aus der Addition des eigenen Rüstungsständer plus dem Vorgänger bekommen. execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt |
Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht die beiden Punktestand-Ziele und entfernt die Rüstungsständer aus dem Inventar und auf dem Boden.
wegfindungssystem:v1stopp.mcfunction
|
# Die beiden Punktestand-Ziele werden entfernt. scoreboard objectives remove PZWegFS.1Wert scoreboard objectives remove PZWegFS.1Vergl # Die Rüstungsständer werden aus dem Inventar wieder gelöscht. clear @a minecraft:armor_stand{wegfindungssystem:"v1gegenstand"} # Falls die Rüstungsständer auf den Boden gedroppt wurden erhalten sie ein Etikett. Alle Objekte mit dem Etikett werden gelöscht. tag @e[type=minecraft:item,nbt={Item:{tag:{wegfindungssystem:"v1gegenstand"} } }] add EtiWegFS.1Alle kill @e[tag=EtiWegFS.1Alle] |
Mausklick-Sensor => Befehle; Zeichen-Eingabe => Befehle; Hungerpunkte-System => Befehle; Lebenspunkte-System => Befehle; Werkzeug-System => Befehle; Steinbruch-System => Befehle; Teleporter => Befehle; Kontrollpunkt-System => Befehle; Wegfindungssystem => Befehle; Befehle-System => Befehle; Passwort-System => Befehle; Wahl-System => Befehle; Kamera-System => Befehle; Sammel-System => Befehle; Zonen-System => Befehle; Auftrag-System => Befehle (erweitert); Gildenschlacht-Minispiel => Befehle; |
|