Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  – Noch keinen Server gefunden? Es gibt einen Wiki-Server

Schaltnetze/Direktzugriffsspeicher (Befehle)

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

Grid Roter Sand blass.png mit Mechaniken

Grid Redstone.png mit Redstone
                Hier:
Grid Befehlsblock.png mit Befehlen

Die vorgestellte Technik kann in der Redstone-Welt angesehen werden.

Grid Wiederhol-Befehlsblock.png mehr Befehle
Redstone-Schaltkreise Symbol.png
Diese Technik ist noch nicht in der aktuellen Redstone-Welt vorhanden.
In einem der nächsten Updates wird sie dort hinzugefügt werden.

Direktzugriffsspeicher (engl: Random-Access-Memory) ermöglichen das Speichern sowie das erneute Auslesen von Zahlenwerten. 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 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 mehrdimensionale Felderreihen siehe dort.

Inhaltsverzeichnis

Variante 1[Bearbeiten | Quelltext bearbeiten]

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

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

Man legt einfach den Hebel auf dem Wiederhol-Befehlsblock um und der Speicher wird eingeschaltet.

Wiederholen

Mit dem Wiederhol-Befehlsblock wird die Zyklus-Funktion ständig am laufen gehalten

Ausschalten

Wenn der Hebel wieder in Ausgangsstellung gelegt wird, aktiviert eine Redstone-Fackel den Befehlsblock, der die Stopp-Funktion aufruft.



Befehlsblöcke mit Befehlen:



Variante 1: Start-Funktion
Wenn die Start-Funktion geladen wird, werden die Punktestand-Ziele und das Start-Feld erzeugt, welche für die Felderreihen von tragender Bedeutung sind.

  • Zeile 2 für den Zahlenwert eines Feldes.
  • Zeile 3 für die Position eines Feldes.
  • Zeile 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.
  • Zeile 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.
  • Zeile 10 Die Güterlore erhält auch den Zahlenwert null, wie bei der Positionsnummer, damit mit ihr ohne Komplikationen gearbeitet werden kann.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1start.mcfunction
# 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}]

# Eine Güterlore mit einer grünen Shulkerkiste wird als Startposition für die Felder gespawnt
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


Variante 1: Zyklus-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.

  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 12 Danach werden alle Felder die nicht der aktuellen ausgewählten Position entsprechen, von dem eventuell noch vorhandenen Leuchteffekt befreit.
  • Zeile 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.
  • Zeile 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.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1zyklus.mcfunction
# Die Güterlore wird dann vom Menü wieder zurück gesetzt und bekommt alle Etiketten gelöscht, in dem die Etikette neu gesetzt werden
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"]} } } ]}

# 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 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]

# Die Anzahl der belegten Slots, in der schwebende Güterlore mit Shulkerkiste, wird ausgelesen und nur wenn sie nicht übereinstimmt, wird die Funktion geladen
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
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 ausgewählte Feld erhält Leucht- und Partikeleffekte, um es sofort ausfindig machen zu können
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]


Variante 1: Menü-Funktion
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.

  • Zeile 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.
  • Zeile 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

  • Zeile 8 das Anheben der Feldanzahl,
  • Zeile 9 das Ausgeben der Feldanzahl oder
  • Zeile 10 für das Verringern der Feldanzahl.
  • Zeile 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,

  • Zeile 14 für das Aufsteigen der Feldposition,
  • Zeile 15 für das Ausgeben der aktuellen Feldposition oder
  • Zeile 16 für das Absteigen der Feldposition.
  • Zeile 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,

  • Zeile 20 für das Erhöhen des Wertes eines Feldes,
  • Zeile 21 für das Auslesen des aktuellen Feld-Wertes oder
  • Zeile 22 für das Verringern des Wertes eines Feldes.
  • Zeile 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.

  • Zeile 26 Hat man auf diesen Gegenstand geklickt, wird die Menü-Werte-Funktion geladen.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu.mcfunction
# 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 der Gegenstand für das Neuerzeugen aller Felder angeklickt wurde, wird die Felder-Erzeugen-Funktion geladen
execute as @s[nbt=!{Items:[{Slot:11b}]}] run function technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen

# 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
tag @s[nbt=!{Items:[{Slot:3b}]}] add EtiFeld.1FeldAnzahlAnheben
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 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
tag @s[nbt=!{Items:[{Slot:4b}]}] add EtiFeld.1PositionAufsteigen
tag @s[nbt=!{Items:[{Slot:13b}]}] add EtiFeld.1PositionAusgeben
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

# 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
tag @s[nbt=!{Items:[{Slot:5b}]}] add EtiFeld.1WertAnheben
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

# Wenn der Gegenstand für das Ausgeben aller Werte der Felder angeklickt wurde, wird die Werte-Funktion geladen
execute as @s[nbt=!{Items:[{Slot:15b}]},scores={PZFeld.1Pos=1..}] run function technik_wiki:direktzugriffsspeicher/v1menu_werte


Variante 1: Menü-Felder-Funktion
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.

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.

  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.

Möchte man sich die aktuelle Feldanzahl ausgeben lassen, so hat man auf die Option "Aktuelle Feldanzahl ausgeben" geklickt.

  • Zeile 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.

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.

  • Zeile 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.
  • Zeile 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.
  • Zeile 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.
  • Zeile 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.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_felder.mcfunction
# 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 ~

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

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

