Minecraft NBT Minecraft *.dat-Datei - Verständnisproblem

Minecraft - Java Edition

Ismoh

Mitglied
vorerst:
Internet Explorer ist einfach das behindertste Programm, das es gibt ...
Nun darf ich alles erneut schreiben -.-


also:

Story:
1. Minecraft Server zuHause aufgesetzt
2. externe IP abrufen
3. auf webspace speichern
4.1. spieler startet mein 2tes programm
4.2. server.dat von minecraft wird aktualisert
4.3. spiel wird gestartet und verbindet sich direkt zum server

Problem:

4.2. in der server.dat-Datei befinden sich sogenannte tags...
hierbei brauche ich hilfe...

Die bilder zeigen mein problem:
- MCServerliste.png zeigt die Serverliste im Spiel an
- serverdat.png zeigt die server.dat-Datei geöffnet mit Notepad++ und mit einem sogenannten NBTEditor

Meine Frage ist nun:
Wie kann ich in Java diese Datei mit den "SINNVOLLEN" Tags bearbeiten ?
Kann ja nicht sein, dass nur Notch die Fähigkeit besitzt irgendwelche Tags einzubinden...

Ich hoffe, dass hier Personen sind, die mir auf die sprünge helfen können.
Ich habe bereits in der JavaDoc nach Tags gesucht aber nichts gefunden...
Außerdem dachte ich auch an HTML-Tags... vielleicht gibts es einen Zusammenhang.

Groß-/kleinschreibung & Rechtschreib-/Grammatikfehler darf man behalten :p
immerhin schreib ich keine bachelorthesis etc


Edit:
Java NBT Libary (kann ich leider nichts mit anfangen) ...
 

Anhänge

  • MCServerliste.png
    MCServerliste.png
    3 KB · Aufrufe: 73
  • serverdat.png
    serverdat.png
    11,1 KB · Aufrufe: 81
Zuletzt bearbeitet:

Empire Phoenix

Top Contributor
DAs .dat sieht nach einem serialisierten java bject aus. Kannst ja versucehn eigenes programm, minecraft als library rein, und dann per objectStream das laden.
 

Ismoh

Mitglied
na gut ok...
da muss ich zugeben, dass ich bisschen mehr details brauche :p
soweit war ich auch schon hab, jedoch noch kein durchblick.

ich hab gerade gegooglet:

Code:
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);

int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject();

ois.close();

t.tmp mit server.dat ersezten...
ich werd das mal ausprobieren und mal sehn was bei raus kommt :p

danke für den hinweis...
 

Ismoh

Mitglied
Fehlermeldung:
Code:
1
2
java.io.StreamCorruptedException: invalid stream header: 0A000009
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)
	at sc.Main.test(Main.java:118)
	at sc.Main.<init>(Main.java:34)
	at sc.Main.main(Main.java:30)

Quellcode:
Code:
package sc;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class Main {

	URL u;
	InputStream is = null;
	DataInputStream dis;
	String s;
	int lines = 0;

	String serverDat = System.getenv("APPDATA") + "\\.minecraft\\servers.dat";


	public static void main(String[] args) {
		new Main();
	}

	public Main() {
		test();
	}
             private void test() {
		System.out.println("1");
		FileInputStream f;
		ObjectInputStream i = null;
		try {
			System.out.println("2");
			f = new FileInputStream(serverDat);
			i = new ObjectInputStream(f);
			System.out.println("3");
			while (true) { // Endlosschleife - wird nur durch eine Exception abgebrochen
				i.readObject(); // irgendwann gibt's eine EOFException
				System.out.println(i);
				System.out.println("4");
			}
		} catch (EOFException e) { 
			e.printStackTrace();
			// wird geschmissen, falls alle Object aus dem File gelesen wurden
			System.out.println(i);
			System.out.println("5");
			try {
				i.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} // also fertig -> schließe Stream
		} catch (IOException e) {
			e.printStackTrace();
			// Ein- bzw. Ausgabefehler -> Fehlerbehandlung
		} catch (ClassNotFoundException e) {
			// sollte nicht vorkommen
			e.printStackTrace();
		}
	}
}
 

X5-599

Top Contributor
Es sind wohl keine Serialisierten Objekte. Hab damit zwar noch nie gearbeitet, aber es gibt eine Library um solche Dateien einzulesen.

Die hier ist schon ziemlich alt:
JNBT: The Java NBT Library

Und die hier scheint die gleiche zu sein. Geforkt auf github:
https://github.com/Morlok8k/JNBT


Wie man die benutzt bin ich mir nicht 100% sicher. Anscheinend kann man nur Tag für Tag auslesen. Nur im Code stelle ich fest, dass man so am Ende immer eine Exception bekommen müsste anstelle des EndTags... Vielleicht lege ich das ganze auch falsch aus. Andere scheinen kein Problem in der Hinsicht zu haben.

Kannst ja mal googlen nach JNBT. Ich würde sagen benutzen müsste man es so:

Java:
NBTInputStream is = new NBTInputStream(new FileInputStream(....));
Tag tag = is.readTag;
Tag tag2 = is.readTag();
//etc.
 

Ismoh

Mitglied
Super danke für die Hilfe und den vermutlich richtigen BeispielCode.

Ich teste das ganze später.

muss nun zur fh.

wenn ich erfolg habe poste ich den Quellcode, damit andere ebenso damit arbeiten können :p
 

Ismoh

Mitglied
Blöde frage, aber hab ich noch nie gemacht:

wie binde ich die Libary ein ?

Edit:
Hat sich erledigt...

hab n neues package erstellt und die javaClass dateien importiert
 
Zuletzt bearbeitet:

Ismoh

