Direktzugriffsspeicher (Befehle): Unterschied zwischen den Versionen

Aus Technik Wiki
Wechseln zu: Navigation, Suche
(Bot: Links korrigiert.)
(Überarbeitet: Beschreibungen neu formuliert und Variante 1, 2 und 3 grundlegend überarbeitet.)
Zeile 1: Zeile 1:
 
{{Unterseite|gruppe=Schaltnetze|
 
{{Unterseite|gruppe=Schaltnetze|
 
{{Seitenkopf|re=1|bep=1|dw=r}}
 
{{Seitenkopf|re=1|bep=1|dw=r}}
  +
{{Neue Technik|r|artikel}}
 
}}
 
}}
'''Direktzugriffsspeicher''' (engl: <b>R</b>andom-<b>A</b>ccess-<b>M</b>emory) ermöglichen das Speichern sowie das erneute Auslesen von Zahlenwerten. Mit Befehlen lassen sich diese zum Beispiel als [[de.wikipedia:Feld_(Datentyp)|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 auch Felderreihen die sich in der bereits erwähnten Felderreihe befinden realisieren, dann spricht man von zweidimensionalen Feldern, das gleiche ist auch wiederum bei diesen Felderreihen von Felderreihen möglich sodass man von dreidimensionalen Feldern spricht. In diesem Artikel wird sich mit der grundlegenden Idee einer Felderreihe auseinandergesetzt, für [[Schaltnetze/Direktzugriffsspeicher (Befehle,plus)|mehrdimensionale Felderreihen]] siehe dort.
+
'''Direktzugriffsspeicher''' (engl: <b>R</b>andom-<b>A</b>ccess-<b>M</b>emory) ermöglichen das Speichern sowie das erneute Auslesen von Zahlenwerten in NBT-Speichern. Mit Befehlen lassen sich diese zum Beispiel als [[de.wikipedia:Feld_(Datentyp)|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 ==
 
== Variante 1 ==
 
{{Voraussetzung|
 
{{Voraussetzung|
*[[Schaltkreise/Speicherzelle (Befehle)]]
+
*[[Speicherzelle (Befehle)]]
*[[Schaltnetze/Zähler (Befehle)]]
+
*[[Zähler (Befehle)]]
*[[Schaltnetze/Addierer (Befehle)]]
+
*[[Addierwerk (Befehle)]]
*[[Schaltnetze/Subtrahierer (Befehle)]]
+
*[[Subtrahierwerk (Befehle)]]
*[[Schaltnetze/Vergleicher (Befehle)]]
+
*[[Vergleicher (Befehle)]]
  +
*{{mcw|Funktion}}
  +
*{{mcw|JSON-Text}}
  +
*{{mcw|NBT}}
 
|
 
|
* {{Gridbild|Hebel|link}}
+
*{{Gridbild|Hebel|link}}
* {{Gridbild|Redstone-Fackel|link}}
+
*{{Gridbild|Redstone-Fackel|link}}
* {{Gridbild|Befehlsblock|link}}
+
*{{Gridbild|Befehlsblock|link|stapel=2}}
* {{Gridbild|Wiederhol-Befehlsblock|link}}
+
*{{Gridbild|Wiederhol-Befehlsblock|link}}
 
}}
 
}}
 
{{Bilderfolge|#1#2|Direktzugriffsspeicher (Befehle) Bild 1.|400px|list=1}}
 
{{Bilderfolge|#1#2|Direktzugriffsspeicher (Befehle) Bild 1.|400px|list=1}}
   
  +
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.
Dieser Speicher ist als eine einfache Felderreihe ausgelegt. Mit Hilfe eines Auswahlmenüs lässt sich die Anzahl der Felder dieser Felderreihe einstellen, man kann die aktuelle Feldposition steuern, sowie den Zahlenwert eines Feldes. Man kann dabei die Werte erhöhen oder verringern. Zu jeder Zeit lässt sich auch die Felderreihenlänge, die aktuelle Feldposition oder der aktuell gespeicherte Zahlenwert eines Feldes auslesen. Möchte man alle Werte der Felderreiche löschen, wählt man im Auswahlmenü den entsprechenden Slot an. Auch kann man sich alle Felder mit Zahlenwert auf einmal ausgeben lassen um so eine Gesamtübersicht zu erhalten. Die Ausgaben erfolgen über Chat-Nachrichten, wobei die Informationen an die Schreibweise von Programmiersprachen angelehnt ist.
 
   
 
;Einschalten
 
;Einschalten
  +
*{{bb|1|1}} Der Befehlsblock aktiviert die Start-Funktion.
Man legt einfach den Hebel auf dem Wiederhol-Befehlsblock um und der Speicher wird eingeschaltet.
 
* {{bb|1|1}} Die Funktion {{f|link=v1start}} wird hierbei aktiviert
 
   
 
;Wiederholen
 
;Wiederholen
Mit dem Wiederhol-Befehlsblock wird die Zyklus-Funktion ständig am laufen gehalten
+
*{{bb|1|2}} Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
* {{bb|1|2}} die Funktion {{f|link=v1zyklus}} wird ständig aufgerufen, dabei wird die aktuelle Position vom Befehlsblock übernommen.
 
   
 
;Ausschalten
 
;Ausschalten
Wenn der Hebel wieder in Ausgangsstellung gelegt wird, aktiviert eine Redstone-Fackel den Befehlsblock, der die Stopp-Funktion aufruft.
+
*{{bb|1|3}} Der Befehlsblock aktiviert die Stopp-Funktion.
* {{bb|1|3}} Die Funktion {{f|link=v1stopp}} wird geladen
 
   
   
 
{{Ausklappmenü|offen=1|{{bb}}|
 
{{Ausklappmenü|offen=1|{{bb}}|
{{bb|1|1|i|4=function technik_wiki:direktzugriffsspeicher/v1start}}
+
{{bb|1|1|i|4=function direktzugriffsspeicher:v1start}}
{{bb|1|2|w|4=function technik_wiki:direktzugriffsspeicher/v1zyklus}}
+
{{bb|1|2|w|4=function direktzugriffsspeicher:v1zyklus}}
   
   
{{bb|1|3|i|4=function technik_wiki:direktzugriffsspeicher/v1stopp}}
+
{{bb|1|3|i|4=function direktzugriffsspeicher:v1stopp}}
 
}}
 
}}
   
   
 
{{fü|1|name=Start}}
 
{{fü|1|name=Start}}
Wenn die Start-Funktion geladen wird, werden die Punktestand-Ziele und das Start-Feld erzeugt, welche für die Felderreihen von tragender Bedeutung sind.
+
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1start|line=2}} für den Zahlenwert eines Feldes.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1start|line=3}} für die Position eines Feldes.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1start|line=6}} Zwei Blöcke über dem Befehlsblock wird eine Güterlore mit dem Aussehen einer Shulkerkiste gespawnt. Sie beinhaltet im Inventar nach dem ersten Laden der Zyklus-Funktion ein Auswahl-Menü um alle Optionen der Felderreihen einstellen zu können.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1start|line=9}} Die Güterlore erhält die Positionsnummer null, damit bei späteren Punktestandsvergleichen ein Zahlenwert vorhanden ist, da sonst nicht damit gearbeitet werden kann.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1start|line=10}} Die Güterlore erhält auch den Zahlenwert null, wie bei der Positionsnummer, damit mit ihr ohne Komplikationen gearbeitet werden kann.
 
   
  +
{{f|name=direktzugriffsspeicher:v1start|alias=v1start|1=
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1start|alias=v1start|1=
 
  +
data merge storage direktzugriffsspeicher:v1daten {EigDiZS.1Felder:[]}
# Punktestand-Ziele werden erstellt
 
scoreboard objectives add PZFeld.1Wert dummy ["Direktzugriffsspeicher.1: ",{"text":"Feldwert","bold":true}]
 
scoreboard objectives add PZFeld.1Pos dummy ["Direktzugriffsspeicher.1: ",{"text":"Feldposition","bold":true}]
 
   
  +
# Spieler im Umkreis von 15 Blöcken erhalten einen Stock mit Verzauberungsschimmer.
# Eine Güterlore mit einer grünen Shulkerkiste wird als Startposition für die Felder gespawnt
 
  +
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."'] } }
summon minecraft:armor_stand ~ ~2 ~ {NoGravity:true,Small:true,Invisible:true,Marker:true,Tags:["EtiFeld.1AlleFelder"],Passengers:[{id:"minecraft:chest_minecart",NoGravity:true,Invulnerable:true,CustomDisplayTile:true,DisplayOffset:6,DisplayState:{Name:"minecraft:lime_shulker_box"},CustomName:"{\"text\":\"Optionen\"}",Tags:["EtiFeld.1Start","EtiFeld.1AlleFelder"]},{id:"minecraft:armor_stand",NoGravity:true,Small:true,Invisible:true,Tags:["EtiFeld.1AlleFelder"],CustomNameVisible:true,CustomName:"{\"text\":\"Optionen\"}"}]}
 
 
# Der Güterlore werden die Punktestandswerte gegeben, damit diese in den Funktionen abgefragt werden können
 
scoreboard players set @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start] PZFeld.1Pos 0
 
scoreboard players set @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start] PZFeld.1Wert 0
 
 
}}
 
}}
   
   
 
