Benutzerschnittstelle (Befehle)

**Benutzerschnittstellen** (engl. TUI) ermöglichen dem Spieler über anklickbare Textteile von Chat-Nachrichten ein Ereignis zu starten oder eine Einstellung vorzunehmen.

## Variante 1

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
* Vorrichtungen
 * Speicherzelle (Befehle)
* Vergleicher (Befehle)
* Funktion
* JSON-Text
* NBT

* 1 Redstone-Fackel
* 2 Befehlsblock
* 1 Wiederhol-Befehlsblock

Diese Benutzerschnittstelle lässt im Chat-Bereich eine Liste an Optionen anzeigen. Diese Liste erscheint, sobald man den Stock mit Verzauberungsschimmer ausgewählt hat. Klickt man auf eine der Optionen, so wird ein Ereignis gestartet und die Chat-Optionen werden aktualisiert.

Einschalten
* Befehl 1.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion benutzerschnittstelle:v1start aktiviert.

Wiederholen
* Befehl 1.2 Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion benutzerschnittstelle:v1zyklus aktiv.

Ausschalten
* Befehl 1.3 der Befehlsblock löst die Funktion benutzerschnittstelle:v1stopp aus.

```
function benutzerschnittstelle:v1start

```

↑ 1.2:

```
function benutzerschnittstelle:v1zyklus

```

↑ 1.3:

```
function benutzerschnittstelle:v1stopp

```

Variante 1: **Start-Funktion**

Die Start-Funktion erzeugt das Punkte-Ziel und die Rüstungsständer. Sie sorgt ebenfalls dafür dass die Spieler den Stock mit Verzauberungsschimmer erhalten.

```
# Ein Punkte-Ziel wird erstellt.
scoreboard objectives add PZBeScSt.1Ausl trigger ["Benutzerschnittstelle.1: ",{"text":"Auslöser für Nachrichten","bold":true}]

# Die Variable wird mit dem Wert null ausgestattet.
scoreboard players set VarBeScSt.1Variable PZBeScSt.1Ausl 0

# Spieler im Umkreis von 15 Blöcken erhalten einen Stock mit Verzauberungsschimmer.
give @a[distance=..15] minecraft:stick{EigBeScSt.1Alle:true,EigBeScSt.1Stock:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Benutzerschnittstelle","color":"dark\_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um die Einstellungs-"','"Optionen anzeigen zu lassen."'] } }

# Ein Rüstungsständer mit einem zweiten huckepack, wird erzeugt.
summon minecraft:armor\_stand ~ ~1 ~ {Small:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"Westen","color":"gold","bold":true}',Tags:["EtiBeScSt.1Alle","EtiBeScSt.1Richtung"],Rotation:[90.0f,0.0f],Passengers:[{id:"minecraft:armor\_stand",Small:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"wahr","color":"green","bold":true}',Tags:["EtiBeScSt.1Alle","EtiBeScSt.1Logik"],Rotation:[90.0f,0.0f]}]}

```

Variante 1: **Zyklus-Funktion**

Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und ruft dann im Anschluss die Auslöser-Funktion auf.

```
# Wenn der Stock ausgewählt ist, erhält der jenige Spieler ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigBeScSt.1Stock:true} } }] add EtiBeScSt.1Ausgewaehlt

# Wenn der Spieler gerade zum Slot mit dem Stock gewechselt hat, wird ihm ein Wert gegeben, sodass im Anschluss die Funktion geladen wird.
scoreboard players set @a[tag=EtiBeScSt.1Ausgewaehlt,tag=!EtiBeScSt.1Auswahl] PZBeScSt.1Ausl -99

# Hat der Spieler den Stock ausgewählt und nicht den Wert null, so wird durch ihn die Auslöser-Funktion gestartet.
execute as @a[tag=EtiBeScSt.1Ausgewaehlt] unless entity @s[scores={PZBeScSt.1Ausl=0}] run function benutzerschnittstelle:v1ausloeser

# Wenn der Spieler den Stock gerade ausgewählt hat oder ihne gerade nicht mehr auswählt bekommt er das Etikett oder es wird entfernt.
tag @a[tag=EtiBeScSt.1Ausgewaehlt,tag=!EtiBeScSt.1Auswahl] add EtiBeScSt.1Auswahl
tag @a[tag=!EtiBeScSt.1Ausgewaehlt,tag=EtiBeScSt.1Auswahl] remove EtiBeScSt.1Auswahl

# Das Etikett für die Auswahl des Stockes wird wieder entfernt.
tag @a[tag=EtiBeScSt.1Ausgewaehlt] remove EtiBeScSt.1Ausgewaehlt

```

Variante 1: **Auslöser-Funktion**

