Direktzugriffsspeicher (Befehle)

Aus Technik Wiki
Wechseln zu: Navigation, Suche
Gruppe: Grid Redstone-Verstärker.png
Schaltnetze

Grid Roter Sand blass.png mit Mechaniken

Grid Redstone.png mit Redstone
                Hier:
Grid Befehlsblock.png mit Befehlen
Verfügbar in:
Wiki Redstone-Welt.png Redstone-Welt

Grid Wiederhol-Befehlsblock.png mehr Befehle
Wiki Redstone-Welt.png
Alle neuen oder überarbeiteten Techniken auf dieser Seite sind noch nicht in der aktuellen Redstone-Welt vorhanden.
In einem der nächsten Updates werden sie dort hinzugefügt werden.

Direktzugriffsspeicher (engl: Random-Access-Memory) ermöglichen das Speichern sowie das erneute Auslesen von Zahlenwerten in NBT-Speichern. Mit Befehlen lassen sich diese zum Beispiel als Felderreihen (engl. Arrays) realisieren. Diese können, wie in diesem Artikel beschrieben, eine Aneinanderreihung von Feldern sein, so spricht man von eindimensionalen Feldern. Natürlich lassen sich Felderreihen auch verschachteln, dann spricht man von mehrdimensionalen Feldern.

Variante 1[Bearbeiten | Quelltext bearbeiten]

Direktzugriffsspeicher (Befehle) Bild 1.1.png Direktzugriffsspeicher (Befehle) Bild 1.2.png

Man kann mit diesem Speicher eine dynamisch wachsende und schrumpfende Liste mit Werten anlegen. Diese Werte können alle ausgewählt und verändert werden. Der Speicher wird im Chat angezeigt, sobald man einen Stock mit Verzauberungsschimmer ausgewählt hat. Im Chat hat man dann die Möglichkeit alle Einstellungen über Schaltflächen zu treffen.

Einschalten
  • Befehl 1.1 Der Befehlsblock aktiviert die Start-Funktion.
Wiederholen
  • Befehl 1.2 Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
Ausschalten
  • Befehl 1.3 Der Befehlsblock aktiviert die Stopp-Funktion.



Befehlsblöcke mit Befehlen:



Variante 1: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.

Editor Icon.png direktzugriffsspeicher:v1start.mcfunction
# Zwei Punkte-Ziele werden erstellt.
scoreboard objectives add PZDiZS.1Ausl trigger ["Direktzugriffsspeicher.1: ",{"text":"Wert der Variablen","bold":true}]
scoreboard objectives add PZDiZS.1Pos dummy ["Direktzugriffsspeicher.1: ",{"text":"Feldposition","bold":true}]

# Ein NBT-Speicher wird angelegt.
data merge storage direktzugriffsspeicher:v1daten {EigDiZS.1Felder:[]}

# Spieler im Umkreis von 15 Blöcken erhalten einen Stock mit Verzauberungsschimmer.
give @a[distance=..15] minecraft:stick{EigDiZS.1Alle:true,EigDiZS.1Felder:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Felder-Speicher","color":"dark_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um Zahlenwerte in eine"','"Felderreihe zu speichern."'] } }


Variante 1: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.

Editor Icon.png direktzugriffsspeicher:v1zyklus.mcfunction
# Wenn Spieler den Stock ausgewählkt haben, erhalten sie ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigDiZS.1Felder:true} } }] add EtiDiZS.1Ausgewaehlt

# Wenn Spieler den Stock gerade erst ausgewählt haben, wird ihnen der Auslöser-Wert und die Position gesetzt.
scoreboard players set @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] PZDiZS.1Ausl -99
scoreboard players add @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] PZDiZS.1Pos 0

# Wenn Spieler den Stock ausgewählt haben und irgend einen Auslöser angeklickt haben, wird die Auslöser-Funktion gestartet.
execute as @a[tag=EtiDiZS.1Ausgewaehlt] unless entity @s[scores={PZDiZS.1Ausl=0}] run function direktzugriffsspeicher:v1ausloeser

# Es wird ein Etikett gegeben oder genommen, je nach dem ob man gerade Stock ausgewählt hat, oder nicht.
tag @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] add EtiDiZS.1Auswahl
tag @a[tag=!EtiDiZS.1Ausgewaehlt,tag=EtiDiZS.1Auswahl] remove EtiDiZS.1Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiDiZS.1Ausgewaehlt] remove EtiDiZS.1Ausgewaehlt


Variante 1: Auslöser-Funktion
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.

Editor Icon.png direktzugriffsspeicher:v1ausloeser.mcfunction
# Wenn man auf die Länge geklickt hat, wird die Felderreihe verlängert oder gekürzt.
execute if entity @s[scores={PZDiZS.1Ausl=1}] run data modify storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder" append value 0
execute if entity @s[scores={PZDiZS.1Ausl=-1}] run data remove storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[-1]

# Die Anzahl der Felder wird ausgelesen und in eine Variable gespeichert.
execute store result score VarDiZS.1Laenge PZDiZS.1Pos run data get storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"

# Wenn man die Länge der Felderreihe verkleinern möchte, wird geprüft ob die aktuelle Position nicht auf dem gelöschten Feld lag, falls doch, wird die Position auf das erste Feld gesetzt.
execute if score @s[scores={PZDiZS.1Ausl=-1}] PZDiZS.1Pos >= VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players set @s PZDiZS.1Pos 0

# Wenn man die Position erhöhen möchte, wird sie um eins erhöht und es wird geprüft ob sie dabei die Länge der Felderreihe übersteigt. Falls das der Fall ist, wird die Position wieder auf null gesetzt.
scoreboard players add @s[scores={PZDiZS.1Ausl=2}] PZDiZS.1Pos 1
execute if score @s[scores={PZDiZS.1Ausl=2}] PZDiZS.1Pos >= VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players set @s PZDiZS.1Pos 0