{{fü|1|name=Zyklus}}
 
{{fü|1|name=Zyklus}}
  +
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.
Die Zyklus-Funktion hält die Felderreihe am laufen, in dem jeden Tick überprüft wurde, ob man in dem Auswahl-Menü eine bestimmte Option angeklickt hat. Darüberhinaus sorgt die Funktion dafür, dass das aktuell ausgewählte Feld seinen weißen Leuchteffekt sowie den Partikeleffekt erhält.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=2}} Zuerst wird mit einem sehr langen Befehl geprüft ob der Punktestand der Lore weder über noch unter dem Wert elf liegt, Falls der Wert nicht genau elf ist, wird das gesamte Inventar erneuert, sodass sämtliche Blöcke und Gegenstände an ihrem Platz erscheinen.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=5}} Falls der Spieler im weiteren Verlauf im Auswahl-Menü auf die Schaltfläche für das Neuerzeugen aller Felder geklickt hat, besitzt die Variable für diesen Vorgang einen wert ab eins, sodass in diesem Fall mit dem data-Befehl der Güterlore, der Gegenstand an der ersten Stelle entfernt wird. An erster Stelle befindet sich die Schaltfläche für das Hinzufügen der Felder.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=8}} Nun erfolgt der eigentliche Test, welcher die Anzahl der belegten Slots durch die Gegenstände in der Güterlore zählt. Wenn kein Gegenstand angeklickt wurde, also keine Schaltfläche ausgewählt wurde, sind elf Slots belegt, sodass auch dieser Wert in der Güterlore als Punktestand gespeichert wird.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=9}} Hier erfolgt die Prüfung darauf, ob der Spieler eine Schaltfläche innerhalb der Güterlore angeklickt hat, wenn er es tat, so besitzt die Güterlore im augenblicklichen Test nicht den Wert elf und somit wird die Menü-Funktion aufgerufen.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=12}} Danach werden alle Felder die nicht der aktuellen ausgewählten Position entsprechen, von dem eventuell noch vorhandenen Leuchteffekt befreit.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=13}} um das Feld zu erfassen, dass sich an der aktuellen Position befindet, werden zuerst alle Felder ausgewählt und im Anschluss wird deren Position mit der aktuellen Position verglichen, nur wenn die Position übereinstimmt, erhält das Feld einen Leuchteffekt.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1zyklus|line=14}} Das gleiche gilt für die Partikeleffekte, bei dem auch erst alle Felder ausgewählt werden und nur das Feld das die gleiche Positionsnummer wie die aktuelle Position besitzt den Partikeleffekt bekommt.
 
   
  +
{{f|name=direktzugriffsspeicher:v1zyklus|alias=v1zyklus|1=
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1zyklus|alias=v1zyklus|1=
 
  +
scoreboard players set @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] PZDiZS.1Ausl -99
# Die Güterlore wird dann vom Menü wieder zurück gesetzt und bekommt alle Etiketten gelöscht, in dem die Etikette neu gesetzt werden
 
  +
scoreboard players add @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] PZDiZS.1Pos 0
execute as @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder,sort=nearest,limit=1] unless entity @s[scores={PZFeld.1Wert=11}] run data merge entity @s {Tags:["EtiFeld.1Start","EtiFeld.1AlleFelder"],Items:[{Slot:3b,id:"minecraft:lime_concrete_powder",Count: 1b,tag:{display:{Name:"{\"text\":\"Anzahl erhöhen\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:4b,id: "minecraft:lime_concrete_powder",Count:1b,tag:{display:{Name:"{\"text\":\"Zur höheren Position\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:5b,id:"minecraft:lime_concrete_powder",Count:1b,tag:{display:{Name:"{\"text\":\"Wert erhöhen\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:11b,id:"minecraft:lime_shulker_box",Count:1b,tag:{display:{Name:"{\"text\":\"Felder löschen und neu erzeugen\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:12b,id:"minecraft:chest",Count:1b, tag:{display:{Name:"{\"text\":\"Aktuelle Feldanzahl ausgeben\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:13b,id:"minecraft:daylight_detector",Count:1b,tag:{display:{Name:"{\"text\":\"Aktuelle Position ausgeben\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:14b,id:"minecraft:book",Count:1b,tag:{display:{Name: "{\"text\":\"Aktuellen Wert ausgeben\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:15b,id:"minecraft:bookshelf",Count:1b,tag:{display:{Name: "{\"text\":\"Werte aller Felder ausgeben\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:21b,id:"minecraft:red_concrete_powder",Count:1b,tag:{display:{Name:"{\"text\":\"Anzahl verringern\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:22b,id:"minecraft:red_concrete_powder",Count:1b,tag:{display:{Name:"{\"text\":\"Zur niedrigeren Position\"}",Lore:["Klicke auf den Gegenstand"]} } },{Slot:23b,id:"minecraft:red_concrete_powder",Count:1b,tag:{display:{Name:"{\"text\":\"Wert verringern\"}",Lore:["Klicke auf den Gegenstand"]} } } ]}
 
   
  +
# Wenn Spieler den Stock ausgewählt haben und irgend einen Auslöser angeklickt haben, wird die Auslöser-Funktion gestartet.
# Falls die Option Felder erzeugen angeklickt wurde, besitzt die Variable einen Wert ab eins oder höher, wenn dass der Fall ist, wird der Güterlore der Gegenstand fürs "Feld hinzufügen" aktiviert
 
  +
execute as @a[tag=EtiDiZS.1Ausgewaehlt] unless entity @s[scores={PZDiZS.1Ausl=0}] run function direktzugriffsspeicher:v1ausloeser
execute if score #VarFeld.1FelderErzeugen PZFeld.1Wert matches 1.. run data remove entity @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder,sort=nearest,limit=1] Items[0]
 
   
  +
# Es wird ein Etikett gegeben oder genommen, je nach dem ob man gerade Stock ausgewählt hat, oder nicht.
# Die Anzahl der belegten Slots, in der schwebende Güterlore mit Shulkerkiste, wird ausgelesen und nur wenn sie nicht übereinstimmt, wird die Funktion geladen
 
  +
tag @a[tag=EtiDiZS.1Ausgewaehlt,tag=!EtiDiZS.1Auswahl] add EtiDiZS.1Auswahl
execute as @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder,sort=nearest,limit=1] store result score @s PZFeld.1Wert run data get entity @s Items
 
  +
tag @a[tag=!EtiDiZS.1Ausgewaehlt,tag=EtiDiZS.1Auswahl] remove EtiDiZS.1Auswahl
execute as @e[type=minecraft:chest_minecart,tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder,sort=nearest,limit=1] unless entity @s[scores={PZFeld.1Wert=11}] run function technik_wiki:direktzugriffsspeicher/v1menu
 
   
  +
# Das Etikett wird wieder entfernt.
# Das ausgewählte Feld erhält Leucht- und Partikeleffekte, um es sofort ausfindig machen zu können
 
  +
tag @a[tag=EtiDiZS.1Ausgewaehlt] remove EtiDiZS.1Ausgewaehlt
execute as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] unless score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run effect clear @s minecraft:glowing
 
execute as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run effect give @s minecraft:glowing 1 1
 
execute as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos at @s run particle minecraft:block minecraft:lime_concrete ~ ~1.1 ~ 0 0 0 0.1 1 normal @p[distance=..25]
 
 
}}
 
}}
   
   
{{fü|1|name=Menü}}
+
{{fü|1|name=Auslöser}}
  +
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.
Die Menü-Funktion kann erkennen welcher Gegenstand fehlt, also welche Schaltfläche angeklickt wurde und ruft dann die entsprechende Funktion auf, die die Option beinhaltet.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=2}} Wenn der Spieler eine Option angeklickt hat, so hält er unweigerlich den Gegenstand in der Hand. Dieser wird nun entfernt. Dazu wird ein Alias [[#technik_wiki:direktzugriffsspeicher/v1menu_gegenstand]] verwendet, dass alle Gegenstände beinhaltet, die auch im Menü vorkommen können.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=5}} Die Option alle Felder neu zu erzeugen wird dann aktiv, wenn sich an der entsprechenden Slot-Position kein Gegenstand befindet
 
Für die Feldanzahloptionen erhält die Güterlore jeweils ein Etikett für
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=8}} das Anheben der Feldanzahl,
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=9}} das Ausgeben der Feldanzahl oder
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=10}} für das Verringern der Feldanzahl.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=11}} Nur wenn die Güterlore eines der drei Etiketten besitzt, wird die Menü-Felder-Funktion für die weiteren Optionen aufgerufen.
 
