Zählen von Gegenständen in einer Brust

Ich arbeite an einem System, das es einem Spieler erlaubt, ein Schablonengebäude wie ein Haus zu bauen. Wenn man eine dieser Strukturen baut, muss der Spieler eine bestimmte Anzahl von benötigten Gegenständen treffen.
(Z. B. 20 Bretter und 35 Steine)

Ich habe versucht, verschiedene Strategien, um dies zu erreichen, wie die Entwässerung der Brust mit einem Trichter oder faul Testforblocking, aber ich kann nicht scheinen, um ein schnelles und flexibles System für diese, entweder es dauert 1 Tick pro Element oder die Elemente würde haben In einer ganz bestimmten Reihenfolge angeordnet werden, damit der testforblock es finden kann.

Ich bin mir der AffectedItems Stat bewusst, aber ich habe keinen Weg gefunden, es zu benutzen, um Items zu zählen und wenn es sogar möglich ist. Ich frage nicht nach einem System, das das tut, ich suche nur ein Konzept, auf das ich bauen kann.

A /testforblock wird hier perfekt funktionieren. /testforblock ermöglicht partielle NBT-Spiele. Dies bedeutet, dass man einfach keinen Slot angeben kann, und es wird funktionieren. Es gibt ein paar Probleme (wenn jemand zu viele Materialien in einen Stapel bringt, wird es nicht richtig erkennen, zum Beispiel), aber insgesamt ist es nicht so schwer zu tun.

Lass uns mit dem Beispiel gehen, das du posierst, 20 Bretter und 35 Steine. Wir können überprüfen, ob es eine Truhe mit 20 Brettern und 35 Steinziegeln innen wie folgt gibt:

 /testforblock XYZ minecraft:chest M {Items:[{id:minecraft:planks,Count:20b,Damage:0s},{id:minecraft:stonebrick,Count:35b,Damage:0s}]} 

Wo X , Y und Z die Koordinaten (oder relativen Koordinaten) der Brust sind, die du überprüfen möchtest. Der Wert von M hängt von der Richtung ab, in der deine Brust steht. Sie können dies testen, indem Sie zuerst 0 versuchen und dann in der Befehlsblockfehlerausgabe unterhalb der Befehlseingabe suchen. Wenn du es falsch gemacht hast, wird es dazu etwas sagen:

 [18:26:20] The block at -1320,57,-662 had the data value of 3 (expected: 0). 

Und Sie können sich entsprechend anpassen. Der Wert des Damage in jedem der Item-Compound-Tags variiert je nach der jeweiligen Sorte des Blocks, den du überprüfen möchtest, oder es kann weggelassen werden, wenn es egal ist.

Aus irgendeinem Grund müssen Sie die Buchstaben nach den Ziffern im NBT-Tag einfügen, die angeben, welche Art von Nummer es ist (Count ist ein Byte, Schaden ist kurz). Ich bin mir nicht sicher, warum das genau ist, um ehrlich zu sein.

Wenn du mehr als 64 eines Artikels überprüfen möchtest, kannst du das machen, du musst nur einen Stapel von 64 und den Rest als separate Eintragseinträge überprüfen. Mit anderen Worten, die Prüfung auf genau 74 Kopfsteinpflaster würde wie folgt durchgeführt werden:

 /testforblock XYZ minecraft:chest M {Items:[{id:minecraft:cobblestone,Count:64b},{id:minecraft:cobblestone,Count:10b}]} 

Eine Alternative wäre:

 /testforblock xyz minecraft:chest m {Items:[{Slot:0b,id:minecraft:fishing_rod,Damage:0s,Count:1b}]} 

Ich habe das andere ausprobiert und es hat nicht für mich gearbeitet , aber du kannst das ausprobieren.