Inventar-Sensor (Befehle)

Aus Technik Wiki
Wechseln zu: Navigation, Suche
Gruppe: Grid Kolben.png
Vorrichtungen

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

Ein Inventar-Sensor kann genutzt werden um in Inventaren bestimmte Gegenstände und auch deren Stapelmengen zu erfassen. Ebenfalls lässt sich damit das Öffnen von Inventaren messen oder auch das Ändern der Menge der Gegenständen darin. Ein Inventar-Sensor kann auch dazu genutzt werden nach ganz bestimmten oder beliebig einstellbaren Gegenständen zu suchen.

Variante 1[Bearbeiten | Quelltext bearbeiten]

Inventar-Sensor (Befehle) Bild 1.1.png Inventar-Sensor (Befehle) Bild 1.2.png

Dieser Inventar-Sensor erkennt, ob man einen bestimmten Gegenstand im Inventar liegen hat. In dem Fall, ob eine Diamantaxt im Inventar liegt. Je nach dem ob sie vorhanden oder nicht vorhanden ist, wird eine entsprechende Titel-Nachricht über der Schnellleiste ausgegeben.

Einschalten
  • Befehl 1.1 Spieler im Umkreis von 25 Blöcken erhalten eine Diamantaxt mit einem Beschreibungstext. Diesen kann man lesen, wenn man das Inventar mit E öffnet und mit der Maus über diese fährt.
Wiederholen
  • Befehl 1.2 Spieler die eine Diamantaxt im Inventar besitzen, erhalten eine positive Titel-Nachricht.
  • Befehl 1.3 Spieler die keine Diamantaxt im Inventar besitzen, erhalten eine negative Titel-Nachricht.
Ausschalten
  • Befehl 1.4 Die Diamantaxt wird bei allen Spielern in deren Inventaren gesucht und gelöscht.
  • Befehl 1.5 Falls die Diamantaxt auf den Boden geworfen wurde, wird sie durch ihre spezielle Eigenschaft erkannt und anschließend gelöscht.

Befehlsblöcke mit Befehlen:
give @a[distance=..25] minecraft:diamond_axe{EigInvS.1Alle:true,display:{Lore:['"Dieser Gegenstand wird erfasst"'] } }