Für die Zeiger-Position, erhält die Güterlore ebenfalls eines der drei Etiketten,
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=14}} für das Aufsteigen der Feldposition,
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=15}} für das Ausgeben der aktuellen Feldposition oder
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=16}} für das Absteigen der Feldposition.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=17}} Nur wenn die Güterlore eines der drei Etiketten besitzt, wird die Menü-Position-Funktion geladen.
 
Für die Feld-Wert-Optionen erhält die Güterlore auch jeweils eines der drei Etiketten,
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=20}} für das Erhöhen des Wertes eines Feldes,
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=21}} für das Auslesen des aktuellen Feld-Wertes oder
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=22}} für das Verringern des Wertes eines Feldes.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=23}} Nur wenn die Güterlore eines der drei Etiketten besitzt, wird die Menü-Wert-Funktion geladen mit all ihren Optionen.
 
Als weitere Möglichkeit um an die Werte von Feldern zu gelangen, kann man das Bücherregal anklicken, um alle Werte aller vorhandenen Felder auf einen Schlag zu erhalten.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu|line=26}} Hat man auf diesen Gegenstand geklickt, wird die Menü-Werte-Funktion geladen.
 
   
  +
{{f|name=direktzugriffsspeicher:v1ausloeser|1=
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu|1=
 
  +
execute store result score VarDiZS.1Laenge PZDiZS.1Pos run data get storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"
# Wenn der Spieler Gegenstände im Inventar hat, die vom Menü der Güterlore stammen, werden sie entfernt
 
execute at @s run clear @a[distance=..10] #technik_wiki:direktzugriffsspeicher/v1menu_gegenstand{display:{Lore:["Klicke auf den Gegenstand"]} } 64
 
   
  +
# 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.
# Wenn der Gegenstand für das Neuerzeugen aller Felder angeklickt wurde, wird die Felder-Erzeugen-Funktion geladen
 
  +
execute if score @s[scores={PZDiZS.1Ausl=-1}] PZDiZS.1Pos >= VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players set @s PZDiZS.1Pos 0
execute as @s[nbt=!{Items:[{Slot:11b}]}] run function technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen
 
   
  +
# 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.
# Wenn einer der Gegenstände für die Feldanzahl angeklickt wurde, so erhält die Güterlore ein Etikett, wodurch die Feldanzahl-Option-Funktion geladen wird
 
  +
scoreboard players add @s[scores={PZDiZS.1Ausl=2}] PZDiZS.1Pos 1
tag @s[nbt=!{Items:[{Slot:3b}]}] add EtiFeld.1FeldAnzahlAnheben
 
  +
execute if score @s[scores={PZDiZS.1Ausl=2}] PZDiZS.1Pos >= VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players set @s PZDiZS.1Pos 0
tag @s[nbt=!{Items:[{Slot:12b}]}] add EtiFeld.1FeldAnzahlAusgeben
 
tag @s[nbt=!{Items:[{Slot:21b}]}] add EtiFeld.1FeldAnzahlVerringern
 
execute unless entity @s[tag=!EtiFeld.1FeldAnzahlAnheben,tag=!EtiFeld.1FeldAnzahlAusgeben,tag=!EtiFeld.1FeldAnzahlVerringern] run function technik_wiki:direktzugriffsspeicher/v1menu_felder
 
   
  +
# 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.
# Wenn einer der Gegenstände für die Position angeklickt wurde, so erhält die Güterlore ein Etikett, wodurch die Position-Option-Funktion geladen wird
 
  +
scoreboard players remove @s[scores={PZDiZS.1Ausl=-2}] PZDiZS.1Pos 1
tag @s[nbt=!{Items:[{Slot:4b}]}] add EtiFeld.1PositionAufsteigen
 
  +
execute store result score @s[scores={PZDiZS.1Ausl=-2,PZDiZS.1Pos=..-1}] PZDiZS.1Pos run scoreboard players remove VarDiZS.1Laenge PZDiZS.1Pos 1
tag @s[nbt=!{Items:[{Slot:13b}]}] add EtiFeld.1PositionAusgeben
 
  +
execute if score @s[scores={PZDiZS.1Ausl=-2}] PZDiZS.1Pos = VarDiZS.1Laenge PZDiZS.1Pos run scoreboard players add VarDiZS.1Laenge PZDiZS.1Pos 1
tag @s[nbt=!{Items:[{Slot:22b}]}] add EtiFeld.1PositionAbsteigen
 
execute unless entity @s[tag=!EtiFeld.1PositionAufsteigen,tag=!EtiFeld.1PositionAusgeben,tag=!EtiFeld.1PositionAbsteigen] run function technik_wiki:direktzugriffsspeicher/v1menu_position
 
   
  +
# Für den Aufruf der Felder-Funktion wird die Variable für aktuelle Position auf null gesetzt.
# Wenn einer der Gegenstände für die Wertangabe angeklickt wurde, so erhält die Güterlore ein Etikett, wodurch die Wert-Option-Funktion geladen wird
 
  +
scoreboard players set VarDiZS.1AktuellePosition PZDiZS.1Pos 0
tag @s[nbt=!{Items:[{Slot:5b}]}] add EtiFeld.1WertAnheben
 
  +
function direktzugriffsspeicher:v1felder
tag @s[nbt=!{Items:[{Slot:14b}]}] add EtiFeld.1WertAusgeben
 
tag @s[nbt=!{Items:[{Slot:23b}]}] add EtiFeld.1WertVerringern
 
execute unless entity @s[tag=!EtiFeld.1WertAnheben,tag=!EtiFeld.1WertAusgeben,tag=!EtiFeld.1WertVerringern] run function technik_wiki:direktzugriffsspeicher/v1menu_wert
 
   
  +
# Der Spieler mit dem Stock erhält eine Chat-Nachricht, mit allen Optionen für die Felderreihe.
# Wenn der Gegenstand für das Ausgeben aller Werte der Felder angeklickt wurde, wird die Werte-Funktion geladen
 
  +
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}]
execute as @s[nbt=!{Items:[{Slot:15b}]},scores={PZFeld.1Pos=1..}] run function technik_wiki:direktzugriffsspeicher/v1menu_werte
 
  +
  +
