Benutzeroberfläche (Befehle)

Aus Technik Wiki
Version vom 20. September 2020, 16:20 Uhr von Nethonos (Diskussion | Beiträge) (Neu erstellt: Variante 1 hinzugefügt.)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Gruppe: Grid Klebriger Kolben.png
Anlagen

Grid Roter Sand blass.png mit Mechaniken

Grid Redstone blass.png mit Redstone
                Hier:
Grid Befehlsblock.png mit Befehlen
Noch in keiner
Download-Welt enthalten.
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.

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.

Inhaltsverzeichnis

Variante 1

Benutzeroberfläche (Befehle) Bild 1.1.png Benutzeroberfläche (Befehle) Bild 1.2.png

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.

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.

Editor Icon.png benutzeroberflaeche:v1start.mcfunction
# 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 ließt 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.

Editor Icon.png benutzeroberflaeche:v1zyklus.mcfunction
# 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 startet danach eine Chat-Nachricht, in der der Gegenstand angegeben wird, der angeklickt wurde. Zuletzt die wird die Güterlore wieder auf den Ursprungszustand gebracht.

Editor Icon.png benutzeroberflaeche:v1menu.mcfunction
# 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}'} } }]}
JSON Icon.png benutzeroberflaeche:v1menu.json
{
  "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 die Gegenstände und die Güterlore werden entfernt.

Editor Icon.png benutzeroberflaeche:v1stopp.mcfunction
# 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]