# Wenn man die Position verkleinert, wird die Position um eins verringert. Falls dann aber die Position kleiner als null ist, erhält sie den Wert der Länge minus eins.
scoreboard players remove @s[scores={PZDiZS.1Ausl=-2}] PZDiZS.1Pos 1
execute store result score @s[scores={PZDiZS.1Ausl=-2,PZDiZS.1Pos=..-1}] PZDiZS.1Pos run scoreboard players remove VarDiZS.1Laenge PZDiZS.1Pos 1
execute if score @s[scores={PZDiZS.1Ausl=-2}] PZDiZS.1Pos = VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players add VarDiZS.1Laenge PZDiZS.1Pos 1

# Für den Aufruf der Felder-Funktion wird die Variable für aktuelle Position auf null gesetzt.
scoreboard players set VarDiZS.1AktuellePosition PZDiZS.1Pos 0
function direktzugriffsspeicher:v1felder

# Der Spieler mit dem Stock erhält eine Chat-Nachricht, mit allen Optionen für die Felderreihe.
tellraw @s ["Direktzugriffsspeicher.1: ",{"text":"\nFelder == [","bold":true},{"storage":"direktzugriffsspeicher:v1daten","nbt":"\"EigDiZS.1Felder\"[]","color":"dark_purple","bold":true},{"text":"]","bold":true},{"text":"\nFelder.laenge (","bold":true},{"text":"=laenge + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set 1"} },{"text":",","bold":true},{"text":"=laenge - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set -1"} },{"text":") == ","bold":true},{"score":{"name":"VarDiZS.1Laenge","objective":"PZDiZS.1Pos"},"color":"gold","bold":true},{"text":"\nFelder.position (","bold":true},{"text":"=position + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set 2"} },{"text":",","bold":true},{"text":"=position - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set -2"} },{"text":") == ","bold":true},{"score":{"name":"@s","objective":"PZDiZS.1Pos"},"color":"green","bold":true},{"text":"\nFelder[","bold":true},{"score":{"name":"@s","objective":"PZDiZS.1Pos"},"color":"green","bold":true},{"text":"] (","bold":true},{"text":"=wert + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set 3"} },{"text":",","bold":true},{"text":"=wert - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.1Ausl set -3"} },{"text":") == ","bold":true},{"score":{"name":"VarDiZS.1Wert","objective":"PZDiZS.1Pos"},"color":"dark_purple","bold":true}]

# Der Spieler erhält die Berechtigung den Auslöser erneut auszuführen und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZDiZS.1Ausl
scoreboard players set @s PZDiZS.1Ausl 0


Variante 1: Felder-Funktion
Die Felder-Funktion ruft solange sich selber erneut auf bis sie sich durch die komplette Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der gewünschten Position eine Einstellung vornehmen soll.

Editor Icon.png direktzugriffsspeicher:v1felder.mcfunction
# Wenn die vom Spieler eingestellte Position erreicht wurde, wird der Wert an dieser Position aus der Felderreihe ausgelesen und anschließend wird der Wert um eins verringert oder erhöht und wieder in die Felderreihe gespeichert.
execute if score @s PZDiZS.1Pos = VarDiZS.1AktuellePosition PZDiZS.1Pos store result score VarDiZS.1Wert PZDiZS.1Pos run data get storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[0]
execute if score @s[scores={PZDiZS.1Ausl=3}] PZDiZS.1Pos = VarDiZS.1AktuellePosition PZDiZS.1Pos store result storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[0] int 1 run scoreboard players add VarDiZS.1Wert PZDiZS.1Pos 1
execute if score @s[scores={PZDiZS.1Ausl=-3}] PZDiZS.1Pos = VarDiZS.1AktuellePosition PZDiZS.1Pos store result storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[0] int 1 run scoreboard players remove VarDiZS.1Wert PZDiZS.1Pos 1

# Das erste Feld wird an die letzte Position der Felderreihe verschoben.
data modify storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder" append from storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[0]
data remove storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"[0]

# Die aktuelle Position wird um eins erhöht und wenn sie damit noch nicht die komplette Felderreihe durchlaufen hat, wird die Felder-Funktion selbst nochmal aufgerufen.
scoreboard players add VarDiZS.1AktuellePosition PZDiZS.1Pos 1
execute if score VarDiZS.1AktuellePosition PZDiZS.1Pos < VarDiZS.1Laenge PZDiZS.1Pos run function direktzugriffsspeicher:v1felder


Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.

Editor Icon.png direktzugriffsspeicher:v1stopp.mcfunction
# Die zwei Punkte-Ziele werden entfernt.
scoreboard objectives remove PZDiZS.1Ausl
scoreboard objectives remove PZDiZS.1Pos

# Der NBT-Speicher wird geleert.
data remove storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"

# Das Etikett zur Auswahl des Stockes wird entfernt.
tag @a[tag=EtiDiZS.1Auswahl] remove EtiDiZS.1Auswahl

# Der Stock wird aus dem Inventar entfernt.
clear @a minecraft:stick{EigDiZS.1Alle:true}

# Falls der Stock auf den Boden geworfen wurde, wird ebenfalls entfernt.
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.1Alle:true} } }]

Variante 2[Bearbeiten | Quelltext bearbeiten]

Direktzugriffsspeicher (Befehle) Bild 2.1.png Direktzugriffsspeicher (Befehle) Bild 2.2.png

Mit diesem Speicher kann eine zweidimensionale wachsende und schrumpfende Liste anlegen. Diese Werte können alle ausgewählt und verändert werden. Der Speicher wird im Chat angezeigt, sobald man einen Stock mit Verzauberungsschimmer ausgewählt hat. Im Chat hat man dann die Möglichkeit alle Einstellungen über Schaltflächen zu treffen.

Einschalten
  • Befehl 2.1 Der Befehlsblock aktiviert die Start-Funktion.
Wiederholen
  • Befehl 2.2 Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
Ausschalten
  • Befehl 2.3 Der Befehlsblock aktiviert die Stopp-Funktion.