Mitglied
Code:
java.util.zip.ZipException: Not in GZIP format
	at java.util.zip.GZIPInputStream.readHeader(Unknown Source)
	at java.util.zip.GZIPInputStream.<init>(Unknown Source)
	at java.util.zip.GZIPInputStream.<init>(Unknown Source)
	at org.jnbt.NBTInputStream.<init>(NBTInputStream.java:79)
	at sc.Main.test(Main.java:117)
	at sc.Main.<init>(Main.java:37)
	at sc.Main.main(Main.java:33)

Java:
[...]
String serverDat = System.getenv("APPDATA") + "\\.minecraft\\servers.dat";
[...]
private void test() {
		NBTInputStream is;
		try {
			is = new NBTInputStream(new FileInputStream(serverDat));
			Tag tag = is.readTag();
			Tag tag2 = is.readTag();
			System.out.println(tag);
			System.out.println(tag.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Wie soll ich das verstehen ?
Dass es sich um einen falschen Dateiformat handelt ?
irgendwie gerade komplett durcheinander...
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Die Lib geht anscheinend davon aus, daß die einzulesenen Dateien im GZip Format vorliegen. Wenn du die einzelnen Source Dateien der Lib eh vorliegen hast guck mal in der Klasse: NBTInputStream und schau dir den Konstruktor an. Der müsste ungefähr so ausehen:

Java:
public NBTInputStream(InputStream is) throws IOException {
    this.is = new DataInputStream(new GZIPInputStream(is));
}

Wenn du da einfach den " new GZIPInputStream(is)" rausschmeisst könnte es gehen. Also so:

Java:
public NBTInputStream(InputStream is) throws IOException {
    this.is = new DataInputStream(is);
}
 

Ismoh

Mitglied
Kann ich die Datei nicht in GZip konvertieren ?

Wenn ich den Konstruktor verändere kommt folgender Fehler:
Code:
java.io.EOFException
	at java.io.DataInputStream.readByte(Unknown Source)
	at org.jnbt.NBTInputStream.readTag(NBTInputStream.java:104)
	at org.jnbt.NBTInputStream.readTag(NBTInputStream.java:91)
	at sc.Main.test(Main.java:119)
	at sc.Main.<init>(Main.java:37)
	at sc.Main.main(Main.java:33)

NBTInputStream.java:104:
Java:
int type = is.readByte() & 0xFF;
komplette methode:
Java:
private Tag readTag(int depth) throws IOException {
		int type = is.readByte() & 0xFF;

		String name;
		if (type != NBTConstants.TYPE_END) {
			int nameLength = is.readShort() & 0xFFFF;
			byte[] nameBytes = new byte[nameLength];
			is.readFully(nameBytes);
			name = new String(nameBytes, NBTConstants.CHARSET);
		} else {
			name = "";
		}

		return readTagPayload(type, name, depth);
	}

Kann ich die Datei nicht einfach in einen DataInput einlesen ?
Die Tags besitzen doch bestimmte Bytes...
oder denke ich da zu einfach ?
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Wenn das möglich ist würde ich mal die Konvertierung in GZip versuchen.

Ansonsten könnte es ein ganz normaler InputStream sein. Theoretisch. Ich weiss aber nicht ob es intern nur mit dem GZipStream funktioniert. EOFException ist schon komisch.
 

Ismoh

Mitglied
ich hab nun noch mal gegooglet und 2 "interessante" links gefunden.

1. NBTOutputStream: (für später interessant)
NBTOutputStream

2. WorldEditor mit NBT:
NBTInputStream Beispiele


Beim zweiten Link bin ich auf folgendes gestoßen:
Java:
NBTInputStream stream = new NBTInputStream(new FileInputStream(save));
CompoundTag root = (CompoundTag)(stream.readTag());
CompoundTag level = (CompoundTag)(root.getValue().get("Level"));
int x = ((IntTag)(level.getValue().get("xPos"))).getValue();
int y = ((IntTag)(level.getValue().get("zPos"))).getValue();
stream.close();
System.out.println("Rendering "+x+","+y);

Und die Formulierung CompoundTag root etc erinnerte mich an das Bild, das im Anhang ist.
Ich werde nun ein bisschen rummprobieren, vllt finde ich endlich eine lösung :p

EDIT:
Ja nagut, es ist logischerweise immer noch das selbe Problem mit GZIP...
 

Anhänge

  • serverdat.png
    serverdat.png
    11,1 KB · Aufrufe: 42
Zuletzt bearbeitet:

Ismoh

Mitglied
Das ist natürlich interessant:

Ich habe soweit nichts geändert, bis auf die eigentliche datei:
statt servers.dat habe ich level.dat eingelesen (laut einiger Minecraft-foren haben die dateien die selbe struktur etc)
Bei der Datei level.dat ist es komischerweise möglich diese einzulesen.

Habe gerade beim Versuchen die Exception gefunden...

Java:
Tag tag = is.readTag();
wirft folgende Exception
Code:
java.io.EOFException
	at java.io.DataInputStream.readByte(Unknown Source)
	at org.jnbt.NBTInputStream.readTag(NBTInputStream.java:104)
	at org.jnbt.NBTInputStream.readTag(NBTInputStream.java:91)
	at sc.Main.test(Main.java:123)
	at sc.Main.<init>(Main.java:38)
	at sc.Main.main(Main.java:34)


Nun zum "funktionierendem" JavaCode:
Java:
private void test() {

		NBTInputStream is;
		try {
			is = new NBTInputStream(new FileInputStream(serverDatWorld));

			CompoundTag root = (CompoundTag)(is.readTag());
			System.out.println(root);
			
			is.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
ConsolenAusgabe:
Code:
TAG_Compound: 1 entries
{
   TAG_Compound("Data"): 24 entries
   {
      TAG_Byte("thundering"): 0
      TAG_Long("LastPlayed"): 1352392491633
      TAG_Long("DayTime"): 43
      TAG_Compound("Player"): 30 entries
      {
         TAG_List("DropChances"): 5 entries of type TAG_Float
         {
            TAG_Float: 0.05
            TAG_Float: 0.05
            TAG_Float: 0.05
            TAG_Float: 0.05
            TAG_Float: 0.05
         }
         TAG_List("Motion"): 3 entries of type TAG_Double
         {
            TAG_Double: 0.0
            TAG_Double: -0.0784000015258789
            TAG_Double: 0.0
         }
         TAG_Float("foodExhaustionLevel"): 0.0
         TAG_Int("foodTickTimer"): 0
         TAG_Int("XpLevel"): 0
         TAG_Short("Health"): 20
         TAG_List("Inventory"): 0 entries of type TAG_Byte
         {
         }
         TAG_Short("AttackTime"): 0
         TAG_Byte("Sleeping"): 0
         TAG_Short("Fire"): -20
         TAG_Int("foodLevel"): 20
         TAG_Int("playerGameType"): 0
         TAG_Byte("Invulnerable"): 0
         TAG_Short("DeathTime"): 0
         TAG_List("EnderItems"): 0 entries of type TAG_Byte
         {
         }
         TAG_Float("XpP"): 0.0
         TAG_List("Equipment"): 5 entries of type TAG_Compound
         {
            TAG_Compound: 0 entries
            {
            }
            TAG_Compound: 0 entries
            {
            }
            TAG_Compound: 0 entries
            {
            }
            TAG_Compound: 0 entries
            {
            }
            TAG_Compound: 0 entries
            {
            }
         }
         TAG_Short("SleepTimer"): 0
         TAG_Short("HurtTime"): 0
         TAG_Byte("OnGround"): 1
         TAG_Int("Dimension"): 0
         TAG_Short("Air"): 300
         TAG_List("Pos"): 3 entries of type TAG_Double
         {
            TAG_Double: 253.5
            TAG_Double: 65.02739540713331
            TAG_Double: -58.5
         }
         TAG_Byte("CanPickUpLoot"): 0
         TAG_Float("foodSaturationLevel"): 5.0
         TAG_Compound("abilities"): 7 entries
         {
            TAG_Byte("flying"): 0
            TAG_Byte("mayfly"): 0
            TAG_Byte("instabuild"): 0
            TAG_Byte("invulnerable"): 0
            TAG_Byte("mayBuild"): 1
            TAG_Float("flySpeed"): 0.05
            TAG_Float("walkSpeed"): 0.1
         }
         TAG_Byte("PersistenceRequired"): 0
         TAG_Float("FallDistance"): 0.0
         TAG_Int("XpTotal"): 0
         TAG_List("Rotation"): 2 entries of type TAG_Float
         {
            TAG_Float: 116.10001
            TAG_Float: 7.95
         }
      }
      TAG_Byte("initialized"): 1
      TAG_Long("RandomSeed"): -6917091228158184040
      TAG_Int("GameType"): 0
      TAG_Byte("MapFeatures"): 1
      TAG_Int("version"): 19133
      TAG_Byte("allowCommands"): 0
      TAG_Long("Time"): 43
      TAG_Byte("raining"): 0
      TAG_Int("SpawnX"): 256
      TAG_Int("thunderTime"): 15579
      TAG_Int("SpawnY"): 64
      TAG_Byte("hardcore"): 0
      TAG_Int("SpawnZ"): -52
      TAG_String("LevelName"): New World
      TAG_String("generatorOptions"): 
      TAG_Long("SizeOnDisk"): 0
      TAG_String("generatorName"): default
      TAG_Compound("GameRules"): 7 entries
      {
         TAG_String("doFireTick"): true
         TAG_String("doMobLoot"): true
         TAG_String("mobGriefing"): true
         TAG_String("doMobSpawning"): true
         TAG_String("doTileDrops"): true
         TAG_String("keepInventory"): false
         TAG_String("commandBlockOutput"): true
      }
      TAG_Int("generatorVersion"): 1
      TAG_Int("rainTime"): 87943
   }
}

Ich behaupte das diese Fortschritt sehr gut aussieht :p
Nun werde ich erneut die servers.dat datei einlesen und versuchen auch dieses problem mit eurer hilfe lösen zu können...
 

Ismoh

Mitglied
Also bei servers.dat wird immer noch die Exception
Code:
java.util.zip.ZipException: Not in GZIP format
	at java.util.zip.GZIPInputStream.readHeader(Unknown Source)
	at java.util.zip.GZIPInputStream.<init>(Unknown Source)
	at java.util.zip.GZIPInputStream.<init>(Unknown Source)
	at org.jnbt.NBTInputStream.<init>(NBTInputStream.java:79)
	at sc.Main.test(Main.java:119)
	at sc.Main.<init>(Main.java:38)
	at sc.Main.main(Main.java:34)
geworfen, da diese, im gegensatz zu level.dat, ein unkomprimiertes NBTFormat besitzt:
Dateiformate

Hierbei brauche ich wieder die Hilfe, der Experten :oops::
Eine NBT-Datei ist ein per GZip komprimierter TAG_Compound inclusive Name und tagID. Manche der von Minecraft benutzten Dateien sind unkomprimiert, jedoch in den meisten Fällen folgen die Dateien der Original-Spezifikation von Notch und sind mit GZip komprimiert. Bei Verwendung von zlib muss die Kompressionsstufe Z_BEST_SPEED verwendet werden. Es gibt keinen Header der die Version angibt, nur die Datei level.dat hat eine Versionsangabe.

D.H.:
Mit dem mir vorliegendem Code kann ich also level.dat ohne Probleme öffnen, da diese einen Header besitzt.
Die Datei servers.dat hat laut MinecraftWiki also keinen Header.

Meine Frage:
Wie kann ich diesen Header nun, wie in der Wiki beschrieben ("Bei Verwendung von zlib muss die Kompressionsstufe Z_BEST_SPEED verwendet werden."), angeben ?
 

Kevin94

Top Contributor
Wie wärs, wenn du dir einfach aus dem MCP alle Klassen kopierst, die für das Einlesen verantwortlich sind? Dann hast du null Probleme mit fremden Code der nicht ganz den Bedürfnissen entspricht.
 

Ismoh

Mitglied
Hab ich auch schon drüber nachgedacht...

Problem ist nur:

1. Bin mir nicht ganz sicher wie ich das machen soll
2. Wo finde ich genau die Klasse bzw den Quellcode, der dafür verantwortlich ist
 

Kevin94

Top Contributor
Ist ganz einfach, die Namen der Klassen fangen alle mit NBT an. (Also zumindest in der Version die ich hier hab, dürfte schon etwas älter sein)
 

Kevin94

Top Contributor
Ja meine ich. Und das ganze das erste Mal zum Laufen zu bringen ist etwas komplex, der deobfuscatedte SourceCode von Minecraft ist nicht direkt enthalten, sondern man musste zu erst irgenwas ausführen, damit aus dem ByteCode Source generiert wird. Hat wenn ich mich recht erinnere lizenzrechtliche Gründe.
 

Ismoh

Mitglied
Ich hab nun in einem anderem Workspace die nbt *.java-Dateien gefunden.
Im Anhang sind diese aufgelistet.

Eine andere Frage: @Kevin
Hast du dich damit schonmal befasst ?

Meine frage ist nun:
Wie bekomme ich diese java dateien in mein schon vorhandenes workspace ?
Bzw hast du diese schon mal benutzt ?
 

Anhänge

  • nbt_minecraft_files.png
    nbt_minecraft_files.png
    6,1 KB · Aufrufe: 35
Zuletzt bearbeitet:

Ismoh

Mitglied
Wenn ich das richtig sehe, wird NBTBase die Klasse sein, die alles "verwaltet".

Die Methode:
Java:
/**
     * Reads and returns a tag from the given DataInput, or the End tag if no tag could be read.
     */
    public static NBTBase readNamedTag(DataInput par0DataInput) throws IOException
    {
        byte var1 = par0DataInput.readByte();

        if (var1 == 0)
        {
            return new NBTTagEnd();
        }
        else
        {
            String var2 = par0DataInput.readUTF();
            NBTBase var3 = newTag(var1, var2);

            try
            {
                var3.load(par0DataInput);
                return var3;
            }
            catch (IOException var6)
            {
                CrashReport var5 = new CrashReport("loading nbt data", var6);
                var5.addCrashSection("Tag name", var2);
                var5.addCrashSection("Tag type", Byte.valueOf(var1));
                throw new ReportedException(var5);
            }
        }
    }
ist dann der Konstruktor ?

naja... weiß gerade nicht so recht^^, aber immerhin ist hier der DataInput dann die servers.dat datei. (wenn ich das alles richtig verstehe)

Ich habe die NBT-Klassen nun in meiner vorhandenen Workspace.
Ich werde nun ein wenig rummprobieren.
 
Zuletzt bearbeitet:

Ismoh

Mitglied
Ich habe nun eine Methode geschrieben die mir
Code:
1 entries
ausgibt.
Das macht mich zuversichtlich :p

da in Bild serverdat.png ebenso 1 entry steht...
ich vermute, dass 2 entries ausgegeben wird, wenn ich mehr als 2 server in meiner serverliste habe.

Java:
private void test() {
		DataInput di;
		try {
			di = new DataInputStream(new BufferedInputStream(new FileInputStream(serverDat)));
			NBTBase test = NBTBase.readNamedTag(di);
			System.out.println(test);
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

Anhänge

  • serverdat.png
    serverdat.png
    11,1 KB · Aufrufe: 33

Ismoh

Mitglied
Also ich habe nun meinen Code schritt für schritt debugt.
Es funktioniert nun soweit alles.
In der Map von der Klasse NBTTag_Compound befinden sich alle daten.
Problem ist nur, dass ich nicht weiß wie ich auf diese Daten zugreifen kann...

Erneut meine Methode:
Java:
private void test() {
		//Aktualisiere Ip-Adresse
		Ips.ipAlt = "123.123.123.123"; //vom Webspace laden
		Ips.ipNeu = "127.0.0.1"; //vom Webspace laden
		DataInput di;
		try {
			di = new DataInputStream(new BufferedInputStream(new FileInputStream(serverDat)));
			NBTBase test = NBTBase.readNamedTag(di);
			System.out.println(test);
			
			String tagname = test.getTagName(test.getId());
			System.out.println(tagname);
			
			/*NBTTagCompound compound = new NBTTagCompound("ip");
			String ip = compound.getString("ip");
			System.out.println(compound.getTags());
			System.out.println("n"+compound.getTag("ip"));
			System.out.println(ip);*/
			
			
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


Hier sind die Zwei Klassen: (Überall wo
Java:
//EDIT
steht, wurde von mir experimentiert.


NBTBase:
Java:
package net.minecraft.src;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

public abstract class NBTBase
{
    public static final String[] field_82578_b = new String[] {"END", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]"};

    /** The UTF string key used to lookup values. */
    private String name;

    /**
     * Write the actual data contents of the tag, implemented in NBT extension classes
     */
    abstract void write(DataOutput var1) throws IOException;

    /**
     * Read the actual data contents of the tag, implemented in NBT extension classes
     */
    abstract void load(DataInput var1) throws IOException;

    /**
     * Gets the type byte for the tag.
     */
    public abstract byte getId();

    protected NBTBase(String par1Str)
    {
        if (par1Str == null)
        {
            this.name = "";
        }
        else
        {
            this.name = par1Str;
        }
    }

    /**
     * Sets the name for this tag and returns this for convenience.
     */
    public NBTBase setName(String par1Str)
    {
        if (par1Str == null)
        {
            this.name = "";
        }
        else
        {
            this.name = par1Str;
        }

        return this;
    }

    /**
     * Gets the name corresponding to the tag, or an empty string if none set.
     */
    public String getName()
    {
        return this.name == null ? "" : this.name;
    }

    /**
     * Reads and returns a tag from the given DataInput, or the End tag if no tag could be read.
     */
    public static NBTBase readNamedTag(DataInput par0DataInput) throws IOException
    {
        byte var1 = par0DataInput.readByte();

        if (var1 == 0)
        {
            return new NBTTagEnd();
        }
        else
        {
            String var2 = par0DataInput.readUTF();
            NBTBase var3 = newTag(var1, var2);

            try
            {
                var3.load(par0DataInput);
                return var3;
            }
            catch (IOException var6)
            {
                CrashReport var5 = new CrashReport("loading nbt data", var6);
                var5.addCrashSection("Tag name", var2);
                var5.addCrashSection("Tag type", Byte.valueOf(var1));
                throw new ReportedException(var5);
            }
        }
    }

    /**
     * Writes the specified tag to the given DataOutput, writing the type byte, the UTF string key and then calling the
     * tag to write its data.
     */
    public static void writeNamedTag(NBTBase par0NBTBase, DataOutput par1DataOutput) throws IOException
    {
        par1DataOutput.writeByte(par0NBTBase.getId());

        if (par0NBTBase.getId() != 0)
        {
            par1DataOutput.writeUTF(par0NBTBase.getName());
            par0NBTBase.write(par1DataOutput);
        }
    }

    /**
     * Creates and returns a new tag of the specified type, or null if invalid.
     */
    public static NBTBase newTag(byte par0, String par1Str)
    {
        switch (par0)
        {
            case 0:
                return new NBTTagEnd();

            case 1:
                return new NBTTagByte(par1Str);

            case 2:
                return new NBTTagShort(par1Str);

            case 3:
                return new NBTTagInt(par1Str);

            case 4:
                return new NBTTagLong(par1Str);

            case 5:
                return new NBTTagFloat(par1Str);

            case 6:
                return new NBTTagDouble(par1Str);

            case 7:
                return new NBTTagByteArray(par1Str);

            case 8:
                return new NBTTagString(par1Str);

            case 9:
                return new NBTTagList(par1Str);

            case 10:
                return new NBTTagCompound(par1Str);

            case 11:
                return new NBTTagIntArray(par1Str);

            default:
                return null;
        }
    }

    /**
     * Returns the string name of a tag with the specified type, or 'UNKNOWN' if invalid.
     */
    public static String getTagName(byte par0)
    {
        switch (par0)
        {
            case 0:
                return "TAG_End";

            case 1:
                return "TAG_Byte";

            case 2:
                return "TAG_Short";

            case 3:
                return "TAG_Int";

            case 4:
                return "TAG_Long";

            case 5:
                return "TAG_Float";

            case 6:
                return "TAG_Double";

            case 7:
                return "TAG_Byte_Array";

            case 8:
                return "TAG_String";

            case 9:
                return "TAG_List";

            case 10:
                return "TAG_Compound";

            case 11:
                return "TAG_Int_Array";

            default:
                return "UNKNOWN";
        }
    }

    /**
     * Creates a clone of the tag.
     */
    public abstract NBTBase copy();

    public boolean equals(Object par1Obj)
    {
        if (!(par1Obj instanceof NBTBase))
        {
            return false;
        }
        else
        {
            NBTBase var2 = (NBTBase)par1Obj;
            return this.getId() != var2.getId() ? false : ((this.name != null || var2.name == null) && (this.name == null || var2.name != null) ? this.name == null || this.name.equals(var2.name) : false);
        }
    }

    public int hashCode()
    {
        return this.name.hashCode() ^ this.getId();
    }
}



NBTTag_Compound:
Java:
package net.minecraft.src;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class NBTTagCompound extends NBTBase
{
    /**
     * The key-value pairs for the tag. Each key is a UTF string, each value is a tag.
     */
    public Map tagMap = new HashMap();//private Map tagMap = new HashMap(); //EDIT

    public NBTTagCompound()
    {
        super("");
    }

    public NBTTagCompound(String par1Str)
    {
        super(par1Str);
    }

    /**
     * Write the actual data contents of the tag, implemented in NBT extension classes
     */
    void write(DataOutput par1DataOutput) throws IOException
    {
        Iterator var2 = this.tagMap.values().iterator();

        while (var2.hasNext())
        {
            NBTBase var3 = (NBTBase)var2.next();
            NBTBase.writeNamedTag(var3, par1DataOutput);
        }

        par1DataOutput.writeByte(0);
    }

    /**
     * Read the actual data contents of the tag, implemented in NBT extension classes
     */
    void load(DataInput par1DataInput) throws IOException
    {
        this.tagMap.clear();
        NBTBase var2;

        while ((var2 = NBTBase.readNamedTag(par1DataInput)).getId() != 0)
        {
            this.tagMap.put(var2.getName(), var2);
        }
    }

    /**
     * Returns all the values in the tagMap HashMap.
     */
    public Collection getTags()
    {
        return this.tagMap.values();
    }

    /**
     * Gets the type byte for the tag.
     */
    public byte getId()
    {
        return (byte)10;
    }

    /**
     * Stores the given tag into the map with the given string key. This is mostly used to store tag lists.
     */
    public void setTag(String par1Str, NBTBase par2NBTBase)
    {
        this.tagMap.put(par1Str, par2NBTBase.setName(par1Str));
    }

    /**
     * Stores a new NBTTagByte with the given byte value into the map with the given string key.
     */
    public void setByte(String par1Str, byte par2)
    {
        this.tagMap.put(par1Str, new NBTTagByte(par1Str, par2));
    }

    /**
     * Stores a new NBTTagShort with the given short value into the map with the given string key.
     */
    public void setShort(String par1Str, short par2)
    {
        this.tagMap.put(par1Str, new NBTTagShort(par1Str, par2));
    }

    /**
     * Stores a new NBTTagInt with the given integer value into the map with the given string key.
     */
    public void setInteger(String par1Str, int par2)
    {
        this.tagMap.put(par1Str, new NBTTagInt(par1Str, par2));
    }

    /**
     * Stores a new NBTTagLong with the given long value into the map with the given string key.
     */
    public void setLong(String par1Str, long par2)
    {
        this.tagMap.put(par1Str, new NBTTagLong(par1Str, par2));
    }

    /**
     * Stores a new NBTTagFloat with the given float value into the map with the given string key.
     */
    public void setFloat(String par1Str, float par2)
    {
        this.tagMap.put(par1Str, new NBTTagFloat(par1Str, par2));
    }

    /**
     * Stores a new NBTTagDouble with the given double value into the map with the given string key.
     */
    public void setDouble(String par1Str, double par2)
    {
        this.tagMap.put(par1Str, new NBTTagDouble(par1Str, par2));
    }

    /**
     * Stores a new NBTTagString with the given string value into the map with the given string key.
     */
    public void setString(String par1Str, String par2Str)
    {
        this.tagMap.put(par1Str, new NBTTagString(par1Str, par2Str));
    }

    /**
     * Stores a new NBTTagByteArray with the given array as data into the map with the given string key.
     */
    public void setByteArray(String par1Str, byte[] par2ArrayOfByte)
    {
        this.tagMap.put(par1Str, new NBTTagByteArray(par1Str, par2ArrayOfByte));
    }

    /**
     * Stores a new NBTTagIntArray with the given array as data into the map with the given string key.
     */
    public void setIntArray(String par1Str, int[] par2ArrayOfInteger)
    {
        this.tagMap.put(par1Str, new NBTTagIntArray(par1Str, par2ArrayOfInteger));
    }

    /**
     * Stores the given NBTTagCompound into the map with the given string key.
     */
    public void setCompoundTag(String par1Str, NBTTagCompound par2NBTTagCompound)
    {
        this.tagMap.put(par1Str, par2NBTTagCompound.setName(par1Str));
    }

    /**
     * Stores the given boolean value as a NBTTagByte, storing 1 for true and 0 for false, using the given string key.
     */
    public void setBoolean(String par1Str, boolean par2)
    {
        this.setByte(par1Str, (byte)(par2 ? 1 : 0));
    }

    /**
     * gets a generic tag with the specified name
     */
    public NBTBase getTag(String par1Str)
    {
        return (NBTBase)this.tagMap.get(par1Str);
    }

    /**
     * Returns whether the given string has been previously stored as a key in the map.
     */
    public boolean hasKey(String par1Str)
    {
        return this.tagMap.containsKey(par1Str);
    }

    /**
     * Retrieves a byte value using the specified key, or 0 if no such key was stored.
     */
    public byte getByte(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0 : ((NBTTagByte)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 1, var3));
        }
    }

    /**
     * Retrieves a short value using the specified key, or 0 if no such key was stored.
     */
    public short getShort(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0 : ((NBTTagShort)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 2, var3));
        }
    }

    /**
     * Retrieves an integer value using the specified key, or 0 if no such key was stored.
     */
    public int getInteger(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0 : ((NBTTagInt)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 3, var3));
        }
    }

    /**
     * Retrieves a long value using the specified key, or 0 if no such key was stored.
     */
    public long getLong(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0L : ((NBTTagLong)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 4, var3));
        }
    }

    /**
     * Retrieves a float value using the specified key, or 0 if no such key was stored.
     */
    public float getFloat(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0.0F : ((NBTTagFloat)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 5, var3));
        }
    }

    /**
     * Retrieves a double value using the specified key, or 0 if no such key was stored.
     */
    public double getDouble(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? 0.0D : ((NBTTagDouble)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 6, var3));
        }
    }

    /**
     * Retrieves a string value using the specified key, or an empty string if no such key was stored.
     */
    public String getString(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? "" : ((NBTTagString)this.tagMap.get(par1Str)).data;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 8, var3));
        }
    }

    /**
     * Retrieves a byte array using the specified key, or a zero-length array if no such key was stored.
     */
    public byte[] getByteArray(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? new byte[0] : ((NBTTagByteArray)this.tagMap.get(par1Str)).byteArray;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 7, var3));
        }
    }

    /**
     * Retrieves an int array using the specified key, or a zero-length array if no such key was stored.
     */
    public int[] getIntArray(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? new int[0] : ((NBTTagIntArray)this.tagMap.get(par1Str)).intArray;
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 11, var3));
        }
    }

    /**
     * Retrieves a NBTTagCompound subtag matching the specified key, or a new empty NBTTagCompound if no such key was
     * stored.
     */
    public NBTTagCompound getCompoundTag(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? new NBTTagCompound(par1Str) : (NBTTagCompound)this.tagMap.get(par1Str);
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 10, var3));
        }
    }

    /**
     * Retrieves a NBTTagList subtag matching the specified key, or a new empty NBTTagList if no such key was stored.
     */
    public NBTTagList getTagList(String par1Str)
    {
        try
        {
            return !this.tagMap.containsKey(par1Str) ? new NBTTagList(par1Str) : (NBTTagList)this.tagMap.get(par1Str);
        }
        catch (ClassCastException var3)
        {
            throw new ReportedException(this.func_82581_a(par1Str, 9, var3));
        }
    }

    /**
     * Retrieves a boolean value using the specified key, or false if no such key was stored. This uses the getByte
     * method.
     */
    public boolean getBoolean(String par1Str)
    {
        return this.getByte(par1Str) != 0;
    }

    public void func_82580_o(String par1Str)
    {
        this.tagMap.remove(par1Str);
    }

    public String toString()
    {
        return "" + this.tagMap.size() + " entries";
    }

    public boolean func_82582_d()
    {
        return this.tagMap.isEmpty();
    }

    private CrashReport func_82581_a(String par1Str, int par2, ClassCastException par3ClassCastException)
    {
        CrashReport var4 = new CrashReport("Reading NBT data", par3ClassCastException);
        //var4.addCrashSectionCallable("Corrupt tag type found", new CallableTagCompound1(this, par1Str)); //EDIT
        //var4.addCrashSectionCallable("Corrupt tag type expected", new CallableTagCompound2(this, par2)); //EDIT
        var4.addCrashSection("Corrupt tag name", par1Str);
        return var4;
    }

    /**
     * Creates a clone of the tag.
     */
    public NBTBase copy()
    {
        NBTTagCompound var1 = new NBTTagCompound(this.getName());
        Iterator var2 = this.tagMap.keySet().iterator();

        while (var2.hasNext())
        {
            String var3 = (String)var2.next();
            var1.setTag(var3, ((NBTBase)this.tagMap.get(var3)).copy());
        }

        return var1;
    }

    public boolean equals(Object par1Obj)
    {
        if (super.equals(par1Obj))
        {
            NBTTagCompound var2 = (NBTTagCompound)par1Obj;
            return this.tagMap.entrySet().equals(var2.tagMap.entrySet());
        }
        else
        {
            return false;
        }
    }

    public int hashCode()
    {
        return super.hashCode() ^ this.tagMap.hashCode();
    }

    static Map func_82579_a(NBTTagCompound par0NBTTagCompound)
    {
        return par0NBTTagCompound.tagMap;
    }
}