# 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
 
}}
 
}}
   
{{JSON-Datei|name=technik_wiki:direktzugriffsspeicher/v1menu_gegenstand|type=alias|1=
 
{
 
"values": [
 
"minecraft:lime_shulker_box",
 
"minecraft:chest",
 
"minecraft:daylight_detector",
 
"minecraft:book",
 
"minecraft:bookshelf",
 
"minecraft:lime_concrete_powder",
 
"minecraft:red_concrete_powder"
 
]
 
}
 
   
  +
{{fü|1|name=Felder}}
  +
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.
  +
  +
{{f|name=direktzugriffsspeicher:v1felder|1=
  +
# 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
 
}}
 
}}
   
   
{{fü|1|name=Menü-Felder}}
+
{{fü|1|name=Stopp}}
  +
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.
Die Menü-Felder-Funktion wird dafür eingesetzt, die eigentlichen Felder zu erzeugen. Hierbei kann man die Anzahl festlegen und zu jeder Zeit sich auch anzeigen lassen, wie viele Felder man angelegt hat.
 
   
  +
{{f|name=direktzugriffsspeicher:v1stopp|alias=v1stopp|1=
Wenn man die Option "Anzahl erhöhen" angeklickt hat, besitzt die Güterlore die als Benutzeroberfläche dient, ein Etikett für das Anheben der Feldanzahl.
 
  +
# Die zwei Punkte-Ziele werden entfernt.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=2}} Wenn die Anzahl der Felder erhöht werden soll, wie in diesem Fall, dann wird die aktuelle Position der Güterlore übernommen (at) aber nur wenn auch die Anzahl der erzeugten Felder nicht über 63 liegt und von ihr aus werden alle vorhandenen Felder als Ausführer markiert und auch deren Position übernommen, um sie dann mit dem teleport-Befehl genau einen Block von sich aus nach oben zu teleportieren.
 
  +
scoreboard objectives remove PZDiZS.1Ausl
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=5}} Nun wird das eigentliche Feld gespawnt. Dazu wird zuerst wieder die Position der Güterlore verwendet und auch wieder geprüft ob es nicht mehr als 63 Felder gibt und dann wird einen Block über ihr das neue Feld in Form eines Rüstungsständers gespawnt. Dieser ist Schwerelose, klein, unsichtbar, besitzt keine Hitbox, besitzt einen Namen der auf den Inhalt hinweist, besitzt ein Etikett, das alle Felder und alles was mit diesem Speicher zu tun hat besitzen und der Rüstungsständer besitzt im vierten Rüstungsslot, der den Kopfslot darstellt eine Truhe. Somit werden die Felder als kleine schwebende Truhen dargestellt, wodurch später auch die Position und der Wert auf diese gelegt werden kann.
 
  +
scoreboard objectives remove PZDiZS.1Pos
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=6}} Nun erhält die kleine schwebende Truhe als Abschluss eine Positionsnummer. Hierbei wird einfach dem Rüstungsständer für sein Punktestand-Ziel bezüglich der Position der Wert um eins erhöht. Wenn der Rüstungsständer noch keinen Wert hatte, wie in diesem Fall, erhält er den Wert eins. Wenn der Rüstungsständer bereits einen Wert hat, wird dieser ebenfalls um eins erhöht. Dadurch zeigt sich, dass jedesmal wenn ein neuer Rüstungsständer gespawnt wird, sich auch die Position mitändert.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=9}} Dadurch das ein neues Feld in Form einer kleinen schwebenden Truhe erzeugt wurde, muss sich folglich auch die Anzahl dieser verändert haben. Um ganz sicher zu gehen wie viele Felder existieren, wird von der Güterlore aus gespeichert wie viele Felder existieren. Dazu wird der store-Unterbefehl genutzt, welcher das Resultat des nachfolgenden Unterbefehls in den Punktestand der Güterlore speichert. Der nachfolgende if-Unterbefehl prüft wie viele kleine schwebende Truhen es gibt, welche wie bereits erwähnt kleine Rüstungsständer mit dem Inhalts-Namen sind. Diese Anzahl wird anschließend in dem Punktestand der Güterlore gespeichert.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=10}} Nun wird die neue Anzahl der Felder als tellraw-Nachricht ausgegeben. Das geschieht nur dann, wenn die Variable von der Menü-Felder-Erzeugen-Funktion nicht über eins liegt. Das sorgt dafür, dass wenn alle Felder neu erzeugt werden, dass für diesen Vorgang nicht jede kleine Änderung im Chat erscheint.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=13}} Wenn man Felder erzeugt, kann man immer im gleichen Zeitpunkt nur eines der Felder ansteuern, dies wird über die Variable der aktuellen Position gemacht. Diese wird, wenn man die Feldanzahl erhöht ebenfalls mit erhöht, da man dadurch immer auf dem gleichen Feld mit dem sogenannten Zeiger bleibt. Auch hier wird die aktuelle Position nur erhöht, wenn man einzelne Felder hinzufügt und nicht alle Felder komplett neu erzeugt.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=16}} Als letztes muss die Feld-Erzeugen-Variable selbst um eins verringert werden. Denn sie wird in der Felder-Erzeugen-Funktion soweit hochgesetzt wie es Felder gibt um sie anschließend neu erzeugen zu können und dabei immer zu wissen wie viele Felder noch erzeugt werden müssen.
 
   
  +