Befehlsblöcke mit Befehlen:



Variante 2: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.

Editor Icon.png direktzugriffsspeicher:v2start.mcfunction
# Drei Punkte-Ziele werden erstellt.
scoreboard objectives add PZDiZS.2Ausl trigger ["Direktzugriffsspeicher.2: ",{"text":"Wert der Variablen","bold":true}]
scoreboard objectives add PZDiZS.2Pos dummy ["Direktzugriffsspeicher.2: ",{"text":"Feldposition","bold":true}]
scoreboard objectives add PZDiZS.2Dim dummy ["Direktzugriffsspeicher.2: ",{"text":"Felddimension","bold":true}]

# Ein NBT-Speicher wird angelegt.
data merge storage direktzugriffsspeicher:v2daten {EigDiZS.2Felder:[],EigDiZS.2Laenge:[0,0],EigDiZS.2Position:[0,0]}

# Spieler im Umkreis von 15 Blöcken erhalten einen Stock mit Verzauberungsschimmer.
give @a[distance=..15] minecraft:stick{EigDiZS.2Alle:true,EigDiZS.2Felder:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Felder-Speicher","color":"dark_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um Zahlenwerte in eine"','"Felderreihe zu speichern."'] } }


Variante 2: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.

Editor Icon.png direktzugriffsspeicher:v2zyklus.mcfunction
# Wenn Spieler den Stock ausgewählkt haben, erhalten sie ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigDiZS.2Felder:true} } }] add EtiDiZS.2Ausgewaehlt

# Wenn Spieler den Stock gerade erst ausgewählt haben, wird ihnen der Auslöser-Wert, die Position und die Dimension gesetzt.
scoreboard players set @a[tag=EtiDiZS.2Ausgewaehlt,tag=!EtiDiZS.2Auswahl] PZDiZS.2Ausl -99
scoreboard players add @a[tag=EtiDiZS.2Ausgewaehlt,tag=!EtiDiZS.2Auswahl] PZDiZS.2Pos 0
scoreboard players add @a[tag=EtiDiZS.2Ausgewaehlt,tag=!EtiDiZS.2Auswahl] PZDiZS.2Dim 0

# Wenn Spieler den Stock ausgewählt haben und irgend einen Auslöser angeklickt haben, wird die Auslöser-Funktion gestartet.
execute as @a[tag=EtiDiZS.2Ausgewaehlt] unless entity @s[scores={PZDiZS.2Ausl=0}] run function direktzugriffsspeicher:v2ausloeser

# Es wird ein Etikett gegeben oder genommen, je nach dem ob man gerade Stock ausgewählt hat, oder nicht.
tag @a[tag=EtiDiZS.2Ausgewaehlt,tag=!EtiDiZS.2Auswahl] add EtiDiZS.2Auswahl
tag @a[tag=!EtiDiZS.2Ausgewaehlt,tag=EtiDiZS.2Auswahl] remove EtiDiZS.2Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiDiZS.2Ausgewaehlt] remove EtiDiZS.2Ausgewaehlt


Variante 2: Auslöser-Funktion
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.

Editor Icon.png direktzugriffsspeicher:v2ausloeser.mcfunction
# Wenn der Spieler eine der beiden Optionen für die Dimension angeklickt hat, wird die entsprechende Dimension gesetzt.
scoreboard players set @s[scores={PZDiZS.2Ausl=1}] PZDiZS.2Dim 0
scoreboard players set @s[scores={PZDiZS.2Ausl=-1}] PZDiZS.2Dim 1

# Je nach eingestellter Dimension, wird entweder eine weitere leere Felderreihe oder eine null hinzugefügt. Umgekehrt wird eine Felderreihe oder das letzte Feld entfernt, falls man die Felderreihe kürzen möchte.
execute if entity @s[scores={PZDiZS.2Ausl=2,PZDiZS.2Dim=0}] run data modify storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder" append value []
execute if entity @s[scores={PZDiZS.2Ausl=-2,PZDiZS.2Dim=0}] run data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[-1]

execute if entity @s[scores={PZDiZS.2Ausl=2,PZDiZS.2Dim=1}] run data modify storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[] append value 0
execute if entity @s[scores={PZDiZS.2Ausl=-2,PZDiZS.2Dim=1}] run data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[][-1]

# Die Anzahl der Felder der ersten Dimension wird ausgelesen und in zwei Variablen gespeichert. Ebenfalls wird die Anzahl der Felder der zweiten Dimension ausgelesen und in eine weitere Variable gespeichert.
execute store result score VarDiZS.2GesamtLaenge PZDiZS.2Pos store result score VarDiZS.2Dimension1 PZDiZS.2Pos store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Laenge"[0] int 1 run data get storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"
execute store result score VarDiZS.2Dimension2 PZDiZS.2Pos store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Laenge"[1] int 1 run data get storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0]

# Um die Gesamt-Anzahl aller Felder zu ermitteln, wird die Anzahl der ersten Dimension mal die Anzahl der zweiten Dimension multipliziert.
scoreboard players operation VarDiZS.2GesamtLaenge PZDiZS.2Pos *= VarDiZS.2Dimension2 PZDiZS.2Pos

# Wenn man die Länge der Felderreihe kürzen möchte, wird geprüft ob die eingestellte Position nicht auf einem der gelöschten Feldern liegt. Falls doch, wird die Position auf null gesetzt.
execute if score @s[scores={PZDiZS.2Ausl=-2}] PZDiZS.2Pos >= VarDiZS.2GesamtLaenge PZDiZS.2Pos run scoreboard players set @s PZDiZS.2Pos 0

# Um die Länge zu erhalten, wird je nach eingestellte Dimension der entsprechende Wert übertragen.
execute if entity @s[scores={PZDiZS.2Dim=0}] run scoreboard players operation VarDiZS.2Laenge PZDiZS.2Pos = VarDiZS.2Dimension1 PZDiZS.2Pos
execute if entity @s[scores={PZDiZS.2Dim=1}] run scoreboard players operation VarDiZS.2Laenge PZDiZS.2Pos = VarDiZS.2Dimension2 PZDiZS.2Pos

