Technik Wiki
ILeonx (Diskussion | Beiträge)
K (Änderungen von Ambossmann (Diskussion) wurden auf die letzte Version von 87.123.128.147 zurückgesetzt)
Markierungen: Zurücksetzung Mobile Bearbeitung Mobile Bearbeitung
ILeonx (Diskussion | Beiträge)
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$|
 
{{S$it$nkopf|dw=m}}
+
{{Seitenkopf|dw=m}}
 
}}
 
}}
Das '''W$gfindungssyst$m''' ($ngl. ''[[d$.wikip$dia:Pathfinding|Pathfinding]]'') s$tzt all$s daran d$n kürz$st$n W$g zum Zi$l zu find$n. J$ nach Ausführung kann $s auch Hind$rniss$ in Form von Wänd$n od$r auch [[Labyrinth- und Irrgart$ng$n$rator (B$f$hl$)|Irrgärt$n]] umg$h$n.
+
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.
   
== Variant$ 1 ==
+
== Variante 1 ==
  +
{{Voraussetzung|
{{Vorauss$tzung|
 
*[[Zähl$r (B$f$hl$)]]
+
*[[Zähler (Befehle)]]
*[[V$rgl$ich$r (B$f$hl$)]]
+
*[[Vergleicher (Befehle)]]
*[[Obj$kt-St$u$rung (B$f$hl$)]]
+
*[[Objekt-Steuerung (Befehle)]]
 
*{{mcw|Funktion}}
 
*{{mcw|Funktion}}
 
|
 
|
*{{Gridbild|H$b$l|link}}
+
*{{Gridbild|Hebel|link}}
*{{Gridbild|R$dston$-Fack$l|link}}
+
*{{Gridbild|Redstone-Fackel|link}}
*{{Gridbild|B$f$hlsblock|link}}
+
*{{Gridbild|Befehlsblock|link}}
*{{Gridbild|Wi$d$rhol-B$f$hlsblock|link}}
+
*{{Gridbild|Wiederhol-Befehlsblock|link}}
|vid$os=
+
|videos=
(HFObmVTdEMQ,NOPEnam$)
+
(HFObmVTdEMQ,NOPEname)
(J2RdAillu9U,Gam$rGuppy)
+
(J2RdAillu9U,GamerGuppy)
 
}}
 
}}
{{Bild$rfolg$|#1#2|W$gfindungssyst$m (B$f$hl$) Bild 1.|400px|list=1}}
+
{{Bilderfolge|#1#2|Wegfindungssystem (Befehle) Bild 1.|400px|list=1}}
   
B$i di$s$m W$gfindungssyst$m $rhält man $in$n Start- und $in$n Endpunkt-Rüstungsständ$r in di$ Hand. Man kann b$id$ platzi$r$n und $s wird $in W$g vom Startpunkt ausg$h$nd zum Zi$lpunkt g$sucht. Dab$i könn$n sich auch Hind$rniss$ auf d$m W$g b$find$n.
+
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}} W$nn d$r H$b$l umg$l$gt wird, wird di$ Start-Funktion g$start$t.
+
*{{bb|1|1}} Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
   
  +
;Wiederholen
;Wi$d$rhol$n
 
*{{bb|1|2}} B$im Einschalt$n wird auch d$r Wi$d$rhol-B$f$hlsblock g$start$t, d$r j$d$n Tick di$ Zyklus-Funktion lädt.
+
*{{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}} W$nn d$r H$b$l wi$d$r in Ausgangsst$llung zurück g$l$gt wird, wird di$ Stopp-Funktion ausg$löst und schalt$t all$s wi$d$r ab.
+
*{{bb|1|3}} Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.
   
{{Ausklappm$nü|off$n=1|{{bb}}|
+
{{Ausklappmenü|offen=1|{{bb}}|
{{bb|1|1|i|4=function w$gfindungssyst$m:v1start}}
+
{{bb|1|1|i|4=function wegfindungssystem:v1start}}
{{bb|1|2|w|4=function w$gfindungssyst$m:v1zyklus}}
+
{{bb|1|2|w|4=function wegfindungssystem:v1zyklus}}
   
   
{{bb|1|3|i|4=function w$gfindungssyst$m:v1stopp}}
+
{{bb|1|3|i|4=function wegfindungssystem:v1stopp}}
 
}}
 
}}
   
{{fü|1|nam$=Start}}
+
{{fü|1|name=Start}}
Di$ Start-Funktion $rst$llt di$ Punkt$stand-Zi$l$ und gibt d$m Spi$l$r zw$i Rüstungsständ$r für d$n Start und das Zi$l.
+
Die Start-Funktion erstellt die Punktestand-Ziele und gibt dem Spieler zwei Rüstungsständer für den Start und das Ziel.
   
{{f|nam$=w$gfindungssyst$m:v1start|alias=v1start|1=
+
{{f|name=wegfindungssystem:v1start|alias=v1start|1=
# Zw$i Punkt$stand-Zi$l$ für di$ B$r$chnung d$s W$g$s w$rd$n $rst$llt.
+
# Zwei Punktestand-Ziele für die Berechnung des Weges werden erstellt.
scor$board obj$ctiv$s add PZW$gFS.1W$rt dummy ["W$gfindungssyst$m.1: ",{"t$xt":"W$rt","bold":tru$}]
+
scoreboard objectives add PZWegFS.1Wert dummy ["Wegfindungssystem.1: ",{"text":"Wert","bold":true}]
scor$board obj$ctiv$s add PZW$gFS.1V$rgl dummy ["W$gfindungssyst$m.1: ",{"t$xt":"T$mporär$r W$rt","bold":tru$}]
+
scoreboard objectives add PZWegFS.1Vergl dummy ["Wegfindungssystem.1: ",{"text":"Temporärer Wert","bold":true}]
   
# Di$ Variabl$ Vorgäng$r wird ang$l$gt und mit d$m W$rt $ins b$l$gt.
+
# 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
 
   
# D$m nächstg$l$g$n$n Spi$l$r in $in$m Umkr$is von 15 M$t$rn w$rd$n zw$i Rüstungsständ$r ins Inv$ntar g$l$gt. W$lch$ d$n Startpunkt und d$n Endpunkt darst$ll$n.
+
# 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.
giv$ @p[distanc$=..15] min$craft:armor_stand{w$gfindungssyst$m:"v1g$g$nstand",display:{Nam$:'{"t$xt":"Startpunkt","color":"blu$","bold":tru$}',Lor$:['"Platzi$r$ d$n Rüstungsständ$r"','"um d$n Startpunkt zu marki$r$n"']},EntityTag:{Small:tru$,Invisibl$:tru$,CustomNam$Visibl$:tru$,CustomNam$:'{"t$xt":"Startpunkt","color":"blu$","bold":tru$}',Tags:["EtiW$gFS.1All$","EtiW$gFS.1Erst$ll$n"] } }
+
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"] } }
giv$ @p[distanc$=..15] min$craft:armor_stand{w$gfindungssyst$m:"v1g$g$nstand",display:{Nam$:'{"t$xt":"Endpunkt","color":"gr$$n","bold":tru$}',Lor$:['"Platzi$r$ d$n Rüstungsständ$r"','"um d$n Endpunkt zu marki$r$n"']},EntityTag:{Small:tru$,Invisibl$:tru$,CustomNam$Visibl$:tru$,CustomNam$:'{"t$xt":"Endpunkt","color":"gr$$n","bold":tru$}',Tags:["EtiW$gFS.1All$","EtiW$gFS.1Zi$l"] } }
+
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|nam$=Zyklus}}
+
{{fü|1|name=Zyklus}}
Di$ Zyklus-Funktion schaut ob d$r Spi$l$r d$n Startpunkt-Rüstungsständ$r platzi$rt hat und ruft daraufhin di$ Erst$ll$n-Funktion auf. Gl$ichz$itig wird g$prüft ob d$r W$g noch nicht kompl$tt g$fund$n ist und dann wird di$ Knot$n-Funktion aufg$ruf$n.
+
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|nam$=w$gfindungssyst$m:v1zyklus|alias=v1zyklus|1=
+
{{f|name=wegfindungssystem:v1zyklus|alias=v1zyklus|1=
# W$nn d$r Startpunkt-Rüstungsständ$r platzi$rt wurd$, wird von s$in$r Position z$ntrisch aus di$ Erst$ll$n-Funktion g$lad$n
+
# Wenn der Startpunkt-Rüstungsständer platziert wurde, wird von seiner Position zentrisch aus die Erstellen-Funktion geladen
$x$cut$ as @$[tag=EtiW$gFS.1Erst$ll$n] at @s align xyz position$d ~0.5 ~ ~0.5 run function w$gfindungssyst$m:v1$rst$ll$n
+
execute as @e[tag=EtiWegFS.1Erstellen] at @s align xyz positioned ~0.5 ~ ~0.5 run function wegfindungssystem:v1erstellen
   
# Solang$ noch nicht d$r Zi$lpunkt g$fund$n wurd$, wird von Knot$n-Rüstungsständ$rn aus di$ Knot$n-Funktion aufg$ruf$n.
+
# Solange noch nicht der Zielpunkt gefunden wurde, wird von Knoten-Rüstungsständern aus die Knoten-Funktion aufgerufen.
$x$cut$ unl$ss $ntity @$[tag=EtiW$gFS.1F$rtig] if $ntity @$[tag=EtiW$gFS.1Zi$l] as @$[tag=EtiW$gFS.1Knot$n] at @s align xyz position$d ~0.5 ~ ~0.5 run function w$gfindungssyst$m:v1knot$n
+
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|nam$=Erst$ll$n}}
+
{{fü|1|name=Erstellen}}
Di$ Erst$ll$n-Funktion sorgt für d$n Start d$r W$gb$r$chnung, in d$m d$r Start-Rüstungsständ$r als Knot$n b$hand$lt wird und von ihm aus w$it$r$ Knot$n $rz$ugt w$rd$n.
+
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|nam$=w$gfindungssyst$m:v1$rst$ll$n|1=
+
{{f|name=wegfindungssystem:v1erstellen|1=
# Imm$r w$nn d$r Startpunkt-Rüstungsständ$r $rst$llt wurd$, wird $in vorhand$n$r W$g wi$d$r g$löscht.
+
# Immer wenn der Startpunkt-Rüstungsständer erstellt wurde, wird ein vorhandener Weg wieder gelöscht.
kill @$[tag=EtiW$gFS.1Knot$n]
+
kill @e[tag=EtiWegFS.1Knoten]
   
# D$r Startpunkt-Rüstungsständ$r $rhält dr$i n$u$ Etik$tt$n, sodass s$in Erst$ll$n-Etik$tt $ntf$rnt wird und $r b$kommt d$n W$rt null.
+
# Der Startpunkt-Rüstungsständer erhält drei neue Etiketten, sodass sein Erstellen-Etikett entfernt wird und er bekommt den Wert null.
data m$rg$ $ntity @s {Tags:["EtiW$gFS.1All$","EtiW$gFS.1Knot$n","EtiW$gFS.1Start"]}
+
data merge entity @s {Tags:["EtiWegFS.1Alle","EtiWegFS.1Knoten","EtiWegFS.1Start"]}
scor$board play$rs s$t @$[tag=EtiW$gFS.1Start] PZW$gFS.1W$rt 0
+
scoreboard players set @e[tag=EtiWegFS.1Start] PZWegFS.1Wert 0
 
}}
 
}}
   
{{fü|1|nam$=Knot$n}}
+
{{fü|1|name=Knoten}}
Di$ Knot$n-Funktion schaut ob sich $in Hind$rnis zwisch$n Start- und Endpunkt b$find$t, falls $s d$r Fall ist, wird di$ Hind$rnis-Funktion aufg$ruf$n. Ansonst$n wird $in n$u$r Knot$n in Richtung Endpunkt platzi$rt und mit d$n W$rt$n ausg$statt$t. Di$ Alias-Dat$i [[#w$gfindungssyst$m:v1nichtsolid$]] b$inhalt$t all$ nicht solid$n Blöck$n.
+
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|nam$=w$gfindungssyst$m:v1knot$n|1=
+
{{f|name=wegfindungssystem:v1knoten|1=
# W$nn sich and$r aktu$ll$n Position solid$ Blöck$ aufhalt$n, wird di$ Hind$rnis-Funktion aufg$ruf$n
+
# Wenn sich ander aktuellen Position solide Blöcke aufhalten, wird die Hindernis-Funktion aufgerufen
$x$cut$ unl$ss block ~ ~ ~ #w$gfindungssyst$m:v1nichtsolid$ run function w$gfindungssyst$m:v1hind$rnis
+
execute unless block ~ ~ ~ #wegfindungssystem:v1nichtsolide run function wegfindungssystem:v1hindernis
   
# W$nn sich inn$rhalb $in$s M$t$rs um d$n Knot$n d$r Zi$lpunkt b$find$t, wird ihm das Etik$tt g$g$b$n.
+
# Wenn sich innerhalb eines Meters um den Knoten der Zielpunkt befindet, wird ihm das Etikett gegeben.
$x$cut$ if $ntity @$[tag=EtiW$gFS.1Zi$l,distanc$=..0.99] run tag @s add EtiW$gFS.1F$rtig
+
execute if entity @e[tag=EtiWegFS.1Ziel,distance=..0.99] run tag @s add EtiWegFS.1Fertig
   
# W$nn d$r $ig$n$ Rüstungsständ$r k$in$s von zw$i Etik$tt$n b$sitzt, so schaut $r Richtung Zi$l und di$ nächst$ z$ntrisch$ Position aus wird ang$p$ilt um dort zu prüf$n ob sich dort nicht schon $in Knot$n-Rüstungsständ$r b$find$t. Falls nicht wird $in$r $rz$ugt.
+
# 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.
$x$cut$ if $ntity @s[tag=!EtiW$gFS.1NichtSpawn$n,tag=!EtiW$gFS.1Hind$rnis] facing $ntity @$[tag=EtiW$gFS.1Zi$l] f$$t anchor$d f$$t align xyz position$d ~0.5 ~ ~0.5 position$d ^ ^ ^1 anchor$d f$$t align xyz position$d ~0.5 ~0.5 ~0.5 unl$ss $ntity @$[tag=EtiW$gFS.1Knot$n,distanc$=..0.99] run summon min$craft:armor_stand ~ ~ ~ {Small:tru$,NoGravity:tru$,Mark$r:tru$,Invisibl$:tru$,Tags:["EtiW$gFS.1All$","EtiW$gFS.1NrF$hlt","EtiW$gFS.1Knot$n"],ArmorIt$ms:[{},{},{},{id:"min$craft:cyan_concr$t$",Count:1b}]}
+
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}]}
   
# W$nn di$ Numm$r b$i $in$m od$r m$hr$r$n Knot$n f$hlt, wird d$r aktu$ll$ W$rt mit d$m W$rt d$r Vorgäng$r-Variabl$ addi$rt und d$m üb$rg$b$n, d$m di$ Numm$r f$hlt.
+
# 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.
$x$cut$ stor$ r$sult scor$ @$[tag=EtiW$gFS.1NrF$hlt] PZW$gFS.1W$rt run scor$board play$rs op$ration @s PZW$gFS.1W$rt += #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt
+
execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert
$x$cut$ if $ntity @$[tag=EtiW$gFS.1NrF$hlt] run scor$board play$rs op$ration @s PZW$gFS.1W$rt -= #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt
+
execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert
tag @$[tag=EtiW$gFS.1NrF$hlt] r$mov$ EtiW$gFS.1NrF$hlt
+
tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt
 
}}
 
}}
{{JSON-Dat$i|nam$=w$gfindungssyst$m:v1nichtsolid$|typ$=alias|1=
+
{{JSON-Datei|name=wegfindungssystem:v1nichtsolide|type=alias|1=
 
{
 
{
"valu$s":[
+
"values":[
"min$craft:air",
+
"minecraft:air",
"min$craft:cav$_air",
+
"minecraft:cave_air",
"min$craft:void_air",
+
"minecraft:void_air",
"#min$craft:bann$rs",
+
"#minecraft:banners",
"#min$craft:buttons",
+
"#minecraft:buttons",
"#min$craft:carp$ts",
+
"#minecraft:carpets",
"#min$craft:corals",
+
"#minecraft:corals",
"#min$craft:flow$r_pots",
+
"#minecraft:flower_pots",
"#min$craft:rails",
+
"#minecraft:rails",
"#min$craft:saplings",
+
"#minecraft:saplings",
"#min$craft:wood$n_buttons",
+
"#minecraft:wooden_buttons",
"min$craft:allium",
+
"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",
 
"min$craft:azur$_blu$t",
+
"minecraft:azure_bluet",
"min$craft:b$$troots",
+
"minecraft:beetroots",
"min$craft:blu$_orchid",
+
"minecraft:blue_orchid",
"min$craft:carrots",
+
"minecraft:carrots",
"min$craft:cocoa",
+
"minecraft:cocoa",
"min$craft:comparator",
+
"minecraft:comparator",
"min$craft:dand$lion",
+
"minecraft:dandelion",
"min$craft:d$ad_bush",
+
"minecraft:dead_bush",
"min$craft:f$rn",
+
"minecraft:fern",
"min$craft:fir$",
+
"minecraft:fire",
"min$craft:grass",
+
"minecraft:grass",
"min$craft:larg$_f$rn",
+
"minecraft:large_fern",
"min$craft:l$v$r",
+
"minecraft:lever",
"min$craft:lilac",
+
"minecraft:lilac",
"min$craft:m$lon_st$m",
+
"minecraft:melon_stem",
"min$craft:orang$_tulip",
+
"minecraft:orange_tulip",
"min$craft:ox$y$_daisy",
+
"minecraft:oxeye_daisy",
"min$craft:p$ony",
+
"minecraft:peony",
"min$craft:pink_tulip",
+
"minecraft:pink_tulip",
"min$craft:poppy",
+
"minecraft:poppy",
"min$craft:potato$s",
+
"minecraft:potatoes",
"min$craft:pumpkin_st$m",
+
"minecraft:pumpkin_stem",
"min$craft:r$d_tulip",
+
"minecraft:red_tulip",
"min$craft:r$p$at$r",
+
"minecraft:repeater",
"min$craft:ros$_bush",
+
"minecraft:rose_bush",
"min$craft:r$dston$_torch",
+
"minecraft:redstone_torch",
"min$craft:r$dston$_wir$",
+
"minecraft:redstone_wire",
"min$craft:r$p$at$r",
+
"minecraft:repeater",
"#min$craft:signs",
+
"#minecraft:signs",
"min$craft:snow",
+
"minecraft:snow",
"min$craft:tall_grass",
+
"minecraft:tall_grass",
"min$craft:torch",
+
"minecraft:torch",
"min$craft:tripwir$",
+
"minecraft:tripwire",
"min$craft:tripwir$_hook",
+
"minecraft:tripwire_hook",
"min$craft:turtl$_$gg",
+
"minecraft:turtle_egg",
"#min$craft:wall_signs",
+
"#minecraft:wall_signs",
"min$craft:wall_torch",
+
"minecraft:wall_torch",
"min$craft:wh$at",
+
"minecraft:wheat",
  +
"minecraft:white_tulip"
"min$craft:whit$_tulip"
 
 
]
 
]
 
}
 
}
 
}}
 
}}
   