# Der NBT-Speicher wird geleert.
Möchte man sich die aktuelle Feldanzahl ausgeben lassen, so hat man auf die Option "Aktuelle Feldanzahl ausgeben" geklickt.
 
  +
data remove storage direktzugriffsspeicher:v1daten "EigDiZS.1Felder"
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=19}} Dazu wird ganz einfach von der Position der Güterlore aus allen Spielern die sich in einem Umkreis von 25 Blöcken befinden eine tellraw-Nachricht ausgegeben, die den Spieler die genaue Anzahl ausgibt.
 
   
  +
# Das Etikett zur Auswahl des Stockes wird entfernt.
Wenn man die Option "Anzahl verringern" angeklickt hat, besitzt die Güterlore das Etikett für diese Option un führt die Befehle dazu aus.
 
  +
tag @a[tag=EtiDiZS.1Auswahl] remove EtiDiZS.1Auswahl
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=22}} Wenn es der Punktestand für die Anzahl der Felder mindestens eins beträgt oder höher ist, wird die Position der Güterlore benutzt um den Rüstungsständer der am weitesten weg von dieser ist ausfindig zu machen. Dieser Rüstungsständer wird anschließend gelöscht.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=25}} Nun wird von der Güterlore aus getestet wie viele kleine schwebende Truhen existieren und die Anzahl davon wird mit dem store-Unterbefehl in den Punktestand der Lore gespeichert.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=26}} Dann wird die neue aktuelle Anzahl der Felder als tellraw-Nachricht in einem Umkreis von 25 Blöcken um die Güterlore den Spielern mitgeteilt.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder|line=29}} Falls der Zeiger mit seiner aktuellen Position auf das gelöschte Feld gezeigt hatte, muss nun dieser auf das nächst niedrigere Feld gesetzt werden. Dazu wird getestet ob die Variable der aktuellen Position größer als die maximale Anzahl der Felder ist. Die maximale Anzahl der Felder ist hierbei in dem Punktestand der Güterlore gespeichert. Falls die variable größer ist, wird sie nun um eins verringert.
 
   
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_felder|1=
 
  +
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.1Alle:true} } }]
# Alle vorhandenen Felder werden um einen Block nach oben teleportiert, falls es nicht über 127 Felder sind
 
  +
}}
execute at @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt] at @s run teleport @s ~ ~1 ~
 
   
  +
== Variante 2 ==
# Ein neues Feld in Form eines Rüstungsständer mit einer Shulkerkiste wird über dem Hauptfeld gespawnt und alle Felder bekommen ihre Position um eins erhöht
 
  +
{{Voraussetzung|
execute at @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] run summon minecraft:armor_stand ~ ~1 ~ {NoGravity:true,Small:true,Invisible:true,Marker:true,CustomName:"\"ObjFeld.1Inhalt\"",Tags:["EtiFeld.1AlleFelder"],ArmorItems:[{},{},{},{id:"minecraft:chest",Count:1b} ] }
 
  +
*[[Speicherzelle (Befehle)]]
execute as @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] run scoreboard players add @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt] PZFeld.1Pos 1
 
  +
*[[Zähler (Befehle)]]
  +
*[[Addierwerk (Befehle)]]
  +
*[[Subtrahierwerk (Befehle)]]
  +
*[[Vergleicher (Befehle)]]
  +
*{{mcw|Funktion}}
  +
*{{mcw|JSON-Text}}
  +
*{{mcw|NBT}}
  +
|
  +
*{{Gridbild|Hebel|link}}
  +
*{{Gridbild|Redstone-Fackel|link}}
  +
*{{Gridbild|Befehlsblock|link|stapel=2}}
  +
*{{Gridbild|Wiederhol-Befehlsblock|link}}
  +
}}
  +
{{Bilderfolge|#1#2|Direktzugriffsspeicher (Befehle) Bild 2.|400px|list=1}}
   
  +
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.
# Danach wird die neue Anzahl Felder als Punktestand in der Güterlore gespeichert, welche somit immer die aktuelle Anzahl ihrer Felder gepseichert hat
 
execute at @s[tag=EtiFeld.1FeldAnzahlAnheben] store result score @s PZFeld.1Pos if entity @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt]
 
execute at @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] unless score #VarFeld.1FelderErzeugen PZFeld.1Wert matches 1.. run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Länge + 1 = neues Feld[","bold":true},{"score":{"name":"@s","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"]","bold":true} ]
 
   
  +
;Einschalten
# Die aktuelle Position wird um eins erhöht
 
  +
*{{bb|2|1}} Der Befehlsblock aktiviert die Start-Funktion.
execute as @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] unless score #VarFeld.1FelderErzeugen PZFeld.1Wert matches 1.. run scoreboard players add #VarFeld.1AktuellePosition PZFeld.1Pos 1
 
   
  +
;Wiederholen
# Verringert den Wert der Variable um eins, falls sie mindestens noch den Wert eins hat
 
  +
*{{bb|2|2}} Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
execute as @s[tag=EtiFeld.1FeldAnzahlAnheben,scores={PZFeld.1Pos=..63}] if score #VarFeld.1FelderErzeugen PZFeld.1Wert matches 1.. run scoreboard players remove #VarFeld.1FelderErzeugen PZFeld.1Wert 1
 
   
  +
;Ausschalten
# Die aktuelle Feldanzahl wird ausgegeben
 
  +
*{{bb|2|3}} Der Befehlsblock aktiviert die Stopp-Funktion.
execute at @s[tag=EtiFeld.1FeldAnzahlAusgeben] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Länge = ","bold":true},{"score":{"name":"@s","objective":"PZFeld.1Pos"},"bold":true,"color":"green"} ]
 
   
# Das oberste Feld wird gelöscht
 
execute at @s[tag=EtiFeld.1FeldAnzahlVerringern,scores={PZFeld.1Pos=1..}] run kill @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,sort=furthest,limit=1]
 
   
  +
{{Ausklappmenü|offen=1|{{bb}}|
# Danach wird die neue Anzahl Felder als Punktestand in der Güterlore gespeichert, welche somit immer die aktuelle Anzahl ihrer Felder gespeichert hat
 
  +
{{bb|2|1|i|4=function direktzugriffsspeicher:v2start}}
execute at @s[tag=EtiFeld.1FeldAnzahlVerringern] store result score @s PZFeld.1Pos if entity @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt]
 
  +
{{bb|2|2|w|4=function direktzugriffsspeicher:v2zyklus}}
execute at @s[tag=EtiFeld.1FeldAnzahlVerringern] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Länge - 1 = neues Feld[","bold":true},{"score":{"name":"@s","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"]","bold":true} ]
 
   
  +