# Wenn man den Wert der Position erhöhen möchte, so wird dieser um eins erhöht, falls er jedoch größer gleich der Länge ist, wird sie auf null gesetzt.
execute if entity @s[scores={PZDiZS.2Ausl=3}] run scoreboard players add @s PZDiZS.2Pos 1
execute if score @s[scores={PZDiZS.2Ausl=3}] PZDiZS.2Pos >= VarDiZS.2GesamtLaenge PZDiZS.2Pos run scoreboard players set @s PZDiZS.2Pos 0

# Wenn man die Position verringern möchte, so wird der Wert um eins reduziert, falls jedoch der Wert kleiner null ist, wird die Position auf den Wert der Länge minus eins gesetzt.
scoreboard players remove @s[scores={PZDiZS.2Ausl=-3}] PZDiZS.2Pos 1
execute store result score @s[scores={PZDiZS.2Ausl=-3,PZDiZS.2Pos=..-1}] PZDiZS.2Pos run scoreboard players remove VarDiZS.2GesamtLaenge PZDiZS.2Pos 1
execute if score @s[scores={PZDiZS.2Ausl=-3}] PZDiZS.2Pos = VarDiZS.2GesamtLaenge PZDiZS.2Pos run scoreboard players add VarDiZS.2GesamtLaenge PZDiZS.2Pos 1

# Um beide Dimensions-Positionen in einer separaten Felderreihe speichern zu können, wird die Position ausgelesen und anschließend parallel mit einer Division und dem Modulus berechnet.
execute store result score VarDiZS.2Position1 PZDiZS.2Pos run scoreboard players operation VarDiZS.2Position2 PZDiZS.2Pos = @s PZDiZS.2Pos
execute store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Position"[0] int 1 run scoreboard players operation VarDiZS.2Position1 PZDiZS.2Pos /= VarDiZS.2Dimension2 PZDiZS.2Pos
execute store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Position"[1] int 1 run scoreboard players operation VarDiZS.2Position2 PZDiZS.2Pos %= VarDiZS.2Dimension2 PZDiZS.2Pos

# Für den Aufruf der Felder-Funktion wird die Variable für aktuelle Position auf null gesetzt.
scoreboard players set VarDiZS.2AktuellePosition1 PZDiZS.2Pos 0
function direktzugriffsspeicher:v2dimension1

# Der Spieler mit dem Stock erhält eine Chat-Nachricht, mit allen Optionen für die Felderreihe.
tellraw @s ["Direktzugriffsspeicher.2: ",{"text":"\nFelder == [","bold":true},{"storage":"direktzugriffsspeicher:v2daten","nbt":"\"EigDiZS.2Felder\"[]","color":"dark_purple","bold":true},{"text":"]","bold":true},{"text":"\nFelder.dimension (","bold":true},{"text":"=0","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Dimension 0"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set 1"} },{"text":",","bold":true},{"text":"=1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Dimension 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set -1"} },{"text":") == ","bold":true},{"score":{"name":"@s","objective":"PZDiZS.2Dim"},"color":"blue","bold":true},{"text":"\nFelder.laenge (","bold":true},{"text":"=laenge + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set 2"} },{"text":",","bold":true},{"text":"=laenge - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set -2"} },{"text":") == ","bold":true},{"storage":"direktzugriffsspeicher:v2daten","nbt":"\"EigDiZS.2Laenge\"","color":"gold","bold":true},{"text":"\nFelder.laenge[","bold":true},{"score":{"name":"@s","objective":"PZDiZS.2Dim"},"color":"blue","bold":true},{"text":"] == ","bold":true},{"score":{"name":"VarDiZS.2Laenge","objective":"PZDiZS.2Pos"},"color":"gold","bold":true},{"text":"\nFelder.position (","bold":true},{"text":"=position + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set 3"} },{"text":",","bold":true},{"text":"=position - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set -3"} },{"text":") == ","bold":true},{"storage":"direktzugriffsspeicher:v2daten","nbt":"\"EigDiZS.2Position\"","color":"gold","bold":true},{"text":"\nFelder.position[","bold":true},{"score":{"name":"VarDiZS.2Position1","objective":"PZDiZS.2Pos"},"color":"green","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.2Position2","objective":"PZDiZS.2Pos"},"color":"red","bold":true},{"text":"] == ","bold":true},{"score":{"name":"@s","objective":"PZDiZS.2Pos"},"color":"dark_purple","bold":true},{"text":"\nFelder[","bold":true},{"score":{"name":"VarDiZS.2Position1","objective":"PZDiZS.2Pos"},"color":"green","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.2Position2","objective":"PZDiZS.2Pos"},"color":"red","bold":true},{"text":"] (","bold":true},{"text":"=wert + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set 4"} },{"text":",","bold":true},{"text":"=wert - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.2Ausl set -4"} },{"text":") == ","bold":true},{"score":{"name":"VarDiZS.2Wert","objective":"PZDiZS.2Pos"},"color":"dark_purple","bold":true}]

# Der Spieler erhält die Berechtigung den Auslöser erneut auszuführen und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZDiZS.2Ausl
scoreboard players set @s PZDiZS.2Ausl 0


Variante 2: Dimension1-Funktion
Die Dimension1-Funktion ruft solange selber erneut auf bis sie sich durch die komplette zweidimensionale Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der richtigen Position ist um die Dimension2-Funktion zu laden.

Editor Icon.png direktzugriffsspeicher:v2dimension1.mcfunction
# Die Variable für die zweite Dimension wird auf null gesetzt und wird für die nachfolgende Funktion verwendet. Die Funktion wird nur dann geladen wenn die aktuelle Position mit der vom Spieler eingestellten Position übereinstimmt.
scoreboard players set VarDiZS.2AktuellePosition2 PZDiZS.2Pos 0
execute if score VarDiZS.2Position1 PZDiZS.2Pos = VarDiZS.2AktuellePosition1 PZDiZS.2Pos run function direktzugriffsspeicher:v2dimension2

