summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-06-17 03:06:45 +0100
committerDinnerbone <dinnerbone@dinnerbone.com>2011-06-17 03:06:45 +0100
commit7e22faf9d68a9ded3b118d69542f017a419d5dde (patch)
treebdd439020e9281c79274edffe463404a415e18c2 /src
parenta818669be013ea7a932551cd062df371fef6babf (diff)
downloadcraftbukkit-7e22faf9d68a9ded3b118d69542f017a419d5dde.tar
craftbukkit-7e22faf9d68a9ded3b118d69542f017a419d5dde.tar.gz
craftbukkit-7e22faf9d68a9ded3b118d69542f017a419d5dde.tar.lz
craftbukkit-7e22faf9d68a9ded3b118d69542f017a419d5dde.tar.xz
craftbukkit-7e22faf9d68a9ded3b118d69542f017a419d5dde.zip
Moved some craftbukkit stuff down from WorldServer to World; should fix a few NPEs during generation, and saves on a lot of casting
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/minecraft/server/World.java30
-rw-r--r--src/main/java/net/minecraft/server/WorldServer.java23
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java70
4 files changed, 61 insertions, 64 deletions
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index f26ff76b..3493b906 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -9,7 +9,9 @@ import java.util.Set;
import java.util.TreeSet;
// CraftBukkit start
+import org.bukkit.Bukkit;
import org.bukkit.Location;
+import org.bukkit.World.Environment;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
@@ -73,6 +75,7 @@ public class World implements IBlockAccess {
}
// CraftBukkit start
+ private final CraftWorld world;
public boolean pvpMode;
public ChunkGenerator generator;
Chunk lastChunkAccessed;
@@ -88,9 +91,18 @@ public class World implements IBlockAccess {
}
}
+ public CraftWorld getWorld() {
+ return world;
+ }
+
+ public CraftServer getServer() {
+ return (CraftServer)Bukkit.getServer();
+ }
+
// CraftBukkit - changed signature
- public World(IDataManager idatamanager, String s, long i, WorldProvider worldprovider, ChunkGenerator gen) {
+ public World(IDataManager idatamanager, String s, long i, WorldProvider worldprovider, ChunkGenerator gen, Environment env) {
this.generator = gen;
+ this.world = new CraftWorld((WorldServer)this, gen, env);
// CraftBukkit end
this.O = this.random.nextInt(12000);
@@ -125,6 +137,8 @@ public class World implements IBlockAccess {
this.g();
this.x();
+
+ getServer().addWorld(world);// Craftbukkit
}
protected IChunkProvider b() {
@@ -421,7 +435,7 @@ public class World implements IBlockAccess {
CraftWorld world = ((WorldServer) this).getWorld();
if (world != null) {
BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(i, j, k), l);
- ((WorldServer) this).getServer().getPluginManager().callEvent(event);
+ getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
@@ -1593,7 +1607,7 @@ public class World implements IBlockAccess {
}
// CraftBukkit start - Only call spawner if we have players online and the world allows for mobs or animals
- if ((this.allowMonsters || this.allowAnimals) && (this instanceof WorldServer && ((WorldServer) this).getServer().getHandle().players.size() > 0)) {
+ if ((this.allowMonsters || this.allowAnimals) && (this instanceof WorldServer && getServer().getHandle().players.size() > 0)) {
SpawnerCreature.spawnEntities(this, this.allowMonsters, this.allowAnimals);
}
// CraftBukkit end
@@ -1647,7 +1661,7 @@ public class World implements IBlockAccess {
this.worldData.b(i);
if (i <= 0) {
// CraftBukkit start
- CraftServer server = ((WorldServer) this).getServer();
+ CraftServer server = getServer();
ThunderChangeEvent thunder = new ThunderChangeEvent(((WorldServer) this).getWorld(), !this.worldData.j());
server.getPluginManager().callEvent(thunder);
@@ -1671,7 +1685,7 @@ public class World implements IBlockAccess {
this.worldData.c(j);
if (j <= 0) {
// CraftBukkit start
- CraftServer server = ((WorldServer) this).getServer();
+ CraftServer server = getServer();
WeatherChangeEvent weather = new WeatherChangeEvent(((WorldServer) this).getWorld(), !this.worldData.l());
server.getPluginManager().callEvent(weather);
@@ -1716,7 +1730,7 @@ public class World implements IBlockAccess {
private void y() {
// CraftBukkit start
- CraftServer server = ((WorldServer) this).getServer();
+ CraftServer server = getServer();
WeatherChangeEvent weather = new WeatherChangeEvent(((WorldServer) this).getWorld(), false);
server.getPluginManager().callEvent(weather);
@@ -1818,7 +1832,7 @@ public class World implements IBlockAccess {
// CraftBukkit start
SnowFormEvent snow = new SnowFormEvent(((WorldServer) this).getWorld().getBlockAt(l + i, k1, j1 + j));
- ((WorldServer) this).getServer().getPluginManager().callEvent(snow);
+ getServer().getPluginManager().callEvent(snow);
if (!snow.isCancelled()) {
this.setTypeId(l + i, k1, j1 + j, snow.getMaterial().getId());
this.setData(l + i, k1, j1 + j, snow.getData());
@@ -1980,7 +1994,7 @@ public class World implements IBlockAccess {
// CraftBukkit start
BlockCanBuildEvent event = new BlockCanBuildEvent(((WorldServer) this).getWorld().getBlockAt(j, k, l), i, defaultReturn);
- ((WorldServer) this).getServer().getPluginManager().callEvent(event);
+ getServer().getPluginManager().callEvent(event);
return event.isBuildable();
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 6fc168a0..15ffd557 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -5,9 +5,8 @@ import java.util.List;
// CraftBukkit start
import org.bukkit.BlockChangeDelegate;
+import org.bukkit.World.Environment;
import org.bukkit.generator.ChunkGenerator;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.generator.CustomChunkGenerator;
import org.bukkit.craftbukkit.generator.InternalChunkGenerator;
import org.bukkit.craftbukkit.generator.NetherChunkGenerator;
@@ -25,30 +24,18 @@ public class WorldServer extends World implements BlockChangeDelegate {
private EntityList G = new EntityList();
// CraftBukkit start - change signature
- public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, long j, org.bukkit.World.Environment env, ChunkGenerator gen) {
- super(idatamanager, s, j, WorldProvider.a(env.getId()), gen);
+ public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, long j, Environment env, ChunkGenerator gen) {
+ super(idatamanager, s, j, WorldProvider.a(env.getId()), gen, env);
this.server = minecraftserver;
this.dimension = i;
- this.cserver = minecraftserver.server;
- this.world = new CraftWorld(this, gen);
this.pvpMode = minecraftserver.pvpMode;
this.manager = new PlayerManager(minecraftserver, dimension, minecraftserver.propertyManager.getInt("view-distance", 10));
}
public final int dimension;
- private final CraftWorld world;
- private final CraftServer cserver;
public EntityTracker tracker;
public PlayerManager manager;
-
- public CraftWorld getWorld() {
- return world;
- }
-
- public CraftServer getServer() {
- return cserver;
- }
// CraftBukkit end
public void entityJoinedWorld(Entity entity, boolean flag) {
@@ -131,8 +118,8 @@ public class WorldServer extends World implements BlockChangeDelegate {
public boolean a(Entity entity) {
// CraftBukkit start
- LightningStrikeEvent lightning = new LightningStrikeEvent((org.bukkit.World) world, (org.bukkit.entity.LightningStrike) entity.getBukkitEntity());
- this.cserver.getPluginManager().callEvent(lightning);
+ LightningStrikeEvent lightning = new LightningStrikeEvent(getWorld(), (org.bukkit.entity.LightningStrike) entity.getBukkitEntity());
+ getServer().getPluginManager().callEvent(lightning);
if (lightning.isCancelled()) {
return false;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index e2569fba..b92317fc 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -475,7 +475,7 @@ public final class CraftServer implements Server {
return worlds.get(name.toLowerCase());
}
- protected void addWorld(World world) {
+ 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 138964fa..0482b9c0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -21,6 +21,7 @@ import org.bukkit.Chunk;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import org.bukkit.BlockChangeDelegate;
+import org.bukkit.Bukkit;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.Location;
import org.bukkit.TreeType;
@@ -30,23 +31,18 @@ import org.bukkit.generator.BlockPopulator;
public class CraftWorld implements World {
private final WorldServer world;
private Environment environment;
- private final CraftServer server;
- private final ChunkProviderServer provider;
+ private final CraftServer server = (CraftServer)Bukkit.getServer();
private HashMap<Integer, CraftChunk> unloadedChunks = new HashMap<Integer, CraftChunk>();
private final ChunkGenerator generator;
private final List<BlockPopulator> populators = new ArrayList<BlockPopulator>();
private static final Random rand = new Random();
- public CraftWorld(WorldServer world, ChunkGenerator gen) {
+ public CraftWorld(WorldServer world, ChunkGenerator gen, Environment env) {
this.world = world;
- this.server = world.getServer();
- this.provider = world.chunkProviderServer;
this.generator = gen;
- environment = Environment.getEnvironment(world.worldProvider.dimension);
-
- server.addWorld(this);
+ environment = env;
}
public void preserveChunk(CraftChunk chunk) {
@@ -91,7 +87,7 @@ public class CraftWorld implements World {
}
public Chunk getChunkAt(int x, int z) {
- return this.provider.getChunkAt(x, z).bukkitChunk;
+ return this.world.chunkProviderServer.getChunkAt(x, z).bukkitChunk;
}
public Chunk getChunkAt(Block block) {
@@ -99,11 +95,11 @@ public class CraftWorld implements World {
}
public boolean isChunkLoaded(int x, int z) {
- return provider.isChunkLoaded(x, z);
+ return world.chunkProviderServer.isChunkLoaded(x, z);
}
public Chunk[] getLoadedChunks() {
- Object[] chunks = provider.chunks.values().toArray();
+ Object[] chunks = world.chunkProviderServer.chunks.values().toArray();
org.bukkit.Chunk[] craftChunks = new CraftChunk[chunks.length];
for (int i = 0; i < chunks.length; i++) {
@@ -135,7 +131,7 @@ public class CraftWorld implements World {
return false;
}
- provider.queueUnload(x, z);
+ world.chunkProviderServer.queueUnload(x, z);
return true;
}
@@ -145,18 +141,18 @@ public class CraftWorld implements World {
return false;
}
- net.minecraft.server.Chunk chunk = provider.getOrCreateChunk(x, z);
+ net.minecraft.server.Chunk chunk = world.chunkProviderServer.getOrCreateChunk(x, z);
if (save) {
chunk.removeEntities();
- provider.saveChunk(chunk);
- provider.saveChunkNOP(chunk);
+ world.chunkProviderServer.saveChunk(chunk);
+ world.chunkProviderServer.saveChunkNOP(chunk);
}
preserveChunk((CraftChunk) chunk.bukkitChunk);
- provider.unloadQueue.remove(x, z);
- provider.chunks.remove(x, z);
- provider.chunkList.remove(chunk);
+ world.chunkProviderServer.unloadQueue.remove(x, z);
+ world.chunkProviderServer.chunks.remove(x, z);
+ world.chunkProviderServer.chunkList.remove(chunk);
return true;
}
@@ -164,14 +160,14 @@ public class CraftWorld implements World {
public boolean regenerateChunk(int x, int z) {
unloadChunk(x, z, false, false);
- provider.unloadQueue.remove(x, z);
+ world.chunkProviderServer.unloadQueue.remove(x, z);
net.minecraft.server.Chunk chunk = null;
- if (provider.chunkProvider == null) {
- chunk = provider.emptyChunk;
+ if (world.chunkProviderServer.chunkProvider == null) {
+ chunk = world.chunkProviderServer.emptyChunk;
} else {
- chunk = provider.chunkProvider.getOrCreateChunk(x, z);
+ chunk = world.chunkProviderServer.chunkProvider.getOrCreateChunk(x, z);
}
chunkLoadPostProcess(chunk, x, z);
@@ -208,7 +204,7 @@ public class CraftWorld implements World {
for (Player player : players) {
Location loc = player.getLocation();
- if (loc.getWorld() != provider.world.getWorld()) {
+ if (loc.getWorld() != world.chunkProviderServer.world.getWorld()) {
continue;
}
@@ -225,14 +221,14 @@ public class CraftWorld implements World {
public boolean loadChunk(int x, int z, boolean generate) {
if (generate) {
// Use the default variant of loadChunk when generate == true.
- return provider.getChunkAt(x, z) != null;
+ return world.chunkProviderServer.getChunkAt(x, z) != null;
}
- provider.unloadQueue.remove(x, z);
- net.minecraft.server.Chunk chunk = (net.minecraft.server.Chunk) provider.chunks.get(x, z);
+ world.chunkProviderServer.unloadQueue.remove(x, z);
+ net.minecraft.server.Chunk chunk = (net.minecraft.server.Chunk) world.chunkProviderServer.chunks.get(x, z);
if (chunk == null) {
- chunk = provider.loadChunk(x, z);
+ chunk = world.chunkProviderServer.loadChunk(x, z);
chunkLoadPostProcess(chunk, x, z);
}
@@ -241,26 +237,26 @@ public class CraftWorld implements World {
private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int x, int z) {
if (chunk != null) {
- provider.chunks.put(x, z, chunk);
- provider.chunkList.add(chunk);
+ world.chunkProviderServer.chunks.put(x, z, chunk);
+ world.chunkProviderServer.chunkList.add(chunk);
chunk.loadNOP();
chunk.addEntities();
- if (!chunk.done && provider.isChunkLoaded(x + 1, z + 1) && provider.isChunkLoaded(x, z + 1) && provider.isChunkLoaded(x + 1, z)) {
- provider.getChunkAt(provider, x, z);
+ if (!chunk.done && world.chunkProviderServer.isChunkLoaded(x + 1, z + 1) && world.chunkProviderServer.isChunkLoaded(x, z + 1) && world.chunkProviderServer.isChunkLoaded(x + 1, z)) {
+ world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x, z);
}
- if (provider.isChunkLoaded(x - 1, z) && !provider.getOrCreateChunk(x - 1, z).done && provider.isChunkLoaded(x - 1, z + 1) && provider.isChunkLoaded(x, z + 1) && provider.isChunkLoaded(x - 1, z)) {
- provider.getChunkAt(provider, x - 1, z);
+ if (world.chunkProviderServer.isChunkLoaded(x - 1, z) && !world.chunkProviderServer.getOrCreateChunk(x - 1, z).done && world.chunkProviderServer.isChunkLoaded(x - 1, z + 1) && world.chunkProviderServer.isChunkLoaded(x, z + 1) && world.chunkProviderServer.isChunkLoaded(x - 1, z)) {
+ world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x - 1, z);
}
- if (provider.isChunkLoaded(x, z - 1) && !provider.getOrCreateChunk(x, z - 1).done && provider.isChunkLoaded(x + 1, z - 1) && provider.isChunkLoaded(x, z - 1) && provider.isChunkLoaded(x + 1, z)) {
- provider.getChunkAt(provider, x, z - 1);
+ if (world.chunkProviderServer.isChunkLoaded(x, z - 1) && !world.chunkProviderServer.getOrCreateChunk(x, z - 1).done && world.chunkProviderServer.isChunkLoaded(x + 1, z - 1) && world.chunkProviderServer.isChunkLoaded(x, z - 1) && world.chunkProviderServer.isChunkLoaded(x + 1, z)) {
+ world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x, z - 1);
}
- if (provider.isChunkLoaded(x - 1, z - 1) && !provider.getOrCreateChunk(x - 1, z - 1).done && provider.isChunkLoaded(x - 1, z - 1) && provider.isChunkLoaded(x, z - 1) && provider.isChunkLoaded(x - 1, z)) {
- provider.getChunkAt(provider, x - 1, z - 1);
+ if (world.chunkProviderServer.isChunkLoaded(x - 1, z - 1) && !world.chunkProviderServer.getOrCreateChunk(x - 1, z - 1).done && world.chunkProviderServer.isChunkLoaded(x - 1, z - 1) && world.chunkProviderServer.isChunkLoaded(x, z - 1) && world.chunkProviderServer.isChunkLoaded(x - 1, z)) {
+ world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x - 1, z - 1);
}
}
}