Im Anhang findet ihr alle Dateien in einem Archiv. (Für die, die sich wirklich die Mühe tun und mir helfen)
 

Anhänge

  • MinecraftLauncher.zip
    91,3 KB · Aufrufe: 1

Ismoh

Mitglied
Bevor sich jemand die Mühe bereitet und die zip durchforstet:lol::
Bin nun soweit, dass die Tags korrekt eingelesen werden.
Folgende beispiele und archiv folgt (für andere User, die das selbe problem haben)
Ein Problem besteht aber noch bei der speicherung der neuen servers.dat-datei...
Hab die Syntax nocht nicht ganz verstanden...
Gleiche Tags-Eingabe != die selbe Tags-Ausgabe...
Melde mich später nochmal...
"Rede" mittlerweile eh nur noch mit mir selbst, aber was solls :p
(Ärger mich selbst zu oft über gelöste Threads, in denen einfach nur steht:
Funktioniert nun -,-)
 
T

trööhööt

Gast
wieso muss man eigentlich immer wieder erwähnen das dieses JAVA-forum eigentlich kein guter ort ist für fragen rund um minecraft nur weil dies in java geschrieben ist ...

dafür gibt es spezielle fach-foren / modding-szene ... sowas gehört hier eigentlich nicht rein ...
 

