Minecraft Named Binary Tag for Java

Minecraft ist ein cooles Sandbox-Spiel, es besitzt zudem ein binäres Dateiformat für diverse Spieldateien (Named Binary Tag, kurz NBT). Da dies ein eigenes Format ist, welches dank Notch existiert und auch spezifiziert worden ist, kann man es nicht mit einem klassischen Texteditor bearbeiten.

Für ein eigenes Projekt ist es nötig, dass ich die Spielerpositionen auslesen muss und hierfür muss ich die jeweiligen player.dat-Dateien lesen. Die Alternativen NBT2YAML oder IWNBTJL erfüllen leider nicht den Anforderungen, oder sind ziemlich umständlich in ihrer Benutzung.

Die Java-Bibliothek nbt4j ist gedacht zum Verarbeiten der NBT-Dateien, es existiert sogar eine beispielhafte Implementierung um auf die Koordinaten des entsprechenden Spielers zugreifen zu können.

Bibliothek verwenden

Hier ein Beispiel, wie man nbt4j benutzen kann:

public class PlayerDAT implements NBTFile {

    private de.dynamicfiles.projects.minecraft.nbt4j.tag.Compound data = null;

    @Override
    public boolean loadFromStream(InputStream stream) {
        try(DataInputStream dataInputStream = new DataInputStream(new GZIPInputStream(stream))){
            Tag firstTag = TagReader.getNextTag(dataInputStream);
            if( firstTag.getType() == TagType.COMPOUND ){
                data = (de.dynamicfiles.projects.minecraft.nbt4j.tag.Compound) firstTag;
            }
        } catch(IOException ex){
            Logger.getLogger(PlayerDAT.class.getName()).log(Level.INFO, "Got exception while loading PlayerDAT-file", ex);
            data = null;
        }
        return data != null;
    }
}

Das Projekt ist mittlerweile auf Github und auch über Maven-Central erreichbar, das heißt jeder kann dies nun als Dependency in seiner pom.xml angeben und verwenden.

Named Binary Tag 4 Java - Changelog

1.0 (2014-09-29)

1.1 (2014-10-07)

1.2 (2015-07-07)

work in progress