title @a[distance=..25,nbt={Inventory:[{id:"minecraft:diamond_axe"} ] }] actionbar ["",{"text":"Diamantaxt im Inventar == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true} ]
title @a[distance=..25,nbt=!{Inventory:[{id:"minecraft:diamond_axe"} ] }] actionbar ["",{"text":"Diamantaxt im Inventar == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true} ]


clear @a minecraft:diamond_axe{EigInvS.1Alle:true}
kill @e[type=minecraft:item,nbt={Item:{tag:{EigInvS.1Alle:true} } }]

Variante 2[Bearbeiten | Quelltext bearbeiten]

Inventar-Sensor (Befehle) Bild 2.1.png Inventar-Sensor (Befehle) Bild 2.2.png

Mit diesem Inventar-Sensor ist es möglich, die Anzahl eines bestimmten Gegenstand im Inventar des Spielers zu bestimmen. In diesem Fall wird die Gesamtzahl von Redstone-Staub im Inventar ausgelesen und über der Schnellleiste als Titel-Nachricht ausgegeben.

Einschlaten
  • Befehl 2.1 Ein Punkte-Ziel wird erstellt, dass für das Speichern der Stapelzahl verwendet wird.
  • Befehl 2.2 Spielern im Umkreis von 25 Blöcken erhalten 128 Redstone-Staub, welcher sich auf zwei Slots verteilen wird.
Wiederholen
  • Befehl 2.3 Im Umkreis der Befehlsquelle werden Spieler in max. 25 Metern Entfernung ausgewählt. Diese Spieler speichern den Wert des clear-Befehls in den Punktestand von sich. Wenn der clear-Befehl null Einheiten löschen soll, wird stattdessen die Anzahl der zu löschenden Gegenstände ausgegeben.
  • Befehl 2.4 Spieler die null oder mehr Gegenstände vom Redstone-Staub besitzen, wird eine Titel-Nachricht ausgegeben die den aktuellen Wert also die Stapel-Anzahl anzeigt.
ausschalten
  • Befehl 2.5 Das Punkte-Ziel wird wieder entfernt und somit auch von allen Spielern deren Punktestände.
  • Befehl 2.6 Von allen Spielern wird der Redstone-Staub mit der speziellen Eigenschaft wieder gelöscht.
  • Befehl 2.7 Falls man den Redstone-Staub auf den Boden geschmissen hatte, wird auch dieser erkannt und gelöscht.

Befehlsblöcke mit Befehlen:
scoreboard objectives add PZInvS.2Anz dummy ["Inventar-Sensor.2: ",{"text":"Anzahl","bold":true}]
give @a[distance=..25] minecraft:redstone{EigInvS.2Alle:true,display:{Lore:['"Dieser Gegenstand wird erfasst"'] } } 128


execute as @a[distance=..25] store result score @s PZInvS.2Anz run clear @s minecraft:redstone 0
execute as @a[distance=..25,scores={PZInvS.2Anz=0..}] run title @s actionbar ["",{"text":"Redstone im Inventar == ","color":"gray","bold":true},{"score":{"name":"@s","objective":"PZInvS.2Anz"},"color":"dark_purple","bold":true} ]


scoreboard objectives remove PZInvS.2Anz
clear @a minecraft:redstone{EigInvS.2Alle:true}
kill @e[type=minecraft:item,nbt={Item:{tag:{EigInvS.2Alle:true} } }]

Variante 3[Bearbeiten | Quelltext bearbeiten]

Inventar-Sensor (Befehle) Bild 3.1.png Inventar-Sensor (Befehle) Bild 3.2.png

Dieser Inventar-Sensor erfasst ob sich ein Gegenstand innerhalb des Inventars bewegt hat oder aus dem Inventar entfernt wurde. Das Inventar wurde in vier Bereiche eingeteilt: Zweithand, Schnellleiste, Rüstungsslots und Inventarbereich ohne Schnellleiste. Jedes mal wenn man einen Gegenstand aus einen der Bereiche entfernt oder hinzufügt, wird dies erfasst und in einer Titel-Nachricht ausgegeben.

Einschalten
  • Befehl 3.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion inventar-sensor:v3start aktiviert.
Wiederholen
Ausschalten

Befehlsblöcke mit Befehlen:



Variante 3: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele die die Slot-Anzahl in den Inventar-Bereichen zählt und es werden alle verschiedene Gegenstände gegeben die für alle Bereiche des Inventars von Bedeutung sind.

Editor Icon.png inventar-sensor:v3start.mcfunction
# Für die verschiedenen Inventar-Bereiche werden drei Punkte-Ziele  erstellt.
scoreboard objectives add PZInvS.3Ruest dummy ["Inventar-Sensor.3: ",{"text":"Anzahl der Rüstungs-Slots","bold":true}]
scoreboard objectives add PZInvS.3Schnell dummy ["Inventar-Sensor.3: ",{"text":"Anzahl der Schnellleisten-Slots","bold":true}]
scoreboard objectives add PZInvS.3Slots dummy ["Inventar-Sensor.3: ",{"text":"Anzahl der Slots","bold":true}]

# Spielern im Umkreis von 15 Blöcken wird allerlei möglicher Kram gegeben, der für alle Inventar-Bereiche benutzt werden kann.
give @a[distance=..15] minecraft:chiseled_quartz_block{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 16
give @a[distance=..15] minecraft:golden_chestplate{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 1
give @a[distance=..15] minecraft:stone_bricks{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 32
give @a[distance=..15] minecraft:red_nether_brick_stairs{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 128
give @a[distance=..15] minecraft:oak_boat{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 2
give @a[distance=..15] minecraft:cactus{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 16
give @a[distance=..15] minecraft:shield{EigInvS.3Alle:true,display:{Lore:['"Bewge den Gegenstand im Inventar"','"oder droppe ihn mit Q"']} } 1

Variante 3: Zyklus-Funktion
Die Zyklus-Funktion prüft in erster Linie ob der Fortschritt für das Ändern des Inventares erzielt wurde und je nach Ausgangslage wird dann die Inventar-Funktion geladen.

Editor Icon.png inventar-sensor:v3zyklus.mcfunction
# Wenn der Spieler im Inventar Gegenstände verschoben oder gedroppt hat, besitzt er den Fortschritt und daraufhin wird seine Anzahl an belegter Slots ausgelesen und in einen Punktestand gespeichert.
execute as @a[advancements={inventar-sensor:v3inventar_geaendert=true}] store result score @s PZInvS.3Slots run data get entity @s Inventory

# Wenn sein Inventar komplett leer ist, erhält er eine Nachricht genau über diesen Umstand.
tellraw @a[advancements={inventar-sensor:v3inventar_geaendert=true},scores={PZInvS.3Slots=0}] ["Inventar-Sensor.3:\n",{"text":"Inventar leer == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]

# Falls das Inventar nicht leer ist, wird die Inventar-Funktion durch ihn aufgerufen.
execute as @a[advancements={inventar-sensor:v3inventar_geaendert=true},scores={PZInvS.3Slots=1..}] run function inventar-sensor:v3inventar

#Jeder der den Fortschritt besitzt, bekommt den Fortschritt entfernt.
advancement revoke @a[advancements={inventar-sensor:v3inventar_geaendert=true}] only inventar-sensor:v3inventar_geaendert
JSON Icon.png inventar-sensor:v3inventar_geaendert.json
{
  "criteria": {
    "Inventar": {
      "trigger": "minecraft:inventory_changed"
    }
  }
}

Variante 3: Inventar-Funktion
Die Inventar-Funktion ließt von allen vier Inventar-Bereichen die Anzahl der belegten Slots aus und errechnet sich dann, welcher der Bereiche sich geändert hat und gibt dann dazu entsprechende Nachrichten aus.

Editor Icon.png inventar-sensor:v3inventar.mcfunction
# Falls die Zweithand belegt war, bekommt der Spieler dafür ein Etikett. Das für die Zweithand wird wieder entfernt.
tag @s[tag=EtiInvS.3Zweithand] add EtiInvS.3ZweithandWarBelegt
tag @s[tag=EtiInvS.3Zweithand] remove EtiInvS.3Zweithand

# Nur wenn der Spieler etwas in der Zweithand hat, bekommt er das Etikett dafür.
tag @s[nbt={Inventory:[{Slot:-106b}]}] add EtiInvS.3Zweithand

# Je nach dem ob der Spieler vorher was hatte und jetzt nicht oder nichts besaß und jetzt was hat, so bekommt er ein Etikett.
tag @s[tag=EtiInvS.3Zweithand,tag=!EtiInvS.3ZweithandWarBelegt] add EtiInvS.3Geaendert
tag @s[tag=!EtiInvS.3Zweithand,tag=EtiInvS.3ZweithandWarBelegt] add EtiInvS.3Geaendert

# Wenn sich der Zweithand-Slot geändert hat, bekommt der Spieler eine Nachricht, entsprechend wie der Zustand des Zweithandslots ist.
tellraw @s ["Inventar-Sensor.3:"]
tellraw @s[tag=EtiInvS.3Geaendert,tag=EtiInvS.3Zweithand] ["",{"text":"Zweithandfeld geändert(Slot) == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
tellraw @s[tag=EtiInvS.3Geaendert,tag=!EtiInvS.3Zweithand] ["",{"text":"Zweithandfeld geändert(Slot) == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Das Etikett wird wieder entfernt.
tag @s[tag=EtiInvS.3ZweithandWarBelegt] remove EtiInvS.3ZweithandWarBelegt

# Die belegten Rüstungsslots werden zwischengespeichert.
scoreboard players operation VarInvS.3Slots PZInvS.3Ruest = @s PZInvS.3Ruest

# Anschließend wird die neue Anzahl der Rüstungsslots ausgelesen.
execute store success score @s PZInvS.3Ruest if entity @s[nbt={Inventory:[{Slot:100b}]}]
scoreboard players add @s[nbt={Inventory:[{Slot:101b}]}] PZInvS.3Ruest 1
scoreboard players add @s[nbt={Inventory:[{Slot:102b}]}] PZInvS.3Ruest 1
scoreboard players add @s[nbt={Inventory:[{Slot:103b}]}] PZInvS.3Ruest 1

# Falls die alte und neue Anzahl der Rüstungsslots nicht übereinstimmt, wurde was daran geändert und der Spieler erhält eine Nachricht.
execute unless score VarInvS.3Slots PZInvS.3Ruest = @s PZInvS.3Ruest run tellraw @s ["",{"text":"Rüstungsfelder geändert(Slots) == ","color":"gray","bold":true},{"score":{"name":"@s","objective":"PZInvS.3Ruest"},"color":"dark_purple","bold":true}]

# Die alte Anzahl der belegten Schnellleistenslots wird zwischen gespeichert.
scoreboard players operation VarInvS.3Slots PZInvS.3Schnell = @s PZInvS.3Schnell

# Die neue Anzahl der Schnellleistenslots wird ermittelt.
execute store success score @s PZInvS.3Schnell if entity @s[nbt={Inventory:[{Slot:0b}]}]
scoreboard players add @s[nbt={Inventory:[{Slot:1b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:2b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:3b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:4b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:5b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:6b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:7b}]}] PZInvS.3Schnell 1
scoreboard players add @s[nbt={Inventory:[{Slot:8b}]}] PZInvS.3Schnell 1

# Falls die alte und neue Anzahl unterschiedlich ist, wird eine Nachricht ausgegeben.
execute unless score VarInvS.3Slots PZInvS.3Schnell = @s PZInvS.3Schnell run tellraw @s ["",{"text":"Schnellleiste geändert(Slots) == ","color":"gray","bold":true},{"score":{"name":"@s","objective":"PZInvS.3Schnell"},"color":"dark_purple","bold":true}]

# Falls sich nichts in den drei Inventar-Bereichen geändert hat, wird ein Etikett dafür vergeben.
execute if entity @s[tag=!EtiInvS.3Geaendert] if score VarInvS.3Slots PZInvS.3Ruest = @s PZInvS.3Ruest if score VarInvS.3Slots PZInvS.3Schnell = @s PZInvS.3Schnell run tag @s add EtiInvS.3Inventar

# Alle Slots der anderen Inventar-Bereiche werden abgezogen um die Anzahl der Slots im Inventar ohne Schnellleiste zu ermitteln.
scoreboard players remove @s[tag=EtiInvS.3Inventar,tag=EtiInvS.3Zweithand] PZInvS.3Slots 1
execute if entity @s[tag=EtiInvS.3Inventar] run scoreboard players operation @s PZInvS.3Slots -= @s PZInvS.3Ruest
execute if entity @s[tag=EtiInvS.3Inventar] run scoreboard players operation @s PZInvS.3Slots -= @s PZInvS.3Schnell

# Je nach übrigen Slots wird eine entsprechende Nachricht ausgeben.
tellraw @s[tag=EtiInvS.3Inventar,scores={PZInvS.3Slots=1..}] ["",{"text":"Inventar ohne Schnellleiste geändert(Slots) == ","color":"gray","bold":true},{"score":{"name":"@s","objective":"PZInvS.3Slots"},"color":"dark_purple","bold":true}]
tellraw @a[tag=EtiInvS.3Inventar,scores={PZInvS.3Slots=0}] ["",{"text":"Inventar leer == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]

# Die Etiketten werden wieder entfernt.
tag @s[tag=EtiInvS.3Inventar] remove EtiInvS.3Inventar
tag @s[tag=EtiInvS.3Geaendert] remove EtiInvS.3Geaendert

Variante 3: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele, den Fortschritt, die Gegenstände und die Drops wieder.

Editor Icon.png inventar-sensor:v3stopp.mcfunction
# Die Punkte-Ziele werden wieder entfernt.
scoreboard objectives remove PZInvS.3Ruest
scoreboard objectives remove PZInvS.3Schnell
scoreboard objectives remove PZInvS.3Slots

# Der Fortschritt für das Ändern des Inventars wird wieder genommen.
advancement revoke @a[advancements={inventar-sensor:v3inventar=true}] only inventar-sensor:v3inventar

# Alle Gegenstände mit der bestimmten Eigenschaft werden wieder entfernt.
clear @a minecraft:chiseled_quartz_block{EigInvS.3Alle:true}
clear @a minecraft:golden_chestplate{EigInvS.3Alle:true}
clear @a minecraft:stone_bricks{EigInvS.3Alle:true}
clear @a minecraft:red_nether_brick_stairs{EigInvS.3Alle:true}
clear @a minecraft:oak_boat{EigInvS.3Alle:true}
clear @a minecraft:cactus{EigInvS.3Alle:true}
clear @a minecraft:shield{EigInvS.3Alle:true}

# Falls man Gegenstände gedroppt hat, werden sie ebenfalls entfernt.
kill @e[type=minecraft:item,nbt={Item:{tag:{EigInvS.3Alle:true} } }]

Variante 4[Bearbeiten | Quelltext bearbeiten]

Inventar-Sensor (Befehle) Bild 4.1.png Inventar-Sensor (Befehle) Bild 4.2.png

Mit diesem Inventar-Sensor kann nach einem beliebigen Gegenstand gesucht werden und optional auch nach dessen Stapel-Menge. Dazu erhält man einen Stock mit Verzauberungsschimmer. Wählt man diesen aus und droppt genau einen Gegenstand per Q so wird bei allen Spielern, die den Stock ausgewählt haben, nach diesem Gegenstand gesucht. Droppt man hingegen einen Stapel mit mindestens zwei Einheiten, so wird auch nach der genauen Stapel-Menge gesucht. Nur wenn die Menge übereinstimmt, entspricht das einem Erfolg, ansonsten nicht.

Einschalten
  • Befehl 4.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion inventar-sensor:v4start aktiviert.
Wiederholen
Ausschalten

Befehlsblöcke mit Befehlen:



Variante 4: Start-Funktion
Die Start-Funktion erzeugt ein Punkte-Ziel fürs Droppen von Gegenständen und legt ein NBT-Speicher an. Ebenfalls werden einige Gegenstände gegeben, die man als Such-Gegenstände einsetzen kann.

Editor Icon.png inventar-sensor:v4start.mcfunction
# Das Droppen der Gegenstände wird mit diesem Punkte-Ziel erkannt.
scoreboard objectives add PZInvS.4Drop minecraft.custom:minecraft.drop ["Inventar-Sensor.4: ",{"text":"Droppen","bold":true}]

# Ein NBT-Speicher wird angelegt.
data merge storage inventar-sensor:v4daten {EigInvS.4ID:'{"text":"falsch","color":"red","bold":true}',EigInvS.4Stapel:'{"text":"falsch","color":"red","bold":true}',EigInvS.4SucheDrop:{},EigInvS.4Drop:{},EigInvS.4Inventar:[]}

# Spieler im Umkreis von 15 Blöcken, erhalten einen verzauberten Stock.
give @a[distance=..15] minecraft:stick{EigInvS.4Alle:true,EigInvS.4Sensor:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Inventar-Sensor","color":"dark_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um nach einen Gegenstand"','"zu testen."'] } }

# Gegenstände werden gegeben die man für den Sensor nutzen kann.
give @a[distance=..15] minecraft:mossy_stone_brick_wall{EigInvS.4Alle:true,display:{Lore:['"Wähle den Sensor aus und"','"droppe den Gegenstand mit Q"','"um das Inventar nach"','"diesem Gegenstand suchen zu lassen"']} } 16
give @a[distance=..15] minecraft:stone_bricks{EigInvS.4Alle:true,display:{Lore:['"Wähle den Sensor aus und"','"droppe den Gegenstand mit Q"','"um das Inventar nach"','"diesem Gegenstand suchen zu lassen"']} } 16
give @a[distance=..15] minecraft:wither_rose{EigInvS.4Alle:true,display:{Lore:['"Wähle den Sensor aus und"','"droppe den Gegenstand mit Q"','"um das Inventar nach"','"diesem Gegenstand suchen zu lassen"']} } 16
give @a[distance=..15] minecraft:red_mushroom_block{EigInvS.4Alle:true,display:{Lore:['"Wähle den Sensor aus und"','"droppe den Gegenstand mit Q"','"um das Inventar nach"','"diesem Gegenstand suchen zu lassen"']} } 16
give @a[distance=..15] minecraft:lily_pad{EigInvS.4Alle:true,display:{Lore:['"Wähle den Sensor aus und"','"droppe den Gegenstand mit Q"','"um das Inventar nach"','"diesem Gegenstand suchen zu lassen"']} } 16

# Den Spielern wird eine Text-Nachricht ausgeben, die erklärt wie man den Sensor benutzen kann.
tellraw @a[distance=..15] ["Inventar-Sensor.4:\n",{"text":"Wähle in der Schnellleiste den Stock mit dem Namen 'Inventar-Sensor' aus und öffne mit E das Inventar und droppe mit Q einen beliebigen Gegenstand um bei allen Spielern, mit Sensor ausgewählt, nach diesem Gegenstand zu suchen. Beim Droppen von ganzen Stapeln, wird auch der Stapel getestet.","bold":true}]

Variante 4: Zyklus-Funktion
Die Zyklus-Funktion regelt die Suche nach einem bestimmten Gegenstand und ruft die Inventar-Funktion auf, sofern man den Stock ausgewählt hat.

Editor Icon.png inventar-sensor:v4zyklus.mcfunction
# Wenn Spieler den verzauberten Stock auswählen, erhalten sie ein Etikett.
tag @a[distance=..25,nbt={SelectedItem:{id:"minecraft:stick",tag:{EigInvS.4Sensor:true} } }] add EtiInvS.4InventarSensor

# Wenn die Spieler das Etikett besitzen und dabei einen Gegenstand droppen, so wird dessen Stapelzahl in seinen Punktestand wie auch in eine Variable gespeichert.
execute at @a[distance=..25,tag=EtiInvS.4InventarSensor,scores={PZInvS.4Drop=1..}] as @e[distance=..2,type=minecraft:item,sort=nearest,limit=1] store result score @s PZInvS.4Drop store result score VarInvS.4DropStapel PZInvS.4Drop run data get entity @s Item.Count

# Danach wird versucht die ID des gedroppten Gegenstands in den NBT-Speicher zu speichern. Falls die ID bereits dort gespeichert ist, wird der Befehl fehlschlagen und dies wird per Variable ebenfalls gespeichert.
execute at @a[distance=..25,tag=EtiInvS.4InventarSensor,scores={PZInvS.4Drop=1..}] store success score VarInvS.4Ungleich PZInvS.4Drop run data modify storage inventar-sensor:v4daten "EigInvS.4SucheDrop" set from entity @e[distance=..2,type=minecraft:item,scores={PZInvS.4Drop=1..},sort=nearest,limit=1] Item

# Der fallen gelassene Drop wird von den Eigenschaften so geändert, dass er sofort wieder vom Spieler aufgehoben wird.
execute at @a[distance=..25,tag=EtiInvS.4InventarSensor,scores={PZInvS.4Drop=1..}] run data merge entity @e[distance=..2,type=minecraft:item,sort=nearest,limit=1] {PickupDelay:0s}

# Nur wenn der fallen gelassene Drop nicht schon bereits im NBT-Speicher vorlag, wird in einem Umkreis von 25 Blöcken bei allen Spielern die Inventar-Funktion aufgerufen, wenn sie den Stock ausgewählt haben.
execute if score VarInvS.4Ungleich PZInvS.4Drop matches 1 as @a[distance=..25,tag=EtiInvS.4InventarSensor] run function inventar-sensor:v4inventar

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiInvS.4InventarSensor] remove EtiInvS.4InventarSensor

# Falls man etwas gedroppt hat, wird der Punktestand wieder auf null gesetzt.
scoreboard players set @a[scores={PZInvS.4Drop=1..}] PZInvS.4Drop 0

Variante 4: Inventar-Funktion
Die Inventar-Funktion speichert das Spieler-Inventar in den NBT-Speicher und ruft die Slot-Funktion auf, mit deren Hilfe festgestellt wird, ob sich der gesuchte Gegenstand im Inventar befindet.

Editor Icon.png inventar-sensor:v4inventar.mcfunction
# Die Stapel-Variable wird auf null gesetzt und das Inventar des Spielers wird in den NBT-Speicher geladen. Ebenfalls wird die Suche der ID als falsch markiert, sodass sie nur dann auf wahr steht, wenn sie später gefunden wird.
scoreboard players set VarInvS.4Stapel PZInvS.4Drop 0
data modify storage inventar-sensor:v4daten "EigInvS.4Inventar" set from entity @s Inventory
data merge storage inventar-sensor:v4daten {EigInvS.4ID:'{"text":"falsch","color":"red","bold":true}'}

# Die Slot-Funktion wird aufgerufen.
function inventar-sensor:v4slots

# Falls die stapel-Werte mit berücksichtigt werden sollen und wenn die vorgebene Stapel-Zahl und die gefundene Stapel-Zahl übereinstimmt, wird entsprechend der NBT-Speicher aktualisiert und auch umgekehrt, wenn sie nicht übereinstimmen.
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 2.. if score VarInvS.4DropStapel PZInvS.4Drop = VarInvS.4Stapel PZInvS.4Drop run data merge storage inventar-sensor:v4daten {EigInvS.4Stapel:'{"text":"wahr","color":"green","bold":true}'}
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 2.. unless score VarInvS.4DropStapel PZInvS.4Drop = VarInvS.4Stapel PZInvS.4Drop run data merge storage inventar-sensor:v4daten {EigInvS.4Stapel:'{"text":"falsch","color":"red","bold":true}'}

# Wenn nur nach der ID und nicht nach der Stapel-Zahl gesucht wird, erhält der Spieler +ber der Schnellleiste die ID-Suche.
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 1 run title @s actionbar ["",{"storage":"inventar-sensor:v4daten","nbt":"\"EigInvS.4SucheDrop\".id","color":"dark_purple","bold":true},{"text":" in Inventar == ","color":"gray","bold":true},{"storage":"inventar-sensor:v4daten","nbt":"\"EigInvS.4ID\"","interpret":true}]

# Wenn auch die Stapel-Zahl beachtet werden soll, wird auch diese über der Schnellleiste mit angegeben.
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 2.. run title @s actionbar ["",{"storage":"inventar-sensor:v4daten","nbt":"\"EigInvS.4SucheDrop\".id","color":"dark_purple","bold":true},{"text":" in Inventar == ","color":"gray","bold":true},{"storage":"inventar-sensor:v4daten","nbt":"\"EigInvS.4ID\"","interpret":true},{"text":" Stapel(","color":"gray","bold":true},{"score":{"name":"VarInvS.4DropStapel","objective":"PZInvS.4Drop"},"color":"dark_purple","bold":true},{"text":") == ","color":"gray","bold":true},{"storage":"inventar-sensor:v4daten","nbt":"\"EigInvS.4Stapel\"","interpret":true}]

Variante 4: Slot-Funktion
Die Slot-Funktion schaut sich immer den ersten Gegenstand im Inventar an und vergleicht ihn. Dabei wird dann der erste Gegenstand aus der Liste entfernt, sodass alle anderen Gegenstände aufrücken und beim nächsten Selbstaufruf nach und nach dran kommen.

Editor Icon.png inventar-sensor:v4slots.mcfunction
# Der erste Slot des gepseicherten Inventars im NBT-Speicher wird in eine separaten Stelle gespeichert und im Inventar gelöscht.
data modify storage inventar-sensor:v4daten "EigInvS.4Drop" set from storage inventar-sensor:v4daten "EigInvS.4Inventar"[0]
data remove storage inventar-sensor:v4daten "EigInvS.4Inventar"[0]

# Nun wird die gesuchte ID mit der vorhanden ID verglichen, in dem die gesuchte in die vorhandene gespeichert wird. Wenn das gelingt, war es eine andere ID, wenn es nicht gelingt, ist es die gesuchte ID. Beides wird in einer Variable gespeichert.
execute store success score VarInvS.4NichtGefunden PZInvS.4Drop run data modify storage inventar-sensor:v4daten "EigInvS.4Drop".id set from storage inventar-sensor:v4daten "EigInvS.4SucheDrop".id

# Wenn die ID übereinstimmte, so besitzt die variable den wert null und dann wird die entsprechende Eigenschaft des NBT-Speichers aktualisiert.
execute if score VarInvS.4NichtGefunden PZInvS.4Drop matches 0 run data merge storage inventar-sensor:v4daten {EigInvS.4ID:'{"text":"wahr","color":"green","bold":true}'}

# Wenn nach der Stapel-Zahl gesucht wird und die ID übereinstimmt, dann wird die Stapel-Zahl ausgelesen, in eine separate Variable gespeichert und anschließend mit der Gesamt-Zahl des Stapels aufsummiert.
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 2.. if score VarInvS.4NichtGefunden PZInvS.4Drop matches 0 store result score VarInvS.4SucheStapel PZInvS.4Drop run data get storage inventar-sensor:v4daten "EigInvS.4Drop".Count
execute if score VarInvS.4DropStapel PZInvS.4Drop matches 2.. if score VarInvS.4NichtGefunden PZInvS.4Drop matches 0 run scoreboard players operation VarInvS.4Stapel PZInvS.4Drop += VarInvS.4SucheStapel PZInvS.4Drop

# Falls das kopierte Inventar des NBT-Speichers noch nicht leer ist, wird die Slot-Funktion selbst nochmals aufgerufen.
execute if data storage inventar-sensor:v4daten {EigInvS.4Inventar:[{}]} run function inventar-sensor:v4slots

Variante 4: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel sowie den NBT-Speicher. Ebenfalls werden alle Gegenstände wieder gelöscht.

Editor Icon.png inventar-sensor:v4stopp.mcfunction
# Das Punkte-Ziel wird wieder entfernt.
scoreboard objectives remove PZInvS.4Drop

# Alle Eigenschaften des NBT-Speichers werden gelöscht.
data remove storage inventar-sensor:v4daten "EigInvS.4ID"
data remove storage inventar-sensor:v4daten "EigInvS.4Stapel"
data remove storage inventar-sensor:v4daten "EigInvS.4SucheDrop"
data remove storage inventar-sensor:v4daten "EigInvS.4Drop"
data remove storage inventar-sensor:v4daten "EigInvS.4Inventar"

# Alle Gegenstände mit der Eigenschaft werden entfernt.
clear @a minecraft:stick{EigInvS.4Alle:true}
clear @a minecraft:mossy_stone_brick_wall{EigInvS.4Alle:true}
clear @a minecraft:stone_bricks{EigInvS.4Alle:true}
clear @a minecraft:wither_rose{EigInvS.4Alle:true}
clear @a minecraft:red_mushroom_block{EigInvS.4Alle:true}
clear @a minecraft:lily_pad{EigInvS.4Alle:true}

# Falls Gegenstände auf dem Boden liegen werden sie ebenfalls gelöscht.
kill @e[type=minecraft:item,nbt={Item:{tag:{EigInvS.4Alle:true} } }]

Variante 5[Bearbeiten | Quelltext bearbeiten]

Inventar-Sensor (Befehle) Bild 5.1.png Inventar-Sensor (Befehle) Bild 5.2.png

Mit Hilfe dieses Inventar-Sensors kann man erfassen, ob der Spieler ein bestimmten Behälter geöffnet hat und ob man in diesem Gegenstände hinein gelegt oder herausgenommen hat. Man erhält fünf verschiedene Behälter-Blöcke die man an beliebiger Stelle platzieren kann. Wenn man sie platziert, wird das vom Fortschritts-Auslöser erkannt und man erhält den Fortschritt. Dadurch wird in Blickrichtung des Spielers der platzierte Behälter-Block gesucht und mit einer Partikelwolke ausgestattet, die wiederum die Anzahl der belegten Slots des Behälters zählt und anhand dieser Werte ein Unterschied gemessen werden kann.

Einschalten
  • Befehl 5.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion inventar-sensor:v5start aktiviert.
Wiederholen
Ausschalten

Befehlsblöcke mit Befehlen:



Variante 5: Start-Funktion
Die Start-Funktion erstellt für alle fünf Behälter, die man ebenfalls erhält, ein Punkte-Ziel dass das Öfnen dieser erkennen kann.

Editor Icon.png inventar-sensor:v5start.mcfunction
# Es werden Punkte-Ziele erstellt, die das Öffnen von bestimmten Behälter-Inventaren erfassen können.
scoreboard objectives add PZInvS.5Werfer minecraft.custom:minecraft.inspect_dispenser ["Inventar-Sensor.5: ",{"text":"Öffnen von Werfern","bold":true}]
scoreboard objectives add PZInvS.5Truhe minecraft.custom:minecraft.open_chest ["Inventar-Sensor.5: ",{"text":"Öffnen von Truhen","bold":true}]
scoreboard objectives add PZInvS.5Ofen minecraft.custom:minecraft.interact_with_furnace ["Inventar-Sensor.5: ",{"text":"Öffnen von Öfen","bold":true}]
scoreboard objectives add PZInvS.5Shulker minecraft.custom:minecraft.open_shulker_box ["Inventar-Sensor.5: ",{"text":"Öffnen von Shulkerkisten","bold":true}]
scoreboard objectives add PZInvS.5Fass minecraft.custom:minecraft.open_barrel ["Inventar-Sensor.5: ",{"text":"Öffnen von Fässern","bold":true}]

# Alle Behälter die erfasst werden sollen werden in das Inventar des Spielers gelegt.
give @a[distance=..15] minecraft:dispenser{EigInvS.5Alle:true,display:{Lore:['"Platziere den Behälter"','"und leg was rein"']} }
give @a[distance=..15] minecraft:chest{EigInvS.5Alle:true,display:{Lore:['"Platziere den Behälter"','"und leg was rein"']} }
give @a[distance=..15] minecraft:furnace{EigInvS.5Alle:true,display:{Lore:['"Platziere den Behälter"','"und leg was rein"']} }
give @a[distance=..15] minecraft:shulker_box{EigInvS.5Alle:true,display:{Lore:['"Platziere den Behälter"','"und leg was rein"']} }
give @a[distance=..15] minecraft:barrel{EigInvS.5Alle:true,display:{Lore:['"Platziere den Behälter"','"und leg was rein"']} }

# Alle Spieler im Umkreis von 15 Blöcken bekommen eine kurze Erklärung was sie machen müssen um den Sensor zu benutzen.
tellraw @a[distance=..15] ["Inventar-Sensor.5:\n",{"text":"Platziere die Behälter und öffne sie und lege Gegenstände hinein oder nimm sie heraus.","bold":true}]

Variante 5: Zyklus-Funktion
Die Zyklus-Funktion prüft ob man die Behälter geöffnet hat oder ob man die Behälter platziert hat und ruft dann die Platzieren-Funktion auf.

Editor Icon.png inventar-sensor:v5zyklus.mcfunction
# Wenn Spieler einen der fünf Behälter platzieren, erhalten sie ein Etikett.
tag @a[scores={PZInvS.5Werfer=1..}] add EtiInvS.5Block
tag @a[scores={PZInvS.5Truhe=1..}] add EtiInvS.5Block
tag @a[scores={PZInvS.5Ofen=1..}] add EtiInvS.5Block
tag @a[scores={PZInvS.5Shulker=1..}] add EtiInvS.5Block
tag @a[scores={PZInvS.5Fass=1..}] add EtiInvS.5Block

# Besitzen sie das Etikett, so erhalten sie die Nachricht, dass sie einen Behhälter geöffnet haben.
tellraw @a[tag=EtiInvS.5Block] ["Inventar-Sensor.5:\n",{"text":"Inventar geöffnet() == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]

# Damit später auch beim Platzieren von Behältern die Funktion dazu geladen wird, erhalten Spieler ebenfalls das Etikett dafür.
tag @a[advancements={inventar-sensor:v5bloecke_platzieren=true}] add EtiInvS.5Block

# Wenn Spieler das Etikett besitzen, wird von deren Position in Augenhöhe in Blickrichtung die Platzieren-Funktion geladen.
execute as @a[tag=EtiInvS.5Block] at @s anchored eyes positioned ^ ^ ^0.5 run function inventar-sensor:v5platzieren

# Spieler die den Fortschritt besitzen, bekommen ihn entfernt.
advancement revoke @a[advancements={inventar-sensor:v5bloecke_platzieren=true}] only inventar-sensor:v5bloecke_platzieren

# Falls eine Partikelwolke ohne Behälter exisitert, wird sie entfernt.
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] at @s unless block ~ ~ ~ #inventar-sensor:v5behaelter run kill @s

# Falls Spieler das Inventar geöffnet haben, wird ihnen der Wert wieder auf null gesetzt.
scoreboard players set @a[tag=EtiInvS.5Block] PZInvS.5Werfer 0
scoreboard players set @a[tag=EtiInvS.5Block] PZInvS.5Truhe 0
scoreboard players set @a[tag=EtiInvS.5Block] PZInvS.5Ofen 0
scoreboard players set @a[tag=EtiInvS.5Block] PZInvS.5Shulker 0
scoreboard players set @a[tag=EtiInvS.5Block] PZInvS.5Fass 0

# Das Etikett wird entfernt, sofern es vorhanden ist.
tag @a[tag=EtiInvS.5Block] remove EtiInvS.5Block

# Zwei Punkte-Ziele werden weiter verwendet um auch die Slot-Anzahl der Behälter zu speichern. Hierbei wird der alte Wert zwischengespeichert und anschließend wird die aktuelle Slot-Anzahl ausgelesen und gespeichert.
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] run scoreboard players operation @s PZInvS.5Werfer = @s PZInvS.5Truhe
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] at @s store result score @s PZInvS.5Truhe run data get block ~ ~ ~ Items

# Wenn der alte Wert und der neue nicht übereinstimmen, wird eine Nachricht an die Spieler ausgegeben. Abhängig ob was dazu gelegt wurde oder etwas entnommen wurder, wird auch das an den Spieler per Nachricht übertragen.
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] unless score @s PZInvS.5Werfer = @s PZInvS.5Truhe at @s run tellraw @a[distance=..4] ["Inventar-Sensor.5:\n",{"text":"Inventar geändert() == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] if score @s PZInvS.5Werfer < @s PZInvS.5Truhe at @s run tellraw @a[distance=..4] ["",{"text":"Gegenstände aufgefüllt == ","color":"gray","bold":true},{"text":"wahr","color":"green","bold":true}]
execute as @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] if score @s PZInvS.5Werfer > @s PZInvS.5Truhe at @s run tellraw @a[distance=..4] ["",{"text":"Gegenstände aufgefüllt == ","color":"gray","bold":true},{"text":"falsch","color":"red","bold":true}]
JSON Icon.png inventar-sensor:v5bloecke_platzieren.json
{
  "criteria": {
    "Werfer": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:dispenser"
      }
    },
    "Truhe": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:chest"
      }
    },
    "Ofen": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:furnace"
      }
    },
    "Shulkerkiste": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:shulker_box"
      }
    },
    "Fass": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:barrel"
      }
    }
  },
  "requirements": [ ["Werfer", "Truhe", "Ofen", "Shulkerkiste", "Fass"] ]
}
JSON Icon.png inventar-sensor:v5behaelter.json
{
	"replace": false,
	"values": [
		"minecraft:dispenser",
		"minecraft:chest",
		"minecraft:furnace",
		"minecraft:shulker_box",
		"minecraft:barrel"
	]
}

Variante 5: Platzieren-Funktion
Die Platzieren-Funktion bewegt sich in Blickrichtung des Spielers solange weiter nach vorne, bis sie den Behälter gefunden hat.

Editor Icon.png inventar-sensor:v5platzieren.mcfunction
# Wenn sich an der aktuellen Position einer der fünf Behälter befindet und noch keine Partikelwolke dort existiert, wird eine neue erzeugt.
execute if block ~ ~ ~ #inventar-sensor:v5behaelter unless entity @e[distance=..0.6,type=minecraft:area_effect_cloud] align xz run summon minecraft:area_effect_cloud ~0.5 ~ ~0.5 {NoGravity:true,Duration:-1,Age:-2147483648,WaitTime:-2147483648,Particle:"minecraft:block minecraft:air",Tags:["EtiInvS.5Alle","EtiInvS.5Inventar"]}

# Falls die Funktion noch nicht weiter als fünf Blöcke vom Spieler entfernt ist und sich noch keine Partikelwolke in der Nähe aufhält, wird die Funktion sich selbst etwas versetzt in Blickrichtung erneut aufrufen.
execute if entity @s[distance=..5] unless entity @e[distance=..0.9,type=minecraft:area_effect_cloud] positioned ^ ^ ^0.2 run function inventar-sensor:v5platzieren

Variante 5: Stopp-Funktion
Die Stopp-Funktion löscht alle Punkte-Ziele, Fortschritt und Gegenstände wieder.

Editor Icon.png inventar-sensor:v5stopp.mcfunction
# Die Punkte-Ziele werden wieder entfernt.
scoreboard objectives remove PZInvS.5Werfer
scoreboard objectives remove PZInvS.5Truhe
scoreboard objectives remove PZInvS.5Ofen
scoreboard objectives remove PZInvS.5Shulker
scoreboard objectives remove PZInvS.5Fass

# Alle Behälter werden aus dem Inventar entfernt.
clear @a minecraft:dispenser{EigInvS.5Alle:true}
clear @a minecraft:chest{EigInvS.5Alle:true}
clear @a minecraft:furnace{EigInvS.5Alle:true}
clear @a minecraft:shulker_box{EigInvS.5Alle:true}
clear @a minecraft:barrel{EigInvS.5Alle:true}

# Das eventuell noch vorhandene Etikett wird entfernt.
tag @a[tag=EtiInvS.5Block] remove EtiInvS.5Block

# Der Fortschritt, sofern noch vorhanden, wird entfernt.
advancement revoke @a[advancements={inventar-sensor:v5bloecke_platzieren=true}] only inventar-sensor:v5bloecke_platzieren

# Alle Behälter die noch an der Position der Partikelwolken sind, werden entfernt.
execute at @e[type=minecraft:area_effect_cloud,tag=EtiInvS.5Inventar] if block ~ ~ ~ #inventar-sensor:v5behaelter run setblock ~ ~ ~ minecraft:air replace

# Herumliegende Drops und alle anderen Objekte für den Sensor werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigInvS.5Alle:true} } }] add EtiInvS.5Alle
kill @e[tag=EtiInvS.5Alle]


Disambig color.svg
 
Grid Grasblock.png
Auch im Minecraft Wiki wird das Thema dieser Technik behandelt:
Inventar