Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  –  Noch keinen Server gefunden? Es gibt einen Wiki-Server

Diskussion:NBT

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Dateiformat[Bearbeiten]

Ich habe nach langer Fehlersuche herausbekommen, dass man bei zlib die Kompressionsstufe Z_BEST_SPEED nehmen sollte und nicht Z_DEFAULT_COMPRESSION. Ich hoffe diese Info hilft irgendwem. --131.220.205.68 11:39, 11. Sep. 2012 (UTC)

Schon passiert, danke für den Hinweis. --Kumasasa 16:35, 11. Sep. 2012 (UTC)

fuer eine 2KB spieler.dat (ungepackt) nimmt man am besten gar keine komprimierung, aber java ist ja sehr bequem --109.84.38.229 01:47, 21. Sep. 2012 (UTC)

Beispiele[Bearbeiten]

Es würde enorm helfen, wenn man hier einige Beispiele finden würde, wie man die ganzen NBTs richtig einsetzen muss, denn ich scheitere schon daran, den Befehl /testfor @p {DataVersion:137} der funktioniert so zu erweitern, dass ich statt der spezifischen Zahl den Namen des Snapshots eintragen kann. Denn ganz unten, unter Weltdaten steht, dass man das machen könnte. Meine Versuche: Befehl /testfor @p {DataVersionname:15w41b}, Befehl /testfor @p {DataVersionid:137} und Befehl /testfor @p {DataVersion:[{name:15w41b}]}. Nethonos (Diskussion) 11:46, 11. Okt. 2015 (UTC)

In den Weltdaten sehe ich keine Eigenschaft, die "DataVersionname" lautet oder "DataVersionid". Außerdem kann man mit /testfor sowieso keine Weltdaten abfragen, das wird auch nirgends gesagt. Man kann mit /testfor nur Objekt- und Spielerdaten abfragen. Aber die Spielereigenschaft "DataVersion" hat keine Untereigenschaft "name". "DataVersionname" und "DataVersionid" gibt es auch in den Spielerdaten nicht. Du kannst nur existierende Eigenschaften abfragen. Mit anderen Worten: Du kannst bei /testfor nicht den Namen des Snapshots angeben. -- Sumpfhütte 16:24, 11. Okt. 2015 (UTC)
@Sumpfhütte: Ich denke mal die Wörter werden zusammen gesetzt. Und zwar, wenn du ganz oben bei "Data:" schaust und dann nach ganz unten gehst steht da "Version:". Nun habe ich die beiden zusammengefügt. Dann steht darunter "Id:", "Name:" und "Snapshot:". Diese müssten also irgendwie noch dahinter geschrieben werden und dann sollte es irgendwie klappen. Der "normale" Befehl funktioniert ja, aber ich würde lieber den Snapshot-Namen eintragen, dann muss ich nicht immer auf oder abzählen. Nethonos (Diskussion) 16:32, 11. Okt. 2015 (UTC)
Nein, die Wörter werden nicht zusammengesetzt, sondern die Eigenschaften sind in einer Baumstruktur angeordnet, die mit JSON beschrieben wird (schau dir mal den JSON-Artikel an). Mit deinem letzten Versuch warst du schon nahe dran: {Data:{Version:{Name:15w41b}}} wäre theoretisch richtig. Weil "Data" und "Version" vom Typ "Compound" sind (das sieht man am Icon, dazu auch mal mit der Maus drauf gehen), müssen nach dem Doppelpunkt jeweils geschweifte Klammern kommen. Eckige werden nur für den Typ "Liste" verwendet. Und "Name" muss groß geschrieben werden. Aber das was du möchtest, geht sowieso nicht, aus den Gründen, die ich bereits nannte. -- Sumpfhütte 16:59, 11. Okt. 2015 (UTC)
Ok, danke für die Erklärung und für den Hinweis auf JSON, habs gefunden. Nethonos (Diskussion) 17:03, 11. Okt. 2015 (UTC)
Ich habe jetzt außerdem den Abschnitt Befehl#NBT-Daten um eine Erläuterung mit Beispielen erweitert, wie man grundsätzlich NBT-Daten richtig einsetzt. -- Sumpfhütte 11:31, 18. Okt. 2015 (UTC)

@Sumpfhütte: Deine Erweiterung ist nicht schlecht, jedoch hab ich (und auch andere) immer wieder Probleme überhaupt mit der Baumstrukturen klar zu kommen. Ich sehe hier auf dieser Seite auch keinerlei Beispiele die das Problem angehen. Denn was aus meiner Sicht fehlt, wären Beispiele die bei dem jeweiligen Baum-Parameter dabei stehen: Ich weiss nicht obs richtig ist aber beispielsweise so Byte-Array:[{..},{..}]. Damit man weis welche Klammern man verwenden muss und wie der allgemeine Aufbau aussieht. Wenn das gegeben wäre, könnten die NBT-Bäume noch so kompliziert sein, man würde sie trotzdem entschlüsseln können. Zudem finde ich, wenn diese Seite diese Beispiele brächte, so wäre sie einer der wichtigsten Daten-Seiten überhaupt, wenn nicht sogar die wichtigste. Denn ich scheitere schon daran einen Blumentopf mit einer spezifischen Blume per "setblock-Befehl" zu setzen. (Versuch: Befehl /setblock ~ ~ ~1 flower_pot 0 replace {contents:{rose} }) Nethonos (Diskussion) 09:40, 23. Feb. 2016 (UTC)

Blockzustände haben nichts mit Befehlen zu tun. Sie werden ausschließlich intern im Code verwendet. Für Befehle kannst du die Baumstruktur z.B. im Artikel Blockobjektdaten einsehen. | violine1101 (Diskussion) 14:55, 23. Feb. 2016 (UTC)
Das "NBT-Format" beschreibt den internen Aufbau der NBT-Dateien. Insofern ist dieser Artikel vor allem für jene interessant, diese Dateien mit einem Programm auswerten wollen, so wie es die Entwickler des NBTExplorers oder MCEdit gemacht haben. Zur Eingabe von NBT-Daten in Befehlen wird JSON verwendet, eine spezielle Notation. Die Klammern gehören zu JSON, nicht zu NBT. Im Artikel "JSON" gibt es Beispiele für die Verwendung der Klammern. Ein Beispiel für die Baumstruktur findest du unter Befehl#NBT-Daten. Ein Byte-Array hast du richtigerweise mit eckigen Klammern notiert, aber innerhalb der Klammern stehen nur Bytes, du hast jedoch Objekte (erkennbar an den geschweiften Klammern) genommen. Richtig für einen Byte-Array wäre also Byte-Array:[90b, 0b, -90b]. Violine hat dir schon den Tipp gegeben, wo du die NBT-Daten für den Blumentop findest, nämlich unter Blockobjektdaten. Dort steht:
Die Daten sind im Wiki immer alphabetisch sortiert. Bei der Eingabe ist innerhalb von geschweiften Klammern die Reihenfolge jedoch egal (siehe Artikel "JSON"). Wir nehmen daher den wichtigeren Wert zuerst, nämlich "Item". Der ID-Name für Blume ist "minecraft:red_flower". Da es viele Blumen mit diesem ID-Namen gibt, musst du noch die richtigen Metadaten angeben. Das machst du mit dem "Data"-Wert. Die Rose gibt es ja nicht mehr und hohe Blumen wie den Rosenstrauch kann man nicht in einen Blumentopf pflanzen. Nehmen wir also den Sternlauch mit Metadaten 2. Das wäre dann der Befehl /setblock ~ ~ ~1 flower_pot 0 replace {Item:red_flower, Data:2} Für einen Kaktus, der keine Metdaten hat, kannst du sie weglassen. Das wäre dann der Befehl /setblock ~ ~ ~1 flower_pot 0 replace {Item:cactus}. -- Sumpfhütte 18:58, 23. Feb. 2016 (UTC)
Für das Verständnis der Baumstruktur empfehle ich dir sehr, den NBTExplorer zu benutzen. Stelle dich in den Chunk[0,0], weil der besonders leicht zu finden ist. Dann setzt du dort einen Blumentopf mit Sternlauch und schaust im NBTExplorer in die TileEntity-Daten. Dort findest du die exakten Daten und bei komplexeren Daten (Kreatur mit Ausrüstung) den genauen Aufbau des Baumes. Wenn du möchtest, kann ich dir das auch mal im TeamSpeak erklären. -- Sumpfhütte 19:12, 23. Feb. 2016 (UTC)
@Violine1101: Da hab ich wohl an falscher Stelle gesucht, danke für den Verweis. @Sumpfhütte: Hm, ich dachte das bei den Baumstrukturen die Symbole die gleichen sind wie die von den NBT's, so dass damit auch die Klammern und die Rangfolge des Baums beschrieben werden würde. Dann hab ich das wohl falsch verstanden. Den NBTExplorer werde ich mir dann bei Gelegenheit mal besorgen. Nethonos (Diskussion) 12:59, 24. Feb. 2016 (UTC)
Doch, das hast du richtig verstanden. Das Symbol
bezeichnet z.B. eine Liste, die JSON-Notation zur Angabe einer Liste bei den NBT-Daten eines Befehls ist die eckige Klammer. -- Sumpfhütte 13:40, 24. Feb. 2016 (UTC)

