Testen Sie, ob der Spieler etwas hält, aber das angegebene Element

Also mache ich einen Befehlsblockmechanismus, aber ich muss testen, ob der Spieler etwas anderes als ein bestimmtes Item wie testfor @p {SelectedItem:{id:minecraft:stick}} , während diese Instanz es aktivieren würde Der Spieler trägt alles außer einem Stock. Wenn das unmöglich ist, gibt es eine Möglichkeit zu testen, ob der Spieler überhaupt nichts trägt?

Richten Sie ein Dummy-Ziel ein:

  /scoreboard objectives add NotHoldingItem dummy 

Auf einer Uhr (oder kurz bevor du das testfor verwenden will), laufe in dieser Reihenfolge die folgenden Befehle aus:

  scoreboard players set @a NotHoldingItem 1 scoreboard players set @a NotHoldingItem 0 {SelectedItem:{id:minecraft:stick}} 

Die Befehle oben setzen alle NotHoldingItem-Score auf 1, und legen Sie es dann wieder auf 0 für alle, die das Element, so dass nur Menschen nicht halten die Artikel mit einem NotHoldingItem Score von 1.

Sie können dann für Leute testen, die eine NotHoldingItem-Punktzahl von 1 haben:

 /testfor @a[score_NotHoldingItem_min=1] 

Hier ist eine mögliche Methode:

Erstellen Sie einen Befehlsblock für jeden Elementschlitz. Dann erstellen Sie einen Befehl, um das Element zu überprüfen, und wenn der Steckplatz aktiv ist, dann verbinden Sie sie alle mit einem einzigen Eingang an einem Ende und einem einzigen Ausgang auf der anderen.

Der erste Befehlsblock sollte:

 /testfor @p {SelectedItemSlot:0,Inventory:[{Slot:0b,id:"minecraft:stick"}]} 

Der zweite Befehlsblock sollte:

 /testfor @p {SelectedItemSlot:1,Inventory:[{Slot:1b,id:"minecraft:stick"}]} 

etc.

Beachten Sie, dass sich die beiden Steckplatznummern für jeden Block geändert haben. Ändern Sie die Slot-Werte für jeden Block, bis Sie 0-8 haben (benötigt 9 Befehlsblöcke). Dann, sobald alle Befehlsblöcke mit dem gleichen Ausgang verbunden sind (Sie benötigen wahrscheinlich einen Komparator und Repeater für jeden), invertieren Sie das Ausgangssignal.

Hinweis: Möglicherweise müssen Sie den Ausgang standardmäßig mit einer zusätzlichen Redstone-Schaltung ausschalten.

Verwenden Sie einfach einen Komparator, um zu testen, ob ein Spieler einen Stab hält, und dann umdrehen (über eine Redstone-Fackel) und das invertierte Signal zu einem Befehlsblock führen. Nun, wenn der Spieler einen Stick hält, wird das Signal invertiert und der zweite Befehlsblock wird deaktiviert.

Sie können einfach die Syntax für "nicht" ( ! ) Zu Ihrem Befehl hinzufügen.

 testfor @p {SelectedItem:!{id:minecraft:stick}} 

Die andere Option wäre, die Ausgabe einfach zu invertieren. Also zuerst, du würdest testen, dass der Spieler einen Stock hält:

 testfor @p {SelectedItem:{id:minecraft:stick}} 

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Dann, wenn das Redstone-Signal invertiert wird, wird dies nur den Mechanismus auslösen, wenn der Spieler keinen Stick hält.

Benutze einfach einen T-Flip Flop ….

(Komparator läuft aus dem Befehlsblock mit einem Repeater in einen Block, der eine Redstone-Fackel auf der anderen Seite hat, die dann einen Befehlsblock versorgt)

Dann sollte es funktionieren

Es ist wahrscheinlich einfach am einfachsten, einen Komparator zu benutzen, und du kannst testen, ob du den Stab hältst und nicht nur den Ausgang mit einem NICHT-Tor invertierst. Ich habe einige zusätzliche Forschung, und es stellt sich heraus, dass in einigen Versionen von Minecraft, hat ein Spieler tatsächlich die Syntax der Holding "Minecraft: Luft". Dies bedeutet, dass zu überprüfen, dass sie nicht etwas in ihrer Hand haben, müssen Sie tatsächlich auf Luft zu überprüfen. Das funktioniert nicht in 1.9, da Mojang "Minecraft: Air" aus der Datenbank entfernt hat.

So könnte es am einfachsten sein, dies zu tun:
/ Testfor @p {SelectedItem: {id: minecraft: air}}
Ich habe das Gefühl, dass es einen Weg in 1.9 geben sollte, um nur zu testen, dass es nichts gibt. Ich werde das noch ein bisschen aussehen.

Sicher! Verwenden Sie einfach den Befehl: /testfor @p {SelectedItem:{id:!stick}} , der Ausrufezeichen wird das machen.