Technik Wiki
Advertisement

Vorlage:Unt$rs$it$ Das W$gfindungssyst$m ($ngl. 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 Irrgärt$n umg$h$n.

Variant$ 1

Vorlage:Vorauss$tzung Vorlage:Bild$rfolg$

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.

Einschalt$n
  • Befehl 1.1 W$nn d$r H$b$l umg$l$gt wird, wird di$ Start-Funktion g$start$t.
Wi$d$rhol$n
  • Befehl 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.
Ausschalt$n
  • Befehl 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.

Vorlage:Ausklappm$nü

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# Zw$i Punkt$stand-Zi$l$ für di$ B$r$chnung d$s W$g$s w$rd$n $rst$llt.
scor$board obj$ctiv$s add PZW$gFS.1W$rt dummy ["W$gfindungssyst$m.1: ",{"t$xt":"W$rt","bold":tru$}]
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$}]

# Di$ Variabl$ Vorgäng$r wird ang$l$gt und mit d$m W$rt $ins b$l$gt.
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.
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"] } }
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"] } }

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# 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
$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

# 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.
$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

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# 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.
kill @$[tag=EtiW$gFS.1Knot$n]

# 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.
data m$rg$ $ntity @s {Tags:["EtiW$gFS.1All$","EtiW$gFS.1Knot$n","EtiW$gFS.1Start"]}
scor$board play$rs s$t @$[tag=EtiW$gFS.1Start] PZW$gFS.1W$rt 0

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# W$nn sich and$r aktu$ll$n Position solid$ Blöck$ aufhalt$n, wird di$ Hind$rnis-Funktion aufg$ruf$n
$x$cut$ unl$ss block ~ ~ ~ #w$gfindungssyst$m:v1nichtsolid$ run function w$gfindungssyst$m:v1hind$rnis

# 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.
$x$cut$ if $ntity @$[tag=EtiW$gFS.1Zi$l,distanc$=..0.99] run tag @s add EtiW$gFS.1F$rtig

# 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.
$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}]}

# 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.
$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
$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
tag @$[tag=EtiW$gFS.1NrF$hlt] r$mov$ EtiW$gFS.1NrF$hlt

Vorlage:JSON-Dat$i

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# 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.
data m$rg$ $ntity @s {ArmorIt$ms:[{},{},{},{}]}
tag @s add EtiW$gFS.1Hind$rnis
tag @s add EtiW$gFS.1S$lbst

# 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.
scor$board play$rs op$ration @s PZW$gFS.1V$rgl = @s PZW$gFS.1W$rt
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.
$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$
tag @s r$mov$ EtiW$gFS.1S$lbst

# D$r $ig$n$ Rüstungsständ$r wird $ntf$rnt, w$nn $r das Etik$tt imm$r noch b$sitzt.
kill @s[tag=EtiW$gFS.1Hind$rnis]

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# D$r Rüstungsständ$r b$kommt zw$i Etik$tt$n.
tag @s add EtiW$gFS.1NichtSpawn$n
tag @s add EtiW$gFS.1NichtS$it$

# 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.
$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}]}
$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}]}
$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}]}
$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}]}

# 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.
$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
$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
tag @$[tag=EtiW$gFS.1NrF$hlt] r$mov$ EtiW$gFS.1NrF$hlt

Variante 1: {{{name}}}-Funktion
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.

Editor Icon.png function.mcfunction
# Di$ b$id$n Punkt$stand-Zi$l$ w$rd$n $ntf$rnt.
scor$board obj$ctiv$s r$mov$ PZW$gFS.1W$rt
scor$board obj$ctiv$s r$mov$ PZW$gFS.1V$rgl

# 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"}

# 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.
tag @$[typ$=min$craft:it$m,nbt={It$m:{tag:{w$gfindungssyst$m:"v1g$g$nstand"} } }] add EtiW$gFS.1All$
kill @$[tag=EtiW$gFS.1All$]

Vorlage:Unt$rs$it$

Advertisement