# Die aktuelle Position wird um eins erhöht
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

# Verringert den Wert der Variable um eins, falls sie mindestens noch den Wert eins hat
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

# Die aktuelle Feldanzahl wird ausgegeben
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]

# Danach wird die neue Anzahl Felder als Punktestand in der Güterlore gespeichert, welche somit immer die aktuelle Anzahl ihrer Felder gespeichert hat
execute at @s[tag=EtiFeld.1FeldAnzahlVerringern] store result score @s PZFeld.1Pos if entity @e[type=minecraft:armor_stand,name=ObjFeld.1Inhalt]
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
execute as @s[tag=EtiFeld.1FeldAnzahlVerringern] if score #VarFeld.1AktuellePosition PZFeld.1Pos > @s PZFeld.1Pos run scoreboard players remove #VarFeld.1AktuellePosition PZFeld.1Pos 1


Variante 1: Menü-Felder-Erzeugen-Funktion
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.

  • Zeile 2 Zuerst werden alle Rüstungsständer die als kleine schwebende Truhen zu sehen sind, gelöscht.
  • Zeile 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.
  • Zeile 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.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_felder_erzeugen.mcfunction
# 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} ]


Variante 1: Menü-Position-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.

Besitzt die Güterlore ein Etikett für das Anheben der Position, so werden nachfolgende Befehle ausgeführt.

  • Zeile 2 Die Variable der aktuellen Position wird um eins erhöht
  • Zeile 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.
  • Zeile 4 Zu guter letzt erhalten die Spieler um die Güterlore eine Nachricht wo sich der Zeiger mit seiner aktuellen Position befindet.

Wenn die Option "Aktuelle Position ausgeben" angeklickt wurde wird der nachfolgende Befehl aktiviert

  • Zeile 7 Von der Position der Güterlore aus wird in einem Umkreis von 25 Blöcken eine tellraw-Nachricht an alle Spieler ausgegeben.

Wenn man die Option "Zur niedrigeren Position" angeklickt hat, besitzt die Güterlore das entsprechende Etikett.

  • Zeile 10 Die Variable der aktuellen Position bekommt den Wert um eins verringert
  • Zeile 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.
  • Zeile 12 Nun erhalten alle Spieler um die Güterlore eine tellraw-Nachricht.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_position.mcfunction
# 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"} ]

# Gibt die aktuelle Position aus
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"} ]

# Gibt die neue verringerte Position aus
execute as @s[tag=EtiFeld.1PositionAbsteigen] run scoreboard players remove #VarFeld.1AktuellePosition PZFeld.1Pos 1
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"} ]


Variante 1: Menü-Wert-Funktion
Die Menü-Wert-Funktion ermöglicht es einem Feld einen Wert zuzuweisen und auch auszulesen.

Hat man auf "Wert erhöhen" geklickt, wird die Güterlore ein entsprechendes Etikett besitzen.

  • Zeile 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.
  • Zeile 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.
  • Zeile 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.

  • Zeile 7 Damit der Wert ausgegeben werden kann, wird der Wert des aktuell ausgewählten Feldes in eine Variable gespeichert.
  • Zeile 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.

  • Zeile 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.
  • Zeile 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.
  • Zeile 13 Von der Güterlore aus, wird den Spielern dann mit dem tellraw-Befehl die Nachricht mit dem verringerten Wert ausgegeben.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_wert.mcfunction
# Erhöht den Wert des aktuellen Feldes um eins
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"} ]

# Verringert den Wert des aktuellen Feldes
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
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"} ]


Variante 1: Menü-Werte-Funktion
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.

  • Zeile 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.
  • Zeile 3 Der Kopfteil der tellraw-Nachricht wird ausgegeben. Unter diesem werden später alle Felderpositionen angezeigt werden.
  • Zeile 4 Nachdem die Vorbedingungen in den davor liegenden Zeilen erfüllt sind, kann die Funktion technik_wiki:direktzugriffsspeicher/v1menu_werte_felder geladen werden.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_werte.mcfunction
# 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 1: Menü-Werte-Felder-Funktion
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.

  • Zeile 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.
  • Zeile 3 Der gespeicherte Wert wird anschließend im Umkreis von 25 Blöcken um die Güterlore über die tellraw-Nachricht ausgegeben.
  • Zeile 6 Nun wird die aktuell ausgewählte Position um eins erhöht.
  • Zeile 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.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1menu_werte_felder.mcfunction
# 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"} ]

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


Variante 1: Stopp-Funktion
Die Stopp-Funktion beendet alles, in dem sie die Punktestand-Ziele löscht und alle Felder entfernt.

  • Zeile 2 Das Punktestand-Ziel für den Feldwert wird gelöscht.
  • Zeile 3 Das Punktestand-Ziel für die Feldposition wird gelöscht.
  • Zeile 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.
  • Zeile 7 Alle Felder einschließlich der Benutzeroberfläche werden gelöscht.


Editor Icon.png technik_wiki:direktzugriffsspeicher/v1stopp.mcfunction
# Die Punktestand-Ziele werden wieder entfernt
scoreboard objectives remove PZFeld.1Wert
scoreboard objectives remove PZFeld.1Pos

# Alle bisher erzeugten Felder werden gelöscht
teleport @e[tag=EtiFeld.1Start,tag=EtiFeld.1AlleFelder] ~ -255 ~
kill @e[tag=EtiFeld.1AlleFelder]


Disambig color.svg