diff --git a/.classpath b/.classpath
index 82298c2..aa54b47 100644
--- a/.classpath
+++ b/.classpath
@@ -11,7 +11,6 @@
-
diff --git a/lib/JNBT_1.3.jar b/lib/JNBT_1.3.jar
deleted file mode 100644
index 8b197e1..0000000
Binary files a/lib/JNBT_1.3.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 526a5fd..3a87875 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,12 @@
1.8
1.8
+
+
+ jitpack.io
+ https://jitpack.io
+
+
commons-io
@@ -54,5 +60,10 @@
3.7.0
+
+ com.github.piegamesde
+ nbt
+ dbe4ea253b
+
\ No newline at end of file
diff --git a/src/main/java/morlok8k/MinecraftLandGenerator/Server.java b/src/main/java/morlok8k/MinecraftLandGenerator/Server.java
index 128c7f5..8772764 100644
--- a/src/main/java/morlok8k/MinecraftLandGenerator/Server.java
+++ b/src/main/java/morlok8k/MinecraftLandGenerator/Server.java
@@ -28,14 +28,16 @@ import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jnbt.CompoundTag;
-import org.jnbt.IntTag;
-import org.jnbt.NBTInputStream;
-import org.jnbt.NBTOutputStream;
-import org.jnbt.Tag;
import org.joml.Vector2i;
import org.joml.Vector3i;
+import com.flowpowered.nbt.CompoundMap;
+import com.flowpowered.nbt.CompoundTag;
+import com.flowpowered.nbt.IntTag;
+import com.flowpowered.nbt.Tag;
+import com.flowpowered.nbt.stream.NBTInputStream;
+import com.flowpowered.nbt.stream.NBTOutputStream;
+
/**
*
* @author morlok8k
@@ -93,28 +95,17 @@ public class Server {
* @author Corrodias
*/
protected static Vector3i getSpawn(final File level) throws IOException {
- try {
- final NBTInputStream input = new NBTInputStream(new FileInputStream(level));
- final CompoundTag originalTopLevelTag = (CompoundTag) input.readTag();
- input.close();
+ try (NBTInputStream input = new NBTInputStream(new FileInputStream(level));) {
+ final CompoundTag levelTag = (CompoundTag) input.readTag();
+ final Map> levelData =
+ ((CompoundTag) levelTag.getValue().get("Data")).getValue();
- final Map originalData =
- ((CompoundTag) originalTopLevelTag.getValue().get("Data")).getValue();
- // This is our map of data. It is an unmodifiable map, for some
- // reason, so we have to make a copy.
- final Map newData = new LinkedHashMap<>(originalData);
- // .get() a couple of values, just to make sure we're dealing with a
- // valid level file, here. Good for debugging, too.
- final IntTag spawnX = (IntTag) newData.get("SpawnX");
- final IntTag spawnY = (IntTag) newData.get("SpawnY");
- final IntTag spawnZ = (IntTag) newData.get("SpawnZ");
+ final IntTag spawnX = (IntTag) levelData.get("SpawnX");
+ final IntTag spawnY = (IntTag) levelData.get("SpawnY");
+ final IntTag spawnZ = (IntTag) levelData.get("SpawnZ");
- final Vector3i ret =
- new Vector3i(spawnX.getValue(), spawnY.getValue(), spawnZ.getValue());
- return ret;
- } catch (final ClassCastException ex) {
- throw new IOException("Invalid level format.");
- } catch (final NullPointerException ex) {
+ return new Vector3i(spawnX.getValue(), spawnY.getValue(), spawnZ.getValue());
+ } catch (final ClassCastException | NullPointerException ex) {
throw new IOException("Invalid level format.");
}
}
@@ -138,64 +129,25 @@ public class Server {
* @author Corrodias
*/
protected static void setSpawn(final File level, final Vector3i xyz) throws IOException {
-
- try {
- final NBTInputStream input = new NBTInputStream(new FileInputStream(level));
+ // TODO clean this up even more
+ try (NBTInputStream input = new NBTInputStream(new FileInputStream(level));) {
final CompoundTag originalTopLevelTag = (CompoundTag) input.readTag();
input.close();
- //@formatter:off
-
- //Note: The Following Information is Old (from 2010), compared to the Data inside a current "level.dat".
- //However, What we look at (SpawnX,Y,Z and RandomSeed) have not changed.
-
- /*
- * Structure:
- *
- *TAG_Compound("Data"): World data.
- * * TAG_Long("Time"): Stores the current "time of day" in ticks. There are 20 ticks per real-life second, and 24000 ticks per Minecraft day, making the day length 20 minutes. 0 appears to be sunrise, 12000 sunset and 24000 sunrise again.
- * * TAG_Long("LastPlayed"): Stores the Unix time stamp (in milliseconds) when the player saved the game.
- * * TAG_Compound("Player"): Player entity information. See Entity Format and Mob Entity Format for details. Has additional elements:
- * o TAG_List("Inventory"): Each TAG_Compound in this list defines an item the player is carrying, holding, or wearing as armor.
- * + TAG_Compound: Inventory item data
- * # TAG_Short("id"): Item or Block ID.
- * # TAG_Short("Damage"): The amount of wear each item has suffered. 0 means undamaged. When the Damage exceeds the item's durability, it breaks and disappears. Only tools and armor accumulate damage normally.
- * # TAG_Byte("Count"): Number of items stacked in this inventory slot. Any item can be stacked, including tools, armor, and vehicles. Range is 1-255. Values above 127 are not displayed in-game.
- * # TAG_Byte("Slot"): Indicates which inventory slot this item is in.
- * o TAG_Int("Score"): Current score, doesn't appear to be implemented yet. Always 0.
- * * TAG_Int("SpawnX"): X coordinate of the player's spawn position. Default is 0.
- * * TAG_Int("SpawnY"): Y coordinate of the player's spawn position. Default is 64.
- * * TAG_Int("SpawnZ"): Z coordinate of the player's spawn position. Default is 0.
- * * TAG_Byte("SnowCovered"): 1 enables, 0 disables, see Winter Mode
- * * TAG_Long("SizeOnDisk"): Estimated size of the entire world in bytes.
- * * TAG_Long("RandomSeed"): Random number providing the Random Seed for the terrain.
- *
- */
-
- //@formatter:on
-
- final Map originalData =
+ final Map> originalData =
((CompoundTag) originalTopLevelTag.getValue().get("Data")).getValue();
// This is our map of data. It is an unmodifiable map, for some reason, so we have to make a copy.
- final Map newData = new LinkedHashMap<>(originalData);
-
- // .get() a couple of values, just to make sure we're dealing with a valid level file, here. Good for debugging, too.
- @SuppressWarnings("unused")
- final IntTag spawnX = (IntTag) newData.get("SpawnX"); // we never use these... Its only here for potential debugging.
- @SuppressWarnings("unused")
- final IntTag spawnY = (IntTag) newData.get("SpawnY"); // but whatever... so I (Morlok8k) suppressed these warnings.
- @SuppressWarnings("unused")
- final IntTag spawnZ = (IntTag) newData.get("SpawnZ"); // I don't want to remove existing code, either by myself (Morlok8k) or Corrodias
+ final Map> newData = new LinkedHashMap<>(originalData);
newData.put("SpawnX", new IntTag("SpawnX", xyz.x)); // pulling the data out of the Coordinates,
newData.put("SpawnY", new IntTag("SpawnY", xyz.y)); // and putting it into our IntTag's
newData.put("SpawnZ", new IntTag("SpawnZ", xyz.z));
// Again, we can't modify the data map in the old Tag, so we have to make a new one.
- final CompoundTag newDataTag = new CompoundTag("Data", newData);
- final Map newTopLevelMap = new HashMap<>(1);
+ final CompoundTag newDataTag = new CompoundTag("Data", new CompoundMap(newData));
+ final Map> newTopLevelMap = new HashMap<>(1);
newTopLevelMap.put("Data", newDataTag);
- final CompoundTag newTopLevelTag = new CompoundTag("", newTopLevelMap);
+ final CompoundTag newTopLevelTag = new CompoundTag("", new CompoundMap(newTopLevelMap));
final NBTOutputStream output = new NBTOutputStream(new FileOutputStream(level));
output.writeTag(newTopLevelTag);