Benutzeroberfläche (Befehle)

**Benutzeroberflächen** (engl. GUI) ermöglichen dem Spieler über anklickbare Gegenstände eine Steuerung von Techniken. Im Spiel wird dies meist über ein Inventar gelöst, das Gegenstände an bestimmten Slots angeordnet hat und wenn Gegenstände entfernt werden ist das ein Signal für eine Ausführung von etwas.

## Variante 1

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
* Vorrichtungen
 * Vergleicher (Befehle)
* Inventar-Sensor (Befehle)
* Aliasdaten
* JSON-Text
* NBT

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

Diese Benutzeroberfläche wird durch eine schwebende Güterlore realisiert. Es wird hierbei geprüft ob Gegenstände angeklickt wurden und darauf folgt dann eine Text-Nachricht im Chat. Diese Nachricht könnte auch ein anderes Ereignis sein, das gestartet wird, wenn man einen der Gegenstände anklickt.

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

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

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

```
function benutzeroberflaeche:v1start

```

↑ 1.2:

```
function benutzeroberflaeche:v1zyklus

```

↑ 1.3:

```
function benutzeroberflaeche:v1stopp

```

Variante 1: **Start-Funktion**

Die Start-Funktion erstellt das Punkte-Ziel für das Zählen der Gegenstände und die Güterlore die die Benutzeroberfläche darstellt, wird erstellt.

```
# Ein Punkte-Ziel für Werte wird erstellt.
scoreboard objectives add PZBeOFl.1Wert dummy ["Benutzeroberfläche.1: ",{"text":"Werte","bold":true}]

# Eine Güterlore, die für die Benutzeroberfläche verwendet wird und die auf einem Rüstungsständer reitet, wird erstellt.
summon minecraft:armor\_stand ~ ~1 ~ {NoGravity:true,Small:true,Invisible:true,Marker:true,Tags:["EtiBeOFl.1Alle"],Passengers:[{id:"minecraft:chest\_minecart",NoGravity:true,Invulnerable:true,CustomName:'{"text":"Benutzeroberfläche","color":"dark\_purple","bold":true}',Tags:["EtiBeOFl.1Alle","EtiBeOFl.1GUI"]},{id:"minecraft:armor\_stand",NoGravity:true,Small:true,Invisible:true,Tags:["EtiBeOFl.1Alle"],CustomNameVisible:true,CustomName:'{"text":"Benutzeroberfläche","color":"dark\_purple","bold":true}'}]}

```

Variante 1: **Zyklus-Funktion**

Die Zyklus-Funktion liest jeden Tick aus, wie viele Slots in der Güterlore belegt sind, weicht dieser Wert von der Vorgabe ab, so wird die Menü-Funktion aufgerufen.

```
# Die Anzahl der belegten Slots, in der schwebende Güterlore, wird ausgelesen und nur wenn sie nicht übereinstimmt, wird die Funktion geladen.
execute as @e[type=minecraft:chest\_minecart,tag=EtiBeOFl.1GUI,sort=nearest,limit=1] store result score @s PZBeOFl.1Wert run data get entity @s Items
execute as @e[type=minecraft:chest\_minecart,tag=EtiBeOFl.1GUI,sort=nearest,limit=1] unless entity @s[scores={PZBeOFl.1Wert=11}] at @s run function benutzeroberflaeche:v1menu

```

Variante 1: **Menü-Funktion**

Die Menü-Funktion ermittelt zuerst, welcher Spieler die Gegenstände angeklickt hat und sendet danach eine Chat-Nachricht, in der der Gegenstand angegeben wird, der angeklickt wurde. Zuletzt wird die Güterlore wieder auf den Ursprungszustand gesetzt.