{{fü|1|nam$=Hind$rnis}}
+
{{fü|1|name=Hindernis}}
Di$ Hind$rnis-Funktion prüft um d$n Knot$n-Rüstungsständ$r ob dort noch $in n$u$r Knot$n für d$n W$g g$bild$t w$rd$n kann, ansonst$n wird d$r $ig$n$ Rüstungsständ$r $ntf$rnt. Falls n$u$ W$g$ möglich sind, wird di$ Schritt$-Funktion aufg$ruf$n.
+
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|nam$=w$gfindungssyst$m:v1hind$rnis|1=
+
{{f|name=wegfindungssystem:v1hindernis|1=
# D$m Knot$n-Rüstungsständ$r w$rd$n zw$i Etik$tt$n g$g$b$n und d$r Kopfslot wird g$l$$rt.
+
# Dem Knoten-Rüstungsständer werden zwei Etiketten gegeben und der Kopfslot wird geleert.
data m$rg$ $ntity @s {ArmorIt$ms:[{},{},{},{}]}
+
data merge entity @s {ArmorItems:[{},{},{},{}]}
tag @s add EtiW$gFS.1Hind$rnis
+
tag @s add EtiWegFS.1Hindernis
tag @s add EtiW$gFS.1S$lbst
+
tag @s add EtiWegFS.1Selbst
   
# D$r aktu$ll$ Punkt$stand wird kopi$rt und anschli$ß$nd zi$ht d$r W$rt d$r Vorgäng$r-Variabl$ sich von di$s$m ab.
+
# Der aktuelle Punktestand wird kopiert und anschließend zieht der Wert der Vorgänger-Variable sich von diesem ab.
scor$board play$rs op$ration @s PZW$gFS.1V$rgl = @s PZW$gFS.1W$rt
+
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 d$r aktu$ll$n z$ntri$rt$n Position muss sich $in solid$r Block b$find$n, dann wird in $in$m Radius von 1,2 M$t$rn nach Knot$n-Rüstungsständ$rn g$schaut di$ zur S$it$ st$h$n und d$n gl$ich$n W$rt b$sitz$n. Von di$s$n wird di$ Schritt$-Funktion aufg$ruf$n.
+
# 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.
$x$cut$ at @s align xyz position$d ~0.5 ~ ~0.5 unl$ss block ~ ~1 ~ #w$gfindungssyst$m:v1nichtsolid$ as @$[tag=EtiW$gFS.1Knot$n,distanc$=..1.2] at @s if $ntity @s[tag=!EtiW$gFS.1NichtS$it$] if scor$ @s PZW$gFS.1W$rt = @$[tag=EtiW$gFS.1S$lbst,limit=1] PZW$gFS.1V$rgl run function w$gfindungssyst$m:v1schritt$
+
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 r$mov$ EtiW$gFS.1S$lbst
+
tag @s remove EtiWegFS.1Selbst
   
# D$r $ig$n$ Rüstungsständ$r wird $ntf$rnt, w$nn $r das Etik$tt imm$r noch b$sitzt.
+
# Der eigene Rüstungsständer wird entfernt, wenn er das Etikett immer noch besitzt.
kill @s[tag=EtiW$gFS.1Hind$rnis]
+
kill @s[tag=EtiWegFS.1Hindernis]
 
}}
 
}}
   
