Wie kann ich feststellen, ob ein Spieler ein bestimmtes Item mit einem bestimmten Datavalue in seinem Inventar hat?

Nehmen wir an, ich möchte eine Gruppe von Spielern verfolgen, um zu sehen, welche von ihnen (falls vorhanden) einen bestimmten Blocktyp in ihrem Inventar haben, der von einem bestimmten Datavalue ist; Zum Beispiel Rote Wolle ( minecraft:wool mit einem Datenwert von 14). Ich weiß schon, wie man entdeckt, ob ein Spieler in seinem Inventar Wolle hat:
/testfor @a {Inventory:[{id:"minecraft:wool"}]} .
Dies unterscheidet jedoch nicht zwischen den verschiedenen Farben. Es wird jeder mit irgendeiner Farbe Wolle finden, während ich nur Spieler mit roter Wolle finden möchte.

Ich habe versucht, das Daten-Tag zu ändern, um auch einen Datenwert, wie zB
/testfor @a {Inventory:[{id:"minecraft:wool",data:14}]}
Aber dies führt zu unerreichten NBT-Tags und die Fehlermeldung <Player> did not match the required data structure . Offensichtlich liegt es daran, dass data (oder Data , damage , dataID usw.) nicht der Name des NBT-Tags sind oder dass die Struktur falsch ist.

Ich weiß, ich kann dies mit dem /clear Befehl zu erreichen, aber das ist ein bisschen klobig, wenn auf einer 20Hz /fill Uhr laufen. Wie kann ich bei der Verwendung der Befehle /testfor oder /scoreboard players bestimmte Datenwerte /testfor ?

  • Wie man den Sieger entdeckt
  • Erkennung eines Tropfers mit Gegenständen in ihm ohne / testfor
  • Minecraft mit dem Befehl / execute für bestimmte Personen
  • Variablen in Minecraft?
  • Ist es möglich, einen Spieler nur rückwärts zu machen?
  • Ist es möglich, einen Spieler mit einem bestimmten Gegenstand in seinem Inventar zu markieren oder zu modifizieren
  • 3 Solutions collect form web for “Wie kann ich feststellen, ob ein Spieler ein bestimmtes Item mit einem bestimmten Datavalue in seinem Inventar hat?”

    Du bist eigentlich ziemlich nah und definitiv auf dem richtigen Weg. Statt {Inventory:[{id:<block ID>,data:<data value>}]} verwenden Sie {Inventory:[{id:<block ID>,Damage:<data value>s}]} . Die s nach dem Datenwert ist wichtig, da sie als kurz , nicht als int gespeichert ist . (Abgesehen davon, wenn es als Byte gespeichert wurde, würden Sie stattdessen ein b anfügen.)

    Sie können das Element erkennen, ohne dass Sie mit dem Befehl /clear beenden müssen.
    Die Syntax für /clear Befehl folgt:

     /clear [player] [item] [data] [maxCount] [dataTag] 

    Wenn Sie maxCount auf 0 , wird der Befehl nur dann ausgegeben, wenn der Spieler das angegebene Element hat.

     /scoreboard players set @a <objective> <score> {Inventory:[{id:block ID,Damage:Data Value s}]}