Eigentlich nicht besonders kompliziert.
Aber etwas Können gehört dazu 
Zuerst speicherst du am besten immer die Blocklocation der Kisten, dann zum sichern des Inhalt abfragen beim Öffnen von Kisten ob es eine der gespeicherten Locations ist, Ausnahme der Besitzter natürlich.
Nun zum Schild, das Schild aktualisierst du am Besten bei jedem Ver- /Kauf und wenn der Inhaber die Kiste schließt. Somit sollte das Schild immer aktuelle Werte anzeigen.
Um das Schild zu erstellen kannst du 2 wählen zwischen via Command oder direkt per Hand schreiben.
Via Command hat den Vorteil du kannst das Schild nachträglich ändern ohne das man es erst abreißen und neuplatzieren muss.
Per Schild ist eigentlich ja selbsterklärend, beim SignChangeEvent die Zeilen abfragen und nach den Informationen prüfen.
Die Itemanzahl in der Kiste zählen geht indem du den Block der gespeicherten Location bekommst und dann checkst ob es ein Container ist (Keyword: instanceof) ist das der Fall zu einem Container casten und den Inhalt zählen.
Zum Thema automatische Itemerkennung, das ist etwas knifflig entweder beim in die Kiste legen prüfst du das nur ein Typ Item drinne ist oder du lässt den Spieler per Hand schreiben/per Command welches Item verkauft/gekauft werden soll.
Da du schon geschrieben hast es die Items erkennen soll hier wie es geht:
Beim Container schließen prüfen ob nur ein Typ Item in der Kiste ist falls nicht, Inventar wieder öffnen oder optional einfach alle Items droppen. (Hier kannst du, wenn du gerne Algoryhtmen schreibst, nur die Itemtypen droppen die in der Minderheit sind)
Dann bei Command/Schild platzieren einfach wieder auf den Block bzw den Container zugreifen und die Items "auslesen"