Ismoh

Mitglied
Danke für den durchaus hilfreichen und netten beitrag
Vielleicht hast du dich mit der Url vertan: flame.net

Außerdem geht es eher darum wie man *.dat-Dateien öffnet ...
DABEI hat sich ergeben, dass diese Datei eben nunmal an Minecratf gebunden ist...

Hinzu kommt, dass man eben TAGS in eine *.dat-Datei einbinden kann, was ebenso interessant sein kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Minecraft Bukkit Plugin Text Datei auslesen Spiele- und Multimedia-Programmierung 1
E Minecraft Ich bekomme diesen unbekannten Fehlercode von Minecraft Spiele- und Multimedia-Programmierung 2
S Minecraft Server Status Abfragen Spiele- und Multimedia-Programmierung 9
Lord_Joker Minecraft Server Bat error Spiele- und Multimedia-Programmierung 2
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
W Minecraft Client exportieren Spiele- und Multimedia-Programmierung 0
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
Plug-inMacher Minecraft Plugin mit Itemstack kreierte Items weiterverwenden Spiele- und Multimedia-Programmierung 2
KIWILETSPLAY How can i delete a Minecraft world Spiele- und Multimedia-Programmierung 0
Taknax Minecraft: Export der Mod dupliziert Dateien Spiele- und Multimedia-Programmierung 0
Mika_MDF Minecraft Eclipse startet Minecraft nicht? Spiele- und Multimedia-Programmierung 23
C Minecraft Spigot Entities 1.8 Spiele- und Multimedia-Programmierung 2
C Eigene Minecraft Enchantements Spiele- und Multimedia-Programmierung 1
C Minecraft Enchantements Spiele- und Multimedia-Programmierung 1
Z Minecraft Hilfe bei Minecraft PvP Client Spiele- und Multimedia-Programmierung 21
K Minecraft Minecraft "Griefergames" CobbleBot Spiele- und Multimedia-Programmierung 10
lolzo Minecraft Minecraft: Exit Code: 0 Spiele- und Multimedia-Programmierung 3
N Musikplayer in Minecraft Spiele- und Multimedia-Programmierung 0
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
F Spigot 1.14 Minecraft Welt file löschen Spiele- und Multimedia-Programmierung 6
M Minecraft Spigot Plugin kompilieren Spiele- und Multimedia-Programmierung 4
N Minecraft Spigot-Plugin | Schusswaffe programmieren Spiele- und Multimedia-Programmierung 3
T Minecraft Event Plugin Spiele- und Multimedia-Programmierung 6
I Minecraft Support Bot Mod Spiele- und Multimedia-Programmierung 8
JeremyStarTM Minecraft Minecraft Spigot Server akzeptiert JAR-Version nicht Spiele- und Multimedia-Programmierung 8
M Minecraft Minecraft 1.12.2 Plotrand ändern Spiele- und Multimedia-Programmierung 1
L wo sehe ich die Range und die Hitbox im Minecraft Sourcecode? Spiele- und Multimedia-Programmierung 2
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
M Minecraft neue setDirection() (Blickrichtung) setzten Spiele- und Multimedia-Programmierung 5
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
Z Minecraft Multiplayer geht nicht Spiele- und Multimedia-Programmierung 2
A Minecraft Withdraw und Deposit Spiele- und Multimedia-Programmierung 1
A Minecraft Plugin, welches nur bestimmten Block zum bebauen festlegt Spiele- und Multimedia-Programmierung 26
L Minecraft 1.7.10 Server startet nicht Spiele- und Multimedia-Programmierung 1
B Minecraft Scoreboard Spiele- und Multimedia-Programmierung 3
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
T Minecraft Minecraft Scoreboard Spiele- und Multimedia-Programmierung 1
I Minecraft Minecraft Minigame Plugin (Bug) Spiele- und Multimedia-Programmierung 0
L Minecraft [Minecraft] Spigot und JavaFX mit fxml Spiele- und Multimedia-Programmierung 0
L Minecraft Minecraft Bukkit Entwickler Spiele- und Multimedia-Programmierung 0
C [Minecraft] Launcher Spiele- und Multimedia-Programmierung 14
T Minecraft Minecraft-Server pingt lange Spiele- und Multimedia-Programmierung 3
J Minecraft Coding BlockBreakEvent Spiele- und Multimedia-Programmierung 2
KeexZDeveoper Launcher (Minecraft) Spiele- und Multimedia-Programmierung 1
T Minecraft Spigot Plugin [Minecraft] Spiele- und Multimedia-Programmierung 1
T Minecraft Spigot Plugin [Minecraft] Spiele- und Multimedia-Programmierung 2
M Minecraft Minecraft Plugin Fehlermeldung! Spiele- und Multimedia-Programmierung 2
J Minecraft Minecraft Obfuscation Spiele- und Multimedia-Programmierung 1
C Minecraft Coding Spiele- und Multimedia-Programmierung 8
C Minecraft Coding Spiele- und Multimedia-Programmierung 5
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
I Minecraft Plugin: Auf Spielerantwort warten Spiele- und Multimedia-Programmierung 1
M Minecraft Minecraft Plugin Fehlermeldung Spiele- und Multimedia-Programmierung 13
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
S Minecraft Minecraft crasht! Spiele- und Multimedia-Programmierung 3
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
A Minecraft Minecraft Autojump Spiele- und Multimedia-Programmierung 2
H Minecraft Minecraft Error Spiele- und Multimedia-Programmierung 7
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
DanielsLPecke Minecraft Bukkit Scheduler. ALLGEMEIN. Spiele- und Multimedia-Programmierung 1
K Minecraft-Forge Mod Programmierung Spiele- und Multimedia-Programmierung 1
L Minecraft Minecraft Serversoftware Entwickler gesucht Spiele- und Multimedia-Programmierung 5
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
C Minecraft Plugin 'Ancient Gates' Spiele- und Multimedia-Programmierung 0
W Minecraft wie Minidumps aktivierren ? (kein Minecraft) Spiele- und Multimedia-Programmierung 0
C +++Minecraft Plug-In Programmierer gesucht+++ Spiele- und Multimedia-Programmierung 3
L Minecraft - BungeePerms Spiele- und Multimedia-Programmierung 1
F Minecraft Bot Mouse Inputs Spiele- und Multimedia-Programmierung 3
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
M Minecraft Minecraft Kit Plugin mit Eclipse Spiele- und Multimedia-Programmierung 8
X Minecraft Wie kann ich eine Karte erstellen wie zb:(Bei Minecraft) Spiele- und Multimedia-Programmierung 1
OnDemand Minecraft Minecraft Anforderungen Spiele- und Multimedia-Programmierung 1
A Minecraft Plugin Teleport Fehler Spiele- und Multimedia-Programmierung 1
H Minecraft Minecraft Plugin Spiele- und Multimedia-Programmierung 3
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
OnDemand Minecraft Minecraft Spiele- und Multimedia-Programmierung 5
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
H [Minecraft] Eclipse Spiele- und Multimedia-Programmierung 3
H Minecraft Minecraft counter Spiele- und Multimedia-Programmierung 1
N Minecraft Minecraft Mod Launcher Spiele- und Multimedia-Programmierung 1
D Minecraft Config in andere Class laden/Minecraft Plugin Spiele- und Multimedia-Programmierung 1
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
T Minecraft Launcher Minecraft Spiele- und Multimedia-Programmierung 29
T Minecraft Minecraft im Forum Spiele- und Multimedia-Programmierung 16
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
R Minecraft Minecraft läuft nicht paralel mit minecraft server ? Spiele- und Multimedia-Programmierung 3
G Minecraft Minecraft / Knuddels Spiele- und Multimedia-Programmierung 7
1 Minecraft Minecraft Plugins programmieren Spiele- und Multimedia-Programmierung 6
J Minecraft Eigene Buttons "bauen" á la MineCraft Spiele- und Multimedia-Programmierung 11
D Minecraft Spieleranzahl von Minecraft Server abfragen Spiele- und Multimedia-Programmierung 8
F Minecraft Bukkit Plugin - Inventory wiederherstellung? Spiele- und Multimedia-Programmierung 2
A Minecraft Hilfe bei Minecraft Mod Spiele- und Multimedia-Programmierung 1
M Minecraft Bukkit Programmierung Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben