summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRigby <rigby@onarandombox.com>2011-07-05 04:48:27 +0100
committerEvilSeph <evilseph@unaligned.org>2011-07-07 14:20:05 -0400
commit9ced39421f6a4009ffbf6eac4167af68fa64f842 (patch)
treed0e13658201d97ed318808ad97a20addee18e6cd
parent5515ce1ff6e9f64a385025e4edc0da1f1578893f (diff)
downloadcraftbukkit-9ced39421f6a4009ffbf6eac4167af68fa64f842.tar
craftbukkit-9ced39421f6a4009ffbf6eac4167af68fa64f842.tar.gz
craftbukkit-9ced39421f6a4009ffbf6eac4167af68fa64f842.tar.lz
craftbukkit-9ced39421f6a4009ffbf6eac4167af68fa64f842.tar.xz
craftbukkit-9ced39421f6a4009ffbf6eac4167af68fa64f842.zip
Implements a World UID.
-rw-r--r--src/main/java/net/minecraft/server/Entity.java13
-rw-r--r--src/main/java/net/minecraft/server/WorldData.java17
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java5
4 files changed, 42 insertions, 3 deletions
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 4edecff6..a786cc7c 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -910,7 +910,7 @@ public abstract class Entity {
nbttagcompound.a("Air", (short) this.airTicks);
nbttagcompound.a("OnGround", this.onGround);
// CraftBukkit start
- nbttagcompound.setString("World", this.world.worldData.name);
+ nbttagcompound.setLong("WorldUID", this.world.worldData.getWorldUID());
nbttagcompound.setLong("UUIDLeast", this.uniqueId.getLeastSignificantBits());
nbttagcompound.setLong("UUIDMost", this.uniqueId.getMostSignificantBits());
// CraftBukkit end
@@ -982,17 +982,24 @@ public abstract class Entity {
org.bukkit.Server server = Bukkit.getServer();
org.bukkit.World bworld = null;
+ // TODO: Remove World related checks, replaced with WorldUID.
if (this instanceof EntityPlayer) {
EntityPlayer entityPlayer = (EntityPlayer) this;
String worldName = nbttagcompound.getString("World");
- if (worldName == "") {
+ if (nbttagcompound.hasKey("WorldUID")) {
+ bworld = server.getWorld(nbttagcompound.getLong("WorldUID"));
+ } else if ("".equals(worldName)) {
bworld = ((org.bukkit.craftbukkit.CraftServer) server).getServer().getWorldServer(entityPlayer.dimension).getWorld();
} else {
bworld = server.getWorld(worldName);
}
} else {
- bworld = server.getWorld(nbttagcompound.getString("World"));
+ if (nbttagcompound.hasKey("WorldUID")) {
+ bworld = server.getWorld(nbttagcompound.getLong("WorldUID"));
+ } else {
+ bworld = server.getWorld(nbttagcompound.getString("World"));
+ }
}
this.spawnIn(bworld == null ? null : ((org.bukkit.craftbukkit.CraftWorld) bworld).getHandle());
diff --git a/src/main/java/net/minecraft/server/WorldData.java b/src/main/java/net/minecraft/server/WorldData.java
index 3e8ef772..292cb561 100644
--- a/src/main/java/net/minecraft/server/WorldData.java
+++ b/src/main/java/net/minecraft/server/WorldData.java
@@ -19,6 +19,7 @@ public class WorldData {
private int m;
private boolean n;
private int o;
+ private long worldUID; // CraftBukkit
public WorldData(NBTTagCompound nbttagcompound) {
this.a = nbttagcompound.getLong("RandomSeed");
@@ -38,11 +39,20 @@ public class WorldData {
this.h = nbttagcompound.k("Player");
this.i = this.h.e("Dimension");
}
+ // CraftBukkit start
+ if (nbttagcompound.hasKey("WorldUID")) {
+ this.worldUID = nbttagcompound.getLong("WorldUID");
+ } else {
+ this.worldUID = (System.nanoTime() << 20) + this.a;
+ nbttagcompound.setLong("WorldUID", this.worldUID);
+ }
+ // CraftBukkit end
}
public WorldData(long i, String s) {
this.a = i;
this.name = s;
+ this.worldUID = (System.nanoTime() << 20) + this.a; // CraftBukkit
}
public WorldData(WorldData worlddata) {
@@ -105,6 +115,7 @@ public class WorldData {
if (nbttagcompound1 != null) {
nbttagcompound.a("Player", nbttagcompound1);
}
+ nbttagcompound.setLong("WorldUID", this.worldUID); // CraftBukkit
}
public long getSeed() {
@@ -192,4 +203,10 @@ public class WorldData {
public void setWeatherDuration(int i) {
this.m = i;
}
+
+ // CraftBukkit start
+ public long getWorldUID() {
+ return this.worldUID;
+ }
+ // CraftBukkit end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 3735635f..915186e8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -490,6 +490,16 @@ public final class CraftServer implements Server {
return worlds.get(name.toLowerCase());
}
+ public World getWorld(long uid) {
+ for (String worldName : worlds.keySet()) {
+ org.bukkit.World world = worlds.get(worldName);
+ if (world.getUID() == uid) {
+ return world;
+ }
+ }
+ return null;
+ }
+
public void addWorld(World world) {
worlds.put(world.getName().toLowerCase(), world);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index b09e357e..fac24e3e 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -395,10 +395,15 @@ public class CraftWorld implements World {
return world.worldData.name;
}
+ @Deprecated
public long getId() {
return world.worldData.getSeed();
}
+ public long getUID() {
+ return world.worldData.getWorldUID();
+ }
+
@Override
public String toString() {
return "CraftWorld{name=" + getName() + '}';