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 kann ich feststellen, ob ein Spieler ein bestimmtes Rüstzeug trägt?
  • Wie man sethome und home auf einem Vanilla Minecraft Server aktiviert
  • Kondensierte Mob-Namen im Anzeigetafel
  • Warum ist =! Nicht in testfor Befehl arbeiten?
  • Wie kann man sagen, wann sich ein Spieler nicht bewegt?
  • Wie man einen kopierten Befehl in einen Befehlsblock setzt?
  • 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}]}