# Die Felderreihe der zweiten Dimension wird von ganz vorne nach ganz hinten verschoben.
data modify storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder" append from storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0]
data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0]

# Die Variable der ersten Dimension wird um eins erhöht und solange die Felderreihe nicht komplett durch gearbeitet wurde, wird diese Funktion selbst erneut aufgerufen.
scoreboard players add VarDiZS.2AktuellePosition1 PZDiZS.2Pos 1
execute if score VarDiZS.2AktuellePosition1 PZDiZS.2Pos < VarDiZS.2Dimension1 PZDiZS.2Pos run function direktzugriffsspeicher:v2dimension1


Variante 2: Dimension2-Funktion
Die Dimension2-Funktion ruft sich solange selber erneut auf bis sie sich durch die komplette Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der gewünschten Position eine Einstellung vornehmen soll.

Editor Icon.png direktzugriffsspeicher:v2dimension2.mcfunction
# Wenn die vom Spieler eingestellte Position erreicht wurde, wird der Wert an dieser Position aus der Felderreihe ausgelesen und anschließend wird der Wert um eins verringert oder erhöht und wieder in die Felderreihe gespeichert.
execute if score VarDiZS.2Position2 PZDiZS.2Pos = VarDiZS.2AktuellePosition2 PZDiZS.2Pos store result score VarDiZS.2Wert PZDiZS.2Pos run data get storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0][0]
execute if entity @s[scores={PZDiZS.2Ausl=4}] if score VarDiZS.2Position2 PZDiZS.2Pos = VarDiZS.2AktuellePosition2 PZDiZS.2Pos store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0][0] int 1 run scoreboard players add VarDiZS.2Wert PZDiZS.2Pos 1
execute if entity @s[scores={PZDiZS.2Ausl=-4}] if score VarDiZS.2Position2 PZDiZS.2Pos = VarDiZS.2AktuellePosition2 PZDiZS.2Pos store result storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0][0] int 1 run scoreboard players remove VarDiZS.2Wert PZDiZS.2Pos 1

# Das erste Feld wird an die letzte Position der Felderreihe verschoben.
data modify storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0] append from storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0][0]
data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"[0][0]

# Die aktuelle Position wird um eins erhöht und wenn sie damit noch nicht die komplette Felderreihe durchlaufen hat, wird die Felder-Funktion selbst nochmal aufgerufen.
scoreboard players add VarDiZS.2AktuellePosition2 PZDiZS.2Pos 1
execute if score VarDiZS.2AktuellePosition2 PZDiZS.2Pos < VarDiZS.2Dimension2 PZDiZS.2Pos run function direktzugriffsspeicher:v2dimension2


Variante 2: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.

Editor Icon.png direktzugriffsspeicher:v2stopp.mcfunction
# Die drei Punkte-Ziele werden entfernt.
scoreboard objectives remove PZDiZS.2Ausl
scoreboard objectives remove PZDiZS.2Pos
scoreboard objectives remove PZDiZS.2Dim

# Der NBT-Speicher wird geleert.
data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Felder"
data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Laenge"
data remove storage direktzugriffsspeicher:v2daten "EigDiZS.2Position"

# Das Etikett zur Auswahl des Stockes wird entfernt.
tag @a[tag=EtiDiZS.2Auswahl] remove EtiDiZS.2Auswahl

# Der Stock wird aus dem Inventar entfernt.
clear @a minecraft:stick{EigDiZS.2Alle:true}

# Falls der Stock auf den Boden geworfen wurde, wird ebenfalls entfernt.
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.2Alle:true} } }]

Variante 3[Bearbeiten | Quelltext bearbeiten]

Direktzugriffsspeicher (Befehle) Bild 3.1.png Direktzugriffsspeicher (Befehle) Bild 3.2.png

Mit diesem Speicher kann eine dreidimensionale wachsende und schrumpfende Liste anlegen. Diese Werte können alle ausgewählt und verändert werden. Der Speicher wird im Chat angezeigt, sobald man einen Stock mit Verzauberungsschimmer ausgewählt hat. Im Chat hat man dann die Möglichkeit alle Einstellungen über Schaltflächen zu treffen.

Einschalten
  • Befehl 3.1 Der Befehlsblock aktiviert die Start-Funktion.
Wiederholen
  • Befehl 3.2 Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
Ausschalten
  • Befehl 3.3 Der Befehlsblock aktiviert die Stopp-Funktion.



Befehlsblöcke mit Befehlen:



Variante 3: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.

Editor Icon.png direktzugriffsspeicher:v3start.mcfunction
# Drei Punkte-Ziele werden erstellt.
scoreboard objectives add PZDiZS.3Ausl trigger ["Direktzugriffsspeicher.3: ",{"text":"Wert der Variablen","bold":true}]
scoreboard objectives add PZDiZS.3Pos dummy ["Direktzugriffsspeicher.3: ",{"text":"Feldposition","bold":true}]
scoreboard objectives add PZDiZS.3Dim dummy ["Direktzugriffsspeicher.3: ",{"text":"Felddimension","bold":true}]

# Ein NBT-Speicher wird angelegt.
data merge storage direktzugriffsspeicher:v3daten {EigDiZS.3Felder:[],EigDiZS.3Laenge:[0,0,0],EigDiZS.3Position:[0,0,0]}

