From bb89847632b02d683497193b700a0698768b508e Mon Sep 17 00:00:00 2001 From: Rigby Date: Tue, 26 Jul 2011 21:04:18 +0100 Subject: [PATCH] Map handling improvements. Fixed an NPE occurring under certain circumstances. Made it possible for maps to exist without having to associate them with a world. --- .../java/net/minecraft/server/WorldMap.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minecraft/server/WorldMap.java b/src/main/java/net/minecraft/server/WorldMap.java index 72a01cd3d8..ab20cf9b15 100644 --- a/src/main/java/net/minecraft/server/WorldMap.java +++ b/src/main/java/net/minecraft/server/WorldMap.java @@ -45,15 +45,16 @@ public class WorldMap extends WorldMapBase { if (least != 0L && most != 0L) { this.uniqueId = new UUID(most, least); - } - CraftWorld world = (CraftWorld) server.getWorld(this.uniqueId); - // Check if the stored world details are correct. - if (world == null) { - /* All Maps which do not have their valid world loaded are set to a dimension which hopefully won't be reached. - This is to prevent them being corrupted with the wrong map data. */ - dimension = 127; - } else { - dimension = (byte) world.getHandle().dimension; + + CraftWorld world = (CraftWorld) server.getWorld(this.uniqueId); + // Check if the stored world details are correct. + if (world == null) { + /* All Maps which do not have their valid world loaded are set to a dimension which hopefully won't be reached. + This is to prevent them being corrupted with the wrong map data. */ + dimension = 127; + } else { + dimension = (byte) world.getHandle().dimension; + } } } @@ -110,8 +111,12 @@ public class WorldMap extends WorldMapBase { } } } - nbttagcompound.setLong("UUIDLeast", this.uniqueId.getLeastSignificantBits()); - nbttagcompound.setLong("UUIDMost", this.uniqueId.getMostSignificantBits()); + /* Perform a second check to see if a matching world was found, this is a necessary + change incase Maps are forcefully unlinked from a World and lack a UID.*/ + if (this.uniqueId != null) { + nbttagcompound.setLong("UUIDLeast", this.uniqueId.getLeastSignificantBits()); + nbttagcompound.setLong("UUIDMost", this.uniqueId.getMostSignificantBits()); + } } // CraftBukkit end nbttagcompound.a("dimension", this.map);