"Stringified NBT"[Bearbeiten]

@Nethonos: "Stringified NBT hinzugefügt, für Textbefehle" => Quelle? Beispiel? -- Sumpfhütte 09:35, 6. Jan. 2018 (UTC)

Das ist seit 18w01a ganz neu. Das kannst du nun für Textnachrichten und sogar für Namen(!!!) nutzen, das heißt man kann jetzt per Befehl Objekte, Kreaturen, etc. direkt benennen und das beste daran, man kann auch Übersetzungen damit tätigen! -- Nethonos 11:38, 6. Jan. 2018 (UTC)

Hier mal zwei Beispiele:
CustomName:"{\"text\":\"HelloWorld\"}"
CustomName:"[{\"text\":\"hi \",\"color\":\"blue\",\"bold\":true},{\"translate\":\"entity.Creeper.name\"}]"

Ich habe jetzt herausgefunden, dass SNBT nichts anderes ist, als die von uns bisher "JSON-NBT" genannte Eingabe von NBT-Daten in Befehlen. Das gibt es bereits seit Version 1.7. Ich habe alle Artikel entsprechend angepasst. Neu mit 18w01a ist die Verwendung von JSON-Text in CustomNames, das hat aber mit SNBT nichts zu tun. -- Sumpfhütte 11:43, 11. Feb. 2018 (UTC)
Fantastisch, dann kommt so das eine zum anderen und wir haben somit statt dem internen Wiki-Begriff "JSON-NBT" einen offiziellen Begriff namens "SNBT". Ich hoffe nur das man mit weiteren Entwicklungsversionen wieder die Möglichkeit bekommt auch Namen ohne SNBT einzutragen zu können. Denn das ist schon etwas sperrig, wenn man nur den Namen abfragen möchte. -- Nethonos 11:15, 12. Feb. 2018 (UTC)
Nachtrag: wenn das Eingeben von Namen für Blöcke, Gegenstände oder Objekten kein SNBT ist, ist es dann tatsächlich nur JSON-Text und warum? Ich hab den Begriff SNBT erst mit den Namen in einem Zusammenhang gehört gehabt und hätte jetzt laut den Artikeln gedacht, das der JSON-Text Teil des SNBT ist. Denn man muss im Gegensatz zu reinen JSON-Texten um diesen noch Anführungszeichen setzen. So muss man den JSON-Text escapen {Name:"{\"text\":\"Hallo\"}"} um ihn anzugeben, da man ihn in einem String "" eintragen muss. -- Nethonos 09:17, 4. Apr. 2018 (UTC)

Artikelname[Bearbeiten]

Analog zu JSON wäre es doch bestimmt besser wenn der Artikel schlicht "NBT" heißen würde, denn der Begriff kann für sich alleine stehen, im Gegensatz zu "Level Format", "Anvil Format", etc. Was meinen die anderen? -- Nethonos 07:48, 10. Jan. 2018 (UTC)

Ja, kann man machen. Notch schrieb in seiner Spezifikation: "NBT (Named Binary Tag) is a tag based binary format". -- Sumpfhütte 14:59, 10. Jan. 2018 (UTC)
Gut, dann mach ich mich mal an die Arbeit. -- Nethonos 17:15, 10. Jan. 2018 (UTC)

Array-Sortierung YZX[Bearbeiten]

Wenn XZ bedeutet, dass erst alle X-Werte für Z=0, dann für Z=1 usw ausgeführt werden, dann muss ich um sie zu iterieren `foreach(z in Z) { foreach(x in X) { ... }}` machen. Das deckt sich auch mit meinem Verständnis: wenn ich die Sortierung ABCD habe, muss ich die For-Schleifen von außen nach innen in umgekehrter Reihenfolge schachteln.

Dann heißt es aber: "Chunk-Sektionen werden in einem Array in YZX-Sortierung abgelegt. Das bedeutet, dass erst alle ZX-Flächen für Y=0 aufgeführt sind, gefolgt von allen ZX-Flächen für Y=1 etc."

Entweder die Sortierung muss XZY heißen oder es werden tatsächlich Säulen statt Ebenen zuerst gespeichert. Und solange ich nicht weiß welche der beiden Optionen richtig ist kann ich sie auch nicht selbst korrigieren. Piegames (Diskussion) 12:25, 16. Aug. 2018 (UTC)

Die Sortierung muss XZY heißen. Die Iteration wäre foreach(y in Y) { foreach(z in Z) { foreach(x in X) ... . -- Sumpfhütte 15:32, 16. Aug. 2018 (UTC)