# Spieler im Umkreis von 15 Blöcken erhalten einen Stock mit Verzauberungsschimmer.
give @a[distance=..15] minecraft:stick{EigDiZS.3Alle:true,EigDiZS.3Felder:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Felder-Speicher","color":"dark_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um Zahlenwerte in eine"','"Felderreihe zu speichern."'] } }


Variante 3: Zyklus-Funktion
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.

Editor Icon.png direktzugriffsspeicher:v3zyklus.mcfunction
# Wenn Spieler den Stock ausgewählkt haben, erhalten sie ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigDiZS.3Felder:true} } }] add EtiDiZS.3Ausgewaehlt

# Wenn Spieler den Stock gerade erst ausgewählt haben, wird ihnen der Auslöser-Wert, die Position und die Dimension gesetzt.
scoreboard players set @a[tag=EtiDiZS.3Ausgewaehlt,tag=!EtiDiZS.3Auswahl] PZDiZS.3Ausl -99
scoreboard players add @a[tag=EtiDiZS.3Ausgewaehlt,tag=!EtiDiZS.3Auswahl] PZDiZS.3Pos 0
scoreboard players add @a[tag=EtiDiZS.3Ausgewaehlt,tag=!EtiDiZS.3Auswahl] PZDiZS.3Dim 0

# Wenn Spieler den Stock ausgewählt haben und irgend einen Auslöser angeklickt haben, wird die Auslöser-Funktion gestartet.
execute as @a[tag=EtiDiZS.3Ausgewaehlt] unless entity @s[scores={PZDiZS.3Ausl=0}] run function direktzugriffsspeicher:v3ausloeser

# Es wird ein Etikett gegeben oder genommen, je nach dem ob man gerade Stock ausgewählt hat, oder nicht.
tag @a[tag=EtiDiZS.3Ausgewaehlt,tag=!EtiDiZS.3Auswahl] add EtiDiZS.3Auswahl
tag @a[tag=!EtiDiZS.3Ausgewaehlt,tag=EtiDiZS.3Auswahl] remove EtiDiZS.3Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiDiZS.3Ausgewaehlt] remove EtiDiZS.3Ausgewaehlt


Variante 3: Auslöser-Funktion
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.

Editor Icon.png direktzugriffsspeicher:v3ausloeser.mcfunction
# Wenn der Spieler eine der beiden Optionen für die Dimension angeklickt hat, wird die Variable für die Dimension um eins erhöht oder erniedrigt.
scoreboard players add @s[scores={PZDiZS.3Ausl=1,PZDiZS.3Dim=..1}] PZDiZS.3Dim 1
scoreboard players remove @s[scores={PZDiZS.3Ausl=-1,PZDiZS.3Dim=1..}] PZDiZS.3Dim 1

# Je nach eingestellter Dimension, wird entweder eine weitere leere Felderreihe oder eine null hinzugefügt. Umgekehrt wird eine Felderreihe oder das letzte Feld entfernt, falls man die Felderreihe kürzen möchte.
execute if entity @s[scores={PZDiZS.3Ausl=2,PZDiZS.3Dim=0}] run data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder" append value []
execute if entity @s[scores={PZDiZS.3Ausl=-2,PZDiZS.3Dim=0}] run data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[-1]

execute if entity @s[scores={PZDiZS.3Ausl=2,PZDiZS.3Dim=1}] run data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[] append value []
execute if entity @s[scores={PZDiZS.3Ausl=-2,PZDiZS.3Dim=1}] run data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[][-1]

execute if entity @s[scores={PZDiZS.3Ausl=2,PZDiZS.3Dim=2}] run data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[][] append value 0
execute if entity @s[scores={PZDiZS.3Ausl=-2,PZDiZS.3Dim=2}] run data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[][][-1]

# Die Anzahl der Felder der ersten Dimension wird ausgelesen und in zwei Variablen gespeichert. Ebenfalls wird die Anzahl der Felder der zweiten und dritten Dimension ausgelesen und in jeweils eine weitere Variable gespeichert.
execute store result score VarDiZS.3GesamtLaenge PZDiZS.3Pos store result score VarDiZS.3Dimension1 PZDiZS.3Pos store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Laenge"[0] int 1 run data get storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"
execute store result score VarDiZS.3Dimension2 PZDiZS.3Pos store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Laenge"[1] int 1 run data get storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0]
execute store result score VarDiZS.3Dimension3 PZDiZS.3Pos store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Laenge"[2] int 1 run data get storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0]

# Um die Gesamt-Anzahl aller Felder zu ermitteln, wird die Anzahl der ersten Dimension mal die Anzahl der zweiten Dimension multipliziert und anschließend mit der dritten Dimension multipliziert.
scoreboard players operation VarDiZS.3GesamtLaenge PZDiZS.3Pos *= VarDiZS.3Dimension2 PZDiZS.3Pos
scoreboard players operation VarDiZS.3GesamtLaenge PZDiZS.3Pos *= VarDiZS.3Dimension3 PZDiZS.3Pos

# Wenn man die Länge der Felderreihe kürzen möchte, wird geprüft ob die eingestellte Position nicht auf einem der gelöschten Feldern liegt. Falls doch, wird die Position auf null gesetzt.
execute if score @s[scores={PZDiZS.3Ausl=-2}] PZDiZS.3Pos >= VarDiZS.3GesamtLaenge PZDiZS.3Pos run scoreboard players set @s PZDiZS.3Pos 0

# Um die Länge zu erhalten, wird je nach eingestellte Dimension der entsprechende Wert übertragen.
execute if entity @s[scores={PZDiZS.3Dim=0}] run scoreboard players operation VarDiZS.3Laenge PZDiZS.3Pos = VarDiZS.3Dimension1 PZDiZS.3Pos
execute if entity @s[scores={PZDiZS.3Dim=1}] run scoreboard players operation VarDiZS.3Laenge PZDiZS.3Pos = VarDiZS.3Dimension2 PZDiZS.3Pos
execute if entity @s[scores={PZDiZS.3Dim=2}] run scoreboard players operation VarDiZS.3Laenge PZDiZS.3Pos = VarDiZS.3Dimension2 PZDiZS.3Pos

# Wenn man den Wert der Position erhöhen möchte, so wird dieser um eins erhöht, falls er jedoch größer gleich der Länge ist, wird sie auf null gesetzt.
execute if entity @s[scores={PZDiZS.3Ausl=3}] run scoreboard players add @s PZDiZS.3Pos 1
execute if score @s[scores={PZDiZS.3Ausl=3}] PZDiZS.3Pos >= VarDiZS.3GesamtLaenge PZDiZS.3Pos run scoreboard players set @s PZDiZS.3Pos 0