```
# Spieler die in dem Menü auf einen der Gegenstände geklickt haben, besitzen diese im eigenen Inventar. Genau diese werden aus dem Inventar gelöscht und so erhalten diese Spieler um die Güterlore einen Wert von eins. Falls man stattdessen mit Q den Gegenstand aus der Güterlore geworfen hat, wird der Drop gelöscht und der Spieler erhält ebenfalls den Wert eins, sofern er noch nichts anderes angeklickt hat.
execute as @a[distance=..5] store success score @s PZBeOFl.1Wert run clear @s #benutzeroberflaeche:v1menu{EigBeOFl.1Alle:true}
execute as @a[distance=..5,scores={PZBeOFl.1Wert=0}] store success score @s PZBeOFl.1Wert run kill @e[distance=..5,type=minecraft:item,nbt={Item:{tag:{EigBeOFl.1Alle:true} } }]

# Alle Spieler, die irgendwas angeklickt haben, erhalten eine Nachricht.
tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["Benutzeroberfläche.1:"]

# Je nach dem welchen Gegenstand angeklickt hat, wird dies erkannt, in dem geprüft ob der Slot noch belegt ist und sich auch genau eine Einheit des Gegenstands dort befindet. In jeden Fall wo das nicht zutrifft, wird den Spielern die etwas angeklickt haben, eine zum Gegenstand passende Nachricht ausgegeben.
execute if entity @s[nbt=!{Items:[{Slot:11b,Count:1b}]}] run tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["",{"text":"Bücherregal","color":"dark\_aqua","bold":true},{"text":" angeklickt","bold":true}]

execute if entity @s[nbt=!{Items:[{Slot:12b,Count:1b}]}] run tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["",{"text":"Truhe","color":"gold","bold":true},{"text":" angeklickt","bold":true}]

execute if entity @s[nbt=!{Items:[{Slot:13b,Count:1b}]}] run tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["",{"text":"Shulkerkiste","color":"green","bold":true},{"text":" angeklickt","bold":true}]

execute if entity @s[nbt=!{Items:[{Slot:14b,Count:1b}]}] run tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["",{"text":"Bett","color":"red","bold":true},{"text":" angeklickt","bold":true}]

execute if entity @s[nbt=!{Items:[{Slot:15b,Count:1b}]}] run tellraw @a[distance=..5,scores={PZBeOFl.1Wert=1}] ["",{"text":"Rakete","color":"dark\_purple","bold":true},{"text":" angeklickt","bold":true}]

# Damit die Güterlore ihr Menü wieder erhält, werden alle Gegenstände wieder hinzugefügt.
data merge entity @s {Items:[{Slot:11b,id:"minecraft:bookshelf",Count:1b,tag:{EigBeOFl.1Alle:true,display:{Name:'{"text":"Bücherregal","color":"dark\_aqua","bold":true}'} } },{Slot:12b,id:"minecraft:chest",Count:1b,tag:{EigBeOFl.1Alle:true,display:{Name:'{"text":"Truhe","color":"gold","bold":true}'} } },{Slot:13b,id:"minecraft:lime\_shulker\_box",Count:1b,tag:{EigBeOFl.1Alle:true,display:{Name:'{"text":"Shulkerkiste","color":"green","bold":true}'} } },{Slot:14b,id:"minecraft:red\_bed",Count:1b,tag:{EigBeOFl.1Alle:true,display:{Name:'{"text":"Bett","color":"red","bold":true}'} } },{Slot:15b,id:"minecraft:firework\_rocket",Count:1b,tag:{EigBeOFl.1Alle:true,display:{Name:'{"text":"Rakete","color":"dark\_purple","bold":true}'} } }]}

```

```
{
 "values": [
 "minecraft:bookshelf",
 "minecraft:chest",
 "minecraft:lime\_shulker\_box",
 "minecraft:red\_bed",
 "minecraft:firework\_rocket"
 ]
}

```

Variante 1: **Stopp-Funktion**

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

```
# Das Punkte-Ziel wird wieder entfernt.
scoreboard objectives remove PZBeOFl.1Wert

# Falls Spieler einen der Menü-Gegenstände noch besitzen, werden diese entfernt.
clear @a #benutzeroberflaeche:v1menu{EigBeOFl.1Alle:true}

# Damit die Güterlore beim späteren Entfernen nichts droppt, werden alle Gegenstände entfernt.
data remove entity @e[type=minecraft:chest\_minecart,tag=EtiBeOFl.1GUI,sort=nearest,limit=1] Items

# Gegenstände als Drop und die Güterlore werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigBeOFl.1Alle:true} } }] add EtiBeOFl.1Alle
kill @e[tag=EtiBeOFl.1Alle]

```

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