# Falls die aktuelle ausgewählte Position das gelöschte Feld war, wird die aktuelle Position auf das nächst niedrigere Feld gesetzt
 
  +
{{bb|2|3|i|4=function direktzugriffsspeicher:v2stopp}}
execute as @s[tag=EtiFeld.1FeldAnzahlVerringern] if score #VarFeld.1AktuellePosition PZFeld.1Pos > @s PZFeld.1Pos run scoreboard players remove #VarFeld.1AktuellePosition PZFeld.1Pos 1
 
 
}}
 
}}
   
   
{{fü|1|name=Menü-Felder-Erzeugen}}
+
{{fü|2|name=Start}}
  +
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.
Die Menü-Felder-Funktion ist dafür gedacht, alle vorhandenen Felder zu löschen und nochmal neu zu erzeugen. Das ist nur dafür gedacht um alle Felder auf einmal erscheinen zu lassen und um alle Werte der Felder auf null zurück zu setzen.
 
  +
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen|line=2}} Zuerst werden alle Rüstungsständer die als kleine schwebende Truhen zu sehen sind, gelöscht.
 
  +
{{f|name=direktzugriffsspeicher:v2start|alias=v2start|1=
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen|line=3}} Dann wird der Variable für das Erzeugen der Felder der Wert von der maximalen Anzahl aller Felder übertragen, sodass man diesen durch diese Variable abfragen und später auch verringern kann ohne den originalen Punktestand anfassen zu müssen.
 
  +
# Drei Punkte-Ziele werden erstellt.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen|line=4}} Anschließend erhalten alle Spieler im Umkreis von 25 Blöcken um die Güterlore eine Nachricht, wie groß Anzahl der Felder war und wie viele somit neu erstellt werden.
 
  +
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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen|1=
 
  +
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."'] } }
# Alle Felder werden gelöscht und die Variable erhält den Wert der aktuellen Felder
 
kill @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder]
 
scoreboard players operation #VarFeld.1FelderErzeugen PZFeld.1Wert = @s PZFeld.1Pos
 
execute at @s run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld = neues Feld[","bold":true},{"score":{"name":"#VarFeld.1FelderErzeugen","objective":"PZFeld.1Wert"},"bold":true,"color":"green"},{"text":"]","bold":true} ]
 
 
}}
 
}}
   
   
{{fü|1|name=Menü-Position}}
+
{{fü|2|name=Zyklus}}
  +
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.
Die Menü-Position-Funktion speichert die Position des Zeigers. Jedes Feld muss angesteuert werden bevor man den Wert ändern kann, dazu wird der Zeiger benutzt, der immer das aktuelle Feld markiert, das gerade angesteuert wurde. Wenn man eine Positionsoption angeklickt hat, wird die Güterlore für die jeweilige Option ein Etikett besitzen.
 
   
  +
{{f|name=direktzugriffsspeicher:v2zyklus|alias=v2zyklus|1=
Besitzt die Güterlore ein Etikett für das Anheben der Position, so werden nachfolgende Befehle ausgeführt.
 
  +
# Wenn Spieler den Stock ausgewählkt haben, erhalten sie ein Etikett.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=2}} Die Variable der aktuellen Position wird um eins erhöht
 
  +
tag @a[nbt={SelectedItem:{tag:{EigDiZS.2Felder:true} } }] add EtiDiZS.2Ausgewaehlt
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=3}} Falls die aktuelle Position nun über die maximale Feldanzahl hinausgegangen ist, so ist sie größer als diese, dann wird sie wieder auf eins zurückgesetzt. Somit landet man wieder am Anfang der Felderreihe.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=4}} Zu guter letzt erhalten die Spieler um die Güterlore eine Nachricht wo sich der Zeiger mit seiner aktuellen Position befindet.
 
   
  +
# Wenn Spieler den Stock gerade erst ausgewählt haben, wird ihnen der Auslöser-Wert, die Position und die Dimension gesetzt.
Wenn die Option "Aktuelle Position ausgeben" angeklickt wurde wird der nachfolgende Befehl aktiviert
 
  +
scoreboard players set @a[tag=EtiDiZS.2Ausgewaehlt,tag=!EtiDiZS.2Auswahl] PZDiZS.2Ausl -99
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=7}} Von der Position der Güterlore aus wird in einem Umkreis von 25 Blöcken eine tellraw-Nachricht an alle Spieler ausgegeben.
 
  +
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 man die Option "Zur niedrigeren Position" angeklickt hat, besitzt die Güterlore das entsprechende Etikett.
+
# 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
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=10}} Die Variable der aktuellen Position bekommt den Wert um eins verringert
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=11}} Falls der Wert der Variable kleiner oder gleich null ist, wird sie auf den Wert der maximalen Feldanzahl gesetzt, was ganz am Ende ist.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_position|line=12}} Nun erhalten alle Spieler um die Güterlore eine tellraw-Nachricht.
 
   
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_position|1=
 
  +
tag @a[tag=EtiDiZS.2Ausgewaehlt] remove EtiDiZS.2Ausgewaehlt
# Gibt die neue erhöhte Position aus
 
  +
}}
execute as @s[tag=EtiFeld.1PositionAufsteigen] run scoreboard players add #VarFeld.1AktuellePosition PZFeld.1Pos 1
 
  +
execute as @s[tag=EtiFeld.1PositionAufsteigen] if score #VarFeld.1AktuellePosition PZFeld.1Pos > @s PZFeld.1Pos run scoreboard players set #VarFeld.1AktuellePosition PZFeld.1Pos 1
 
  +
execute at @s[tag=EtiFeld.1PositionAufsteigen] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Position + 1 = ","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"} ]
 
  +
{{fü|2|name=Auslöser}}
  +
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.
  +
  +
{{f|name=direktzugriffsspeicher:v2ausloeser|1=
  +
# 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.
# Gibt die aktuelle Position aus
 
  +
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}]
execute at @s[tag=EtiFeld.1PositionAusgeben] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Position = ","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"} ]
 
   
  +
# Der Spieler erhält die Berechtigung den Auslöser erneut auszuführen und sein Wert wird auf null gesetzt.
# Gibt die neue verringerte Position aus
 
  +
scoreboard players enable @s PZDiZS.2Ausl
execute as @s[tag=EtiFeld.1PositionAbsteigen] run scoreboard players remove #VarFeld.1AktuellePosition PZFeld.1Pos 1
 
  +
scoreboard players set @s PZDiZS.2Ausl 0
execute as @s[tag=EtiFeld.1PositionAbsteigen] if score #VarFeld.1AktuellePosition PZFeld.1Pos matches ..0 run scoreboard players operation #VarFeld.1AktuellePosition PZFeld.1Pos = @s PZFeld.1Pos
 
execute at @s[tag=EtiFeld.1PositionAbsteigen] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld.Position - 1 = ","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"} ]
 
 
}}
 
}}
   
   
{{fü|1|name=Menü-Wert}}
+
{{fü|2|name=Dimension1}}
  +
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.
Die Menü-Wert-Funktion ermöglicht es einem Feld einen Wert zuzuweisen und auch auszulesen.
 
   
  +
{{f|name=direktzugriffsspeicher:v2dimension1|1=
Hat man auf "Wert erhöhen" geklickt, wird die Güterlore ein entsprechendes Etikett besitzen.
 
  +
# 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.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=2}} Um den Wert des Feldes zu erhöhen, werden zuerst von der Güterlore aus, alle Felder anvisiert. Jedes Feld vergleicht seine Positionsnummer mit der aktuell ausgewählten Positionsnummer und nur das Feld dass dem entspricht bekommt seinen Wert um eins erhöht.
 
  +
scoreboard players set VarDiZS.2AktuellePosition2 PZDiZS.2Pos 0
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=3}} Damit der Wert später in der tellraw-Nachricht angezeigt werden kann, wird dieser in eine Variable gespeichert, welche dann für das Anzeigen verwendet werden kann. Der Wert wird über den gleichen Vorgang hergeholt wie eine Zeile darüber.
 
  +