# Wenn man die Position verringern möchte, so wird der Wert um eins reduziert, falls jedoch der Wert kleiner null ist, wird die Position auf den Wert der Länge minus eins gesetzt.
scoreboard players remove @s[scores={PZDiZS.3Ausl=-3}] PZDiZS.3Pos 1
execute store result score @s[scores={PZDiZS.3Ausl=-3,PZDiZS.3Pos=..-1}] PZDiZS.3Pos run scoreboard players remove VarDiZS.3GesamtLaenge PZDiZS.3Pos 1
execute if score @s[scores={PZDiZS.3Ausl=-3}] PZDiZS.3Pos = VarDiZS.3GesamtLaenge PZDiZS.3Pos run scoreboard players add VarDiZS.3GesamtLaenge PZDiZS.3Pos 1

# Um drei Dimensions-Positionen zu berechnen, wird die eingestellte Position vom Spieler ausgelesen und in zwei separate Variablen gespeichert. Anschließend wird die Variable der ersten Position durch die Anzahl der dritten Dimension geteilt und das Ergebnis wird zusätzlich in einer weiteren Positions-Variable gespeichert.
execute store result score VarDiZS.3Position3 PZDiZS.3Pos run scoreboard players operation VarDiZS.3Position1 PZDiZS.3Pos = @s PZDiZS.3Pos
execute store result score VarDiZS.3Position2 PZDiZS.3Pos run scoreboard players operation VarDiZS.3Position1 PZDiZS.3Pos /= VarDiZS.3Dimension3 PZDiZS.3Pos

# Um alle drei Dimensions-Positionen in einer separaten Felderreihe speichern zu können, wird die Variable der ersten Position dividiert und ins erste Feld gespeichert. Währenddessen werden die Variablen der zweiten und dritten Position mit dem Modulus berechnet und anschließend in die anderen beiden Felder gespeichert.
execute store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Position"[0] int 1 run scoreboard players operation VarDiZS.3Position1 PZDiZS.3Pos /= VarDiZS.3Dimension2 PZDiZS.3Pos
execute store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Position"[1] int 1 run scoreboard players operation VarDiZS.3Position2 PZDiZS.3Pos %= VarDiZS.3Dimension2 PZDiZS.3Pos
execute store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Position"[2] int 1 run scoreboard players operation VarDiZS.3Position3 PZDiZS.3Pos %= VarDiZS.3Dimension3 PZDiZS.3Pos

# Für den Aufruf der Felder-Funktion wird die Variable für aktuelle Position auf null gesetzt.
scoreboard players set VarDiZS.3AktuellePosition1 PZDiZS.3Pos 0
function direktzugriffsspeicher:v3dimension1

# Der Spieler mit dem Stock erhält eine Chat-Nachricht, mit allen Optionen für die Felderreihe.
tellraw @s ["Direktzugriffsspeicher.3: ",{"text":"\nFelder == [","bold":true},{"storage":"direktzugriffsspeicher:v3daten","nbt":"\"EigDiZS.3Felder\"[]","color":"dark_purple","bold":true},{"text":"]","bold":true},{"text":"\nFelder.dimension (","bold":true},{"text":"=dimension + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Dimension + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set 1"} },{"text":",","bold":true},{"text":"=dimension - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Dimension 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set -1"} },{"text":") == ","bold":true},{"score":{"name":"@s","objective":"PZDiZS.3Dim"},"color":"blue","bold":true},{"text":"\nFelder.laenge (","bold":true},{"text":"=laenge + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set 2"} },{"text":",","bold":true},{"text":"=laenge - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Länge - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set -2"} },{"text":") == ","bold":true},{"storage":"direktzugriffsspeicher:v3daten","nbt":"\"EigDiZS.3Laenge\"","color":"gold","bold":true},{"text":"\nFelder.laenge[","bold":true},{"score":{"name":"@s","objective":"PZDiZS.3Dim"},"color":"blue","bold":true},{"text":"] == ","bold":true},{"score":{"name":"VarDiZS.3Laenge","objective":"PZDiZS.3Pos"},"color":"gold","bold":true},{"text":"\nFelder.position (","bold":true},{"text":"=position + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set 3"} },{"text":",","bold":true},{"text":"=position - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Position - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set -3"} },{"text":") == ","bold":true},{"storage":"direktzugriffsspeicher:v3daten","nbt":"\"EigDiZS.3Position\"","color":"gold","bold":true},{"text":"\nFelder.position[","bold":true},{"score":{"name":"VarDiZS.3Position1","objective":"PZDiZS.3Pos"},"color":"green","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.3Position2","objective":"PZDiZS.3Pos"},"color":"red","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.3Position3","objective":"PZDiZS.3Pos"},"color":"blue","bold":true},{"text":"] == ","bold":true},{"score":{"name":"@s","objective":"PZDiZS.3Pos"},"color":"dark_purple","bold":true},{"text":"\nFelder[","bold":true},{"score":{"name":"VarDiZS.3Position1","objective":"PZDiZS.3Pos"},"color":"green","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.3Position2","objective":"PZDiZS.3Pos"},"color":"red","bold":true},{"text":"][","bold":true},{"score":{"name":"VarDiZS.3Position3","objective":"PZDiZS.3Pos"},"color":"blue","bold":true},{"text":"] (","bold":true},{"text":"=wert + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set 4"} },{"text":",","bold":true},{"text":"=wert - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für Wert - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZDiZS.3Ausl set -4"} },{"text":") == ","bold":true},{"score":{"name":"VarDiZS.3Wert","objective":"PZDiZS.3Pos"},"color":"dark_purple","bold":true}]

# Der Spieler erhält die Berechtigung den Auslöser erneut auszuführen und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZDiZS.3Ausl
scoreboard players set @s PZDiZS.3Ausl 0