{{fü|1|nam$=Schritt$}}
+
{{fü|1|name=Schritte}}
Di$ Schritt$-Funktion $rz$ugt in j$d$ Richtung $in$n Knot$n-Rüstungsständ$r, von d$m aus d$r W$g w$it$r b$r$chn$t wird.
+
Die Schritte-Funktion erzeugt in jede Richtung einen Knoten-Rüstungsständer, von dem aus der Weg weiter berechnet wird.
   
{{f|nam$=w$gfindungssyst$m:v1schritt$|1=
+
{{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 EtiW$gFS.1NichtSpawn$n
+
tag @s add EtiWegFS.1NichtSpawnen
tag @s add EtiW$gFS.1NichtS$it$
+
tag @s add EtiWegFS.1NichtSeite
   
# In d$n vi$r Himm$lsrichtung$n wird g$prüft ob sich dort noch k$in Rüstungsständ$r aufhält. Falls das d$r Fall ist, wird an d$r j$w$ilig$n St$ll$ $in Rüstungsständ$r g$spawnt.
+
# 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.
$x$cut$ position$d ~1 ~ ~ unl$ss $ntity @$[tag=EtiW$gFS.1Knot$n,distanc$=..0.5] run summon min$craft:armor_stand ~ ~ ~ {Small:tru$,NoGravity:tru$,Mark$r:tru$,Invisibl$:tru$,Tags:["EtiW$gFS.1All$","EtiW$gFS.1NrF$hlt","EtiW$gFS.1Knot$n"],ArmorIt$ms:[{},{},{},{id:"min$craft:cyan_concr$t$",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}]}
$x$cut$ position$d ~ ~ ~1 unl$ss $ntity @$[tag=EtiW$gFS.1Knot$n,distanc$=..0.5] run summon min$craft:armor_stand ~ ~ ~ {Small:tru$,NoGravity:tru$,Mark$r:tru$,Invisibl$:tru$,Tags:["EtiW$gFS.1All$","EtiW$gFS.1NrF$hlt","EtiW$gFS.1Knot$n"],ArmorIt$ms:[{},{},{},{id:"min$craft:cyan_concr$t$",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}]}
$x$cut$ position$d ~-1 ~ ~ unl$ss $ntity @$[tag=EtiW$gFS.1Knot$n,distanc$=..0.5] run summon min$craft:armor_stand ~ ~ ~ {Small:tru$,NoGravity:tru$,Mark$r:tru$,Invisibl$:tru$,Tags:["EtiW$gFS.1All$","EtiW$gFS.1NrF$hlt","EtiW$gFS.1Knot$n"],ArmorIt$ms:[{},{},{},{id:"min$craft:cyan_concr$t$",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}]}
$x$cut$ position$d ~ ~ ~-1 unl$ss $ntity @$[tag=EtiW$gFS.1Knot$n,distanc$=..0.5] run summon min$craft:armor_stand ~ ~ ~ {Small:tru$,NoGravity:tru$,Mark$r:tru$,Invisibl$:tru$,Tags:["EtiW$gFS.1All$","EtiW$gFS.1NrF$hlt","EtiW$gFS.1Knot$n"],ArmorIt$ms:[{},{},{},{id:"min$craft:cyan_concr$t$",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}]}
   
# B$i all$n, b$i d$n$n di$ Numm$r f$hlt, wird di$ Numm$r b$r$chn$t in d$m si$ das $rg$bnis aus d$r Addition d$s $ig$n$n Rüstungsständ$r plus d$m Vorgäng$r b$komm$n.
+
# 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.
$x$cut$ stor$ r$sult scor$ @$[tag=EtiW$gFS.1NrF$hlt] PZW$gFS.1W$rt run scor$board play$rs op$ration @s PZW$gFS.1W$rt += #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt
+
execute store result score @e[tag=EtiWegFS.1NrFehlt] PZWegFS.1Wert run scoreboard players operation @s PZWegFS.1Wert += #VarWegFS.1Vorgaenger PZWegFS.1Wert
$x$cut$ if $ntity @$[tag=EtiW$gFS.1NrF$hlt] run scor$board play$rs op$ration @s PZW$gFS.1W$rt -= #VarW$gFS.1Vorga$ng$r PZW$gFS.1W$rt
+
execute if entity @e[tag=EtiWegFS.1NrFehlt] run scoreboard players operation @s PZWegFS.1Wert -= #VarWegFS.1Vorgaenger PZWegFS.1Wert
tag @$[tag=EtiW$gFS.1NrF$hlt] r$mov$ EtiW$gFS.1NrF$hlt
+
tag @e[tag=EtiWegFS.1NrFehlt] remove EtiWegFS.1NrFehlt
 
}}
 
}}
   
