<link, Wiki: Execute>
Branching ist wenn sich der Exekutionsweg aufteilt.
Dies passiert ausschliesslich wenn execute as <selektor der mehr als ein entity auswählt> ... verwendet wird. d.h. @e oder @a.
In diesem Artikel werden allerdings auch Kontexte erklärt.
Jede "stufe" der exekution bekommt einen eigenen Kontext, der auf dem der vorherigen stufe basiert.
Ein kontext wird hauptzächlich von execute verändert.
Mit Stufe ist hier gemeint wenn z.b. eine Funktion aufgerufen wird, oder mit execute ... run ein Command ausgeführt wird.
Ein Kontext enthält alle Informationen die benötigt werden um die Kommandos auszuführen, das enthält den ausführenden, den Status der Welt, um nur wenige zu nennen.
Zur visualisierung verwenden wir 2 Funktionen, in kombination mit execute
a.mcfunction
execute as @e run function b
b.mcfunction
say @s
Selbstverständlich ist das ein sehr simples beispiel, das keinen wirklich nutzen hat, Praktische Anwendungen gibt es in #Anwendungsbereiche.
execute as @e hier wird alles nachfolgende für jedes Entity ausgeführt, d.h. es wird für jedes Entity ein neuer Branch angefangen, in welchem die Exekution weiter geht.
run function b
in jedem branch wird die Funktion b gestartet:
say @s extrem simpel, @s ist das entity das der ausführende des momentanen Branches ist, und dessen name wird einfach ausgegeben.
Das Ergebniss wenn wir nur zwei Armor Stands Steffen und Peter in der Welt haben:
[Steffen] Steffen
[Peter] Peter
Dies wird sehr oft ohne weiter darüber nachzudenken verwendet, daher zuerst einige Fehler die oftmals gemacht werden.
Da jeder Kontext seine eigene "Kopie" der Welt enthält, und änderungen erst übernommen werden wenn der bereich des Kontext (Die Funktion, bzw. die execute anweisung) beendet ist werden z.b. Tags, Entities nicht übernommen.
So wird gelegentlich ein Tag, oder ein Entity zum beenden eines Prozesses verwendet, falls dieser Tag/dieses Entity in einem Tieferen Branch (sprich mehr Branches liegen dazwischen, mehr aufteilungen) gesetzt wird übernehmen andere Branches dies nicht, und beenden ihre eigene Exekution als währe dieser Tag nicht übernommen werden (anzumerken ist auch das die exekutionen nacheinander passieren, allerdings werden Kontexte vor aller exekution erstellt)
Dies kann ein erwünscht sein, allerdings auch bugs hervorrufen.
Gemeint ist hier das durch Rekursion der Ausführungspfad immer tiefer und tiefer wird, und gerade wenn rekursion mit Branching verbunden wird (d.h. eine Funktion ruft sich selber in mehreren Entities auf) kann es oft zu fehlern kommen.