Variante 3: Dimension1-Funktion
Die Dimension1-Funktion ruft solange selber erneut auf bis sie sich durch die komplette dreidimensionale Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der richtigen Position ist um die Dimension2-Funktion zu laden.

Editor Icon.png direktzugriffsspeicher:v3dimension1.mcfunction
# Die Variable für die zweite Dimension wird auf null gesetzt und wird für die nachfolgende Funktion verwendet. Die Funktion wird nur dann geladen wenn die aktuelle Position mit der vom Spieler eingestellten Position übereinstimmt.
scoreboard players set VarDiZS.3AktuellePosition2 PZDiZS.3Pos 0
execute if score VarDiZS.3Position1 PZDiZS.3Pos = VarDiZS.3AktuellePosition1 PZDiZS.3Pos run function direktzugriffsspeicher:v3dimension2

# Die Felderreihe der zweiten Dimension wird von ganz vorne nach ganz hinten verschoben.
data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder" append from storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0]
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0]

# Die Variable der ersten Dimension wird um eins erhöht und solange die Felderreihe nicht komplett durch gearbeitet wurde, wird diese Funktion selbst erneut aufgerufen.
scoreboard players add VarDiZS.3AktuellePosition1 PZDiZS.3Pos 1
execute if score VarDiZS.3AktuellePosition1 PZDiZS.3Pos < VarDiZS.3Dimension1 PZDiZS.3Pos run function direktzugriffsspeicher:v3dimension1


Variante 3: Dimension2-Funktion
Die Dimension2-Funktion ruft solange selber erneut auf bis sie sich durch die komplette zweidimensionale Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der richtigen Position ist um die Dimension3-Funktion zu laden.

Editor Icon.png direktzugriffsspeicher:v3dimension2.mcfunction
# Die Variable für die zweite Dimension wird auf null gesetzt und wird für die nachfolgende Funktion verwendet. Die Funktion wird nur dann geladen wenn die aktuelle Position mit der vom Spieler eingestellten Position übereinstimmt.
scoreboard players set VarDiZS.3AktuellePosition3 PZDiZS.3Pos 0
execute if score VarDiZS.3Position2 PZDiZS.3Pos = VarDiZS.3AktuellePosition2 PZDiZS.3Pos run function direktzugriffsspeicher:v3dimension3

# Die Felderreihe der dritten Dimension wird von ganz vorne nach ganz hinten verschoben.
data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0] append from storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0]
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0]

# Die Variable der zweiten Dimension wird um eins erhöht und solange die Felderreihe nicht komplett durch gearbeitet wurde, wird diese Funktion selbst erneut aufgerufen.
scoreboard players add VarDiZS.3AktuellePosition2 PZDiZS.3Pos 1
execute if score VarDiZS.3AktuellePosition2 PZDiZS.3Pos < VarDiZS.3Dimension2 PZDiZS.3Pos run function direktzugriffsspeicher:v3dimension2


Variante 3: Dimension3-Funktion
Die Dimension3-Funktion ruft solange sich selber erneut auf bis sie sich durch die komplette Felderreihe durchgearbeitet hat und überprüft dabei ob sie an der gewünschten Position eine Einstellung vornehmen soll.

Editor Icon.png direktzugriffsspeicher:v3dimension3.mcfunction
# Wenn die vom Spieler eingestellte Position erreicht wurde, wird der Wert an dieser Position aus der Felderreihe ausgelesen und anschließend wird der Wert um eins verringert oder erhöht und wieder in die Felderreihe gespeichert.
execute if score VarDiZS.3Position3 PZDiZS.3Pos = VarDiZS.3AktuellePosition3 PZDiZS.3Pos store result score VarDiZS.3Wert PZDiZS.3Pos run data get storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0][0]
execute if entity @s[scores={PZDiZS.3Ausl=4}] if score VarDiZS.3Position3 PZDiZS.3Pos = VarDiZS.3AktuellePosition3 PZDiZS.3Pos store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0][0] int 1 run scoreboard players add VarDiZS.3Wert PZDiZS.3Pos 1
execute if entity @s[scores={PZDiZS.3Ausl=-4}] if score VarDiZS.3Position3 PZDiZS.3Pos = VarDiZS.3AktuellePosition3 PZDiZS.3Pos store result storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0][0] int 1 run scoreboard players remove VarDiZS.3Wert PZDiZS.3Pos 1

# Das erste Feld wird an die letzte Position der Felderreihe verschoben.
data modify storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0] append from storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0][0]
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"[0][0][0]

# Die aktuelle Position wird um eins erhöht und wenn sie damit noch nicht die komplette Felderreihe durchlaufen hat, wird die Felder-Funktion selbst nochmal aufgerufen.
scoreboard players add VarDiZS.3AktuellePosition3 PZDiZS.3Pos 1
execute if score VarDiZS.3AktuellePosition3 PZDiZS.3Pos < VarDiZS.3Dimension3 PZDiZS.3Pos run function direktzugriffsspeicher:v3dimension3


Variante 3: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.

Editor Icon.png direktzugriffsspeicher:v3stopp.mcfunction
# Die drei Punkte-Ziele werden entfernt.
scoreboard objectives remove PZDiZS.3Ausl
scoreboard objectives remove PZDiZS.3Pos
scoreboard objectives remove PZDiZS.3Dim

# Der NBT-Speicher wird geleert.
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Felder"
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Laenge"
data remove storage direktzugriffsspeicher:v3daten "EigDiZS.3Position"

# Das Etikett zur Auswahl des Stockes wird entfernt.
tag @a[tag=EtiDiZS.3Auswahl] remove EtiDiZS.3Auswahl

# Der Stock wird aus dem Inventar entfernt.
clear @a minecraft:stick{EigDiZS.3Alle:true}

# Falls der Stock auf den Boden geworfen wurde, wird ebenfalls entfernt.
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.3Alle:true} } }]


Disambig color.svg