{{fü|1|nam$=Stopp}}
+
{{fü|1|name=Stopp}}
Di$ Stopp-Funktion löscht di$ b$id$n Punkt$stand-Zi$l$ und $ntf$rnt di$ Rüstungsständ$r aus d$m Inv$ntar und auf d$m Bod$n.
+
Die Stopp-Funktion löscht die beiden Punktestand-Ziele und entfernt die Rüstungsständer aus dem Inventar und auf dem Boden.
   
{{f|nam$=w$gfindungssyst$m:v1stopp|alias=v1stopp|1=
+
{{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.
 
cl$ar @a min$craft:armor_stand{w$gfindungssyst$m:"v1g$g$nstand"}
+
clear @a minecraft:armor_stand{wegfindungssystem:"v1gegenstand"}
   
# Falls di$ Rüstungsständ$r auf d$n Bod$n g$droppt wurd$n $rhalt$n si$ $in Etik$tt. All$ Obj$kt$ mit d$m Etik$tt w$rd$n g$löscht.
+
# Falls die Rüstungsständer auf den Boden gedroppt wurden erhalten sie ein Etikett. Alle Objekte mit dem Etikett werden gelöscht.
tag @$[typ$=min$craft:it$m,nbt={It$m:{tag:{w$gfindungssyst$m:"v1g$g$nstand"} } }] add EtiW$gFS.1All$
+
tag @e[type=minecraft:item,nbt={Item:{tag:{wegfindungssystem:"v1gegenstand"} } }] add EtiWegFS.1Alle
kill @$[tag=EtiW$gFS.1All$]
+
kill @e[tag=EtiWegFS.1Alle]
 
}}
 
}}
   
{{Unt$rs$it$|
+
{{Unterseite|
{{Navbox-T$chnik}}
+
{{Navbox-Technik}}
{{Navbox-T$chnik|T$chnik}}
+
{{Navbox-Technik|Technik}}
 
}}
 
}}

Aktuelle Version vom 3. Oktober 2021, 11:07 Uhr

Gruppe: Grid Ketten-Befehlsblock
Systeme

Grid Roter Sand blass mit Mechaniken

Grid Redstone blass mit Redstone
                Hier:
Grid Befehlsblock mit Befehlen
Verfügbar in:
Wiki Mechanik-Welt 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

Wegfindungssystem (Befehle) Bild 1.1 Wegfindungssystem (Befehle) Bild 1.2

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.

Editor Icon 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.

Editor Icon 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.

Editor Icon 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.

Editor Icon 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.

Editor Icon 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.

Editor Icon 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.

Editor Icon 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]