Die Auslöser-Funktion gibt den Spielern im Chat eine Liste an Optionen aus und führt die angeklickten Optionen aus.

```
# Wenn der Spieler auf die Logik-Option geklickt hat, wird der Wahrheitswert entsprechend gesetzt. Der wahrheitswert wird im Namen des Rüstungsständer gespeichert.
execute if entity @s[scores={PZBeScSt.1Ausl=1}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Logik,sort=nearest,limit=1] {CustomName:'{"text":"wahr","color":"green","bold":true}'}
execute if entity @s[scores={PZBeScSt.1Ausl=-1}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Logik,sort=nearest,limit=1] {CustomName:'{"text":"falsch","color":"red","bold":true}'}

# Wenn der Spieler eine der Richtungs-Optionen angeklickt hat, wird die entsprechende Richtung eingestellt.
execute if entity @s[scores={PZBeScSt.1Ausl=11}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Richtung,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Norden"}',Rotation:[180.0f,0.0f]}
execute if entity @s[scores={PZBeScSt.1Ausl=12}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Richtung,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Osten"}',Rotation:[270.0f,0.0f]}
execute if entity @s[scores={PZBeScSt.1Ausl=13}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Richtung,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"blue","text":"Süden"}',Rotation:[0.0f,0.0f]}
execute if entity @s[scores={PZBeScSt.1Ausl=14}] run data merge entity @e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Richtung,sort=nearest,limit=1] {CustomName:'{"bold":true,"color":"gold","text":"Westen"}',Rotation:[90.0f,0.0f]}

# Wenn der Spieler auf die Variablen-Option geklickt hat, wird die Variable entweder um eins erhöht oder verringert.
execute if entity @s[scores={PZBeScSt.1Ausl=2}] run scoreboard players add VarBeScSt.1Variable PZBeScSt.1Ausl 1
execute if entity @s[scores={PZBeScSt.1Ausl=-2}] run scoreboard players remove VarBeScSt.1Variable PZBeScSt.1Ausl 1

# Dem Spieler wird im Chat die Optionen-Liste angezeigt, mit Logik-, Richtungs- und Variablen-Option.
tellraw @s ["Benutzerschnittstelle.1: ",{"text":"\nlogik = ","bold":true},{"text":"wahr","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für wahr"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 1"} },{"text":"\nlogik = ","bold":true},{"text":"falsch","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für falsch"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set -1"} },{"text":"\nlogik == ","bold":true},{"entity":"@e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Logik,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"\nrichtung = ","bold":true},{"text":"Norden","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Norden"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 11"} },{"text":"\nrichtung = ","bold":true},{"text":"Osten","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Osten"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 12"} },{"text":"\nrichtung = ","bold":true},{"text":"Süden","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Süden"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 13"} },{"text":"\nrichtung = ","bold":true},{"text":"Westen","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Westen"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 14"} },{"text":"\nrichtung == ","bold":true},{"entity":"@e[type=minecraft:armor\_stand,tag=EtiBeScSt.1Richtung,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"\nvariable = ","bold":true},{"text":"variable + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Variable + 1"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set 2"} },{"text":"\nvariable = ","bold":true},{"text":"variable - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show\_text","value":{"text":"Tippe für Variable - 1"} },"clickEvent":{"action":"run\_command","value":"/trigger PZBeScSt.1Ausl set -2"} },{"text":"\nvariable == ","bold":true},{"score":{"name":"VarBeScSt.1Variable","objective":"PZBeScSt.1Ausl"},"color":"dark\_purple","bold":true} ]

# Damit der Spieler nach dem anklicken der Optionen erneut die Berechtigung erhält um nochmals eine Option aktivieren zu können.
scoreboard players enable @s PZBeScSt.1Ausl
scoreboard players set @s PZBeScSt.1Ausl 0

```

Variante 1: **Stopp-Funktion**

Die Stopp-Funktion löscht das Punkte-Ziel wieder und Gegenstände und die Rüstungsständer werden entfernt.

```
# Das Punkte-Ziel wird wieder entfernt.
scoreboard objectives remove PZBeScSt.1Ausl

# Das Etikett zur Auswahl des Stockes wird wieder entfernt, falls es vorhanden ist.
tag @a[tag=EtiBeScSt.1Auswahl] remove EtiBeScSt.1Auswahl

# Der Stock wird entfernt.
clear @a minecraft:stick{EigBeScSt.1Alle:true}

# Falls der Stock auf den Boden geworfen wurde, wird er entfernt. Die beiden Rüstungsständer werden ebenfalls entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigBeScSt.1Alle:true} } }] add EtiBeScSt.1Alle
kill @e[tag=EtiBeScSt.1Alle]

```

*Benutzeroberfläche* => Befehle;
*Befehle-System* => Befehle;