execute if score VarDiZS.2Position1 PZDiZS.2Pos = VarDiZS.2AktuellePosition1 PZDiZS.2Pos run function direktzugriffsspeicher:v2dimension2
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=4}} Anschließend wird dem Spieler in einem Radius von 25 Blöcken mitgeteilt, auf welchen Wert sich der Punktestand des ausgewählten Feldes verändert hat.
 
Hat man auf "Wert ausgeben" geklickt, so wird der Wert ausgelesen und ausgegeben.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=7}} Damit der Wert ausgegeben werden kann, wird der Wert des aktuell ausgewählten Feldes in eine Variable gespeichert.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=8}} Im Umkreis um die Güterlore wird eine tellraw-Nachricht ausgegeben, die den aktuellen Wert des Feldes anzeigt.
 
Hat man auf "Wert verringern" geklickt erhält die Güterlore ebenfalls ein Etikett für diesen Fall.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=11}} Es werden alle Felder ausgewählt und jedes wird mit der aktuellen Position verglichen. Nur das Feld der aktuellen Position wird anschließend seinen Wert um eins erhöht bekommen.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=12}} Auf die gleiche Weise wird nun der Wert von dem ausgewählten Feld in eine Variable gespeichert um diesen später in der tellraw-Nachricht angeben zu können.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_wert|line=13}} Von der Güterlore aus, wird den Spielern dann mit dem tellraw-Befehl die Nachricht mit dem verringerten Wert ausgegeben.
 
   
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_wert|1=
 
  +
scoreboard players add VarDiZS.2AktuellePosition1 PZDiZS.2Pos 1
# Erhöht den Wert des aktuellen Feldes um eins
 
  +
execute if score VarDiZS.2AktuellePosition1 PZDiZS.2Pos < VarDiZS.2Dimension1 PZDiZS.2Pos run function direktzugriffsspeicher:v2dimension1
execute as @s[tag=EtiFeld.1WertAnheben] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run scoreboard players add @s PZFeld.1Wert 1
 
  +
}}
execute as @s[tag=EtiFeld.1WertAnheben] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run scoreboard players operation #VarFeld.1WertInhalt PZFeld.1Wert = @s PZFeld.1Wert
 
execute at @s[tag=EtiFeld.1WertAnheben] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld[","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"] + 1 = ","bold":true},{"score":{"name":"#VarFeld.1WertInhalt","objective":"PZFeld.1Wert"},"bold":true,"color":"dark_purple"} ]
 
   
# Gibt den Wert des aktuellen Feldes aus
 
execute as @s[tag=EtiFeld.1WertAusgeben] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run scoreboard players operation #VarFeld.1WertInhalt PZFeld.1Wert = @s PZFeld.1Wert
 
execute at @s[tag=EtiFeld.1WertAusgeben] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld[","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"] = ","bold":true},{"score":{"name":"#VarFeld.1WertInhalt","objective":"PZFeld.1Wert"},"bold":true,"color":"dark_purple"} ]
 
   
  +
{{fü|2|name=Dimension2}}
# Verringert den Wert des aktuellen Feldes
 
  +
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.
execute as @s[tag=EtiFeld.1WertVerringern] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run scoreboard players remove @s PZFeld.1Wert 1
 
  +
execute as @s[tag=EtiFeld.1WertVerringern] as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1AktuellePosition PZFeld.1Pos run scoreboard players operation #VarFeld.1WertInhalt PZFeld.1Wert = @s PZFeld.1Wert
 
  +
{{f|name=direktzugriffsspeicher:v2dimension2|1=
execute at @s[tag=EtiFeld.1WertVerringern] run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:\n",{"text":"Feld[","bold":true},{"score":{"name":"#VarFeld.1AktuellePosition","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"] - 1 = ","bold":true},{"score":{"name":"#VarFeld.1WertInhalt","objective":"PZFeld.1Wert"},"bold":true,"color":"dark_purple"} ]
 
  +
# 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
 
}}
 
}}
   
   
{{fü|1|name=Menü-Werte}}
+
{{fü|2|name=Stopp}}
  +
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.
Die Menü-Werte-Funktion arbeitet mit der Menü-Werte-Felder-Funktion zusammen und sorgt dafür, dass alle Felderwerte in einem Rutsch ausgegeben werden können.
 
  +
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte|line=2}} Die Variable für die Startposition wird auf eins gesetzt. Das ist auch deshalb notwendig, da die Variable bei einem weiteren Aufruf dieser Funktion noch einen anderen Endpositionswert haben könnte.
 
  +
{{f|name=direktzugriffsspeicher:v2stopp|alias=v2stopp|1=
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte|line=3}} Der Kopfteil der tellraw-Nachricht wird ausgegeben. Unter diesem werden später alle Felderpositionen angezeigt werden.
 
  +
# Die drei Punkte-Ziele werden entfernt.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte|line=4}} Nachdem die Vorbedingungen in den davor liegenden Zeilen erfüllt sind, kann die Funktion {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder}} geladen werden.
 
  +
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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_werte|1=
 
  +
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.2Alle:true} } }]
# Eine Startpoisitionsvariable wird auf eins festgelegt und der Kopfteil der tellraw-Nachricht wird ausgegeben. Anschließend wird die Menü-Werte-Felder-Funktion geladen
 
scoreboard players set #VarFeld.1PositionAusgeben PZFeld.1Pos 1
 
execute at @s run tellraw @a[distance=..25] ["Direktzugriffsspeicher.1:"]
 
function technik_wiki:direktzugriffsspeicher/v1menu_werte_felder
 
 
}}
 
}}
   
  +
== Variante 3 ==
  +
{{Voraussetzung|
  +
*[[Speicherzelle (Befehle)]]
  +
*[[Zähler (Befehle)]]
  +
*[[Addierwerk (Befehle)]]
  +
*[[Subtrahierwerk (Befehle)]]
  +
*[[Vergleicher (Befehle)]]
  +
*{{mcw|Funktion}}
  +
*{{mcw|JSON-Text}}
  +
*{{mcw|NBT}}
  +
|
  +
*{{Gridbild|Hebel|link}}
  +
*{{Gridbild|Redstone-Fackel|link}}
  +
*{{Gridbild|Befehlsblock|link|stapel=2}}
  +
*{{Gridbild|Wiederhol-Befehlsblock|link}}
  +
}}
  +
{{Bilderfolge|#1#2|Direktzugriffsspeicher (Befehle) Bild 3.|400px|list=1}}
   
  +
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.
{{fü|1|name=Menü-Werte-Felder}}
 
Die Menü-Werte-Felder-Funktion gibt pro Aufruf in dem aktuell ausgewählten Feld den gespeicherten Wert aus. Hierbei ruft sich die Funktion selbst solange auf, bis sie alle Werte der Felderreihe ausgegeben hat.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder|line=2}} Alle vorhandenen Felder werden ausgewählt und dann vergleiche sie sich mit der aktuellen Position, wenn das zutreffende Feld gefunden wurde, wird der Wert des Feldes in eine Variable gespeichert. Diese Variable wird nur für den Moment gebraucht, weswegen sie beim nächsten Aufruf bereits den nächsten Wert übertragen bekommt.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder|line=3}} Der gespeicherte Wert wird anschließend im Umkreis von 25 Blöcken um die Güterlore über die tellraw-Nachricht ausgegeben.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder|line=6}} Nun wird die aktuell ausgewählte Position um eins erhöht.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder|line=7}} Nur wenn die aktuelle neue Position kleiner oder gleich der maximalen Feldanzahl entspricht, wird diese Funktion sich selbst erneut aufrufen, ansonsten ist hier der Selbstaufruf zu Ende.
 
   
  +
;Einschalten
  +
*{{bb|3|1}} Der Befehlsblock aktiviert die Start-Funktion.
   
  +
;Wiederholen
{{f|name=technik_wiki:direktzugriffsspeicher/v1menu_werte_felder|1=
 
  +
*{{bb|3|2}} Der Wiederhol-Befehlsblock lädt jeden Tick die Zyklus-Funktion.
# Es wird nach dem Feld mit der entsprechenden Position gesucht und dann wird dessen Wert in eine Variable gespeichert und anschließend in einer tellraw-Nachricht ausgegeben
 
execute as @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt,tag=EtiFeld.1AlleFelder] if score @s PZFeld.1Pos = #VarFeld.1PositionAusgeben PZFeld.1Pos run scoreboard players operation #VarFeld.1WertInhalt PZFeld.1Wert = @s PZFeld.1Wert
 
execute at @s run tellraw @a[distance=..25] ["",{"text":"Feld[","bold":true},{"score":{"name":"#VarFeld.1PositionAusgeben","objective":"PZFeld.1Pos"},"bold":true,"color":"green"},{"text":"] = ","bold":true},{"score":{"name":"#VarFeld.1WertInhalt","objective":"PZFeld.1Wert"},"bold":true,"color":"dark_purple"} ]
 
   
  +
;Ausschalten
# Die Position wird um eins erhöht und wenn sie kleiner gleich der maximalen Länge des Feldes ist, wird diese Funktion selbst nochmal mit der neuen Position aufgerufen
 
  +
*{{bb|3|3}} Der Befehlsblock aktiviert die Stopp-Funktion.
scoreboard players add #VarFeld.1PositionAusgeben PZFeld.1Pos 1
 
  +
execute if score #VarFeld.1PositionAusgeben PZFeld.1Pos <= @s PZFeld.1Pos run function technik_wiki:direktzugriffsspeicher/v1menu_werte_felder
 
  +
  +
{{Ausklappmenü|offen=1|{{bb}}|
  +
{{bb|3|1|i|4=function direktzugriffsspeicher:v3start}}
  +
{{bb|3|2|w|4=function direktzugriffsspeicher:v3zyklus}}
  +
  +
  +
{{bb|3|3|i|4=function direktzugriffsspeicher:v3stopp}}
 
}}
 
}}
   
   
{{fü|1|name=Stopp}}
+
{{fü|3|name=Start}}
Die Stopp-Funktion beendet alles, in dem sie die Punktestand-Ziele löscht und alle Felder entfernt.
+
Die Start-Funktion erstellt die Punkte-Ziele und den NBT-Speicher. Auch erhält der Spieler den Stock.
  +
* {{f|link=technik_wiki:direktzugriffsspeicher/v1stopp|line=2}} Das Punktestand-Ziel für den Feldwert wird gelöscht.
 
* {{f|link=technik_wiki:direktzugriffsspeicher/v1stopp|line=3}} Das Punktestand-Ziel für die Feldposition wird gelöscht.
+
{{f|name=direktzugriffsspeicher:v3start|alias=v3start|1=
  +
# Drei Punkte-Ziele werden erstellt.
* {{f|link=technik_wiki:direktzugriffsspeicher/v1stopp|line=6}} Die Güterlore, die die Benutzeroberfläche darstellt, würde beim löschen all ihre Gegenstände droppen, einschließlich der Truhe und Lore, daher wird sie bevor sie im nächsten Befehl gelöscht wird, zuvor noch unter die Welt in die Leere teleporitert. Wenn sie dann gelöscht wird, fallen die Gegenstände auch dort hin und sind weg.
 
  +
scoreboard objectives add PZDiZS.3Ausl trigger ["Direktzugriffsspeicher.3: ",{"text":"Wert der Variablen","bold":true}]
* {{f|link=technik_wiki:direktzugriffsspeicher/v1stopp|line=7}} Alle Felder einschließlich der Benutzeroberfläche werden gelöscht.
 
  +
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."'] } }
  +
}}
  +
  +
  +
{{fü|3|name=Zyklus}}
  +
Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und nur dann lädt sie die Auslöser-Funktion.
  +
  +
{{f|name=direktzugriffsspeicher:v3zyklus|alias=v3zyklus|1=
  +
# 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
  +
}}
  +
  +
  +
{{fü|3|name=Auslöser}}
  +
Die Auslöser-Funktion verwaltet alle Einstellungen der Liste und gibt über den Chat die Möglichkeit die Liste zu verändern.
  +
  +
{{f|name=direktzugriffsspeicher:v3ausloeser|1=
  +
# 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
  +
}}
  +
  +
  +
{{fü|3|name=Dimension1}}
  +
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.
  +
  +
{{f|name=direktzugriffsspeicher:v3dimension1|1=
  +
# 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
  +
}}
  +
  +
  +
{{fü|3|name=Dimension2}}
  +
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.
  +
  +
{{f|name=direktzugriffsspeicher:v3dimension2|1=
  +
# 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
  +
}}
  +
  +
  +
{{fü|3|name=Dimension3}}
  +
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.
  +
  +
{{f|name=direktzugriffsspeicher:v3dimension3|1=
  +
# 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
  +
}}
  +
  +
  +
{{fü|3|name=Stopp}}
  +
Die Stopp-Funktion löscht die Punkte-Ziele und den NBT-Speicher und entfernt den Stock sowie noch vorhandene Etiketten des Spielers.
  +
  +
{{f|name=direktzugriffsspeicher:v3stopp|alias=v3stopp|1=
  +
# 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.
{{f|name=technik_wiki:direktzugriffsspeicher/v1stopp|alias=v1stopp|1=
 
  +
clear @a minecraft:stick{EigDiZS.3Alle:true}
# Die Punktestand-Ziele werden wieder entfernt
 
scoreboard objectives remove PZFeld.1Wert
 
scoreboard objectives remove PZFeld.1Pos
 
   
  +
# Falls der Stock auf den Boden geworfen wurde, wird ebenfalls entfernt.
# Alle bisher erzeugten Felder werden gelöscht
 
  +
kill @e[type=minecraft:item,nbt={Item:{tag:{EigDiZS.3Alle:true} } }]
teleport @e[tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder] ~ -255 ~
 
kill @e[tag=EtiFeld.1AlleFelder]
 
 
}}
 
}}
   

Version vom 22. September 2020, 13:49 Uhr

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

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

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

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