From f1a35effb05e06c0ae5556f76234a41e3ae3704e Mon Sep 17 00:00:00 2001 From: EvilSeph Date: Sun, 29 Jan 2012 06:36:43 -0500 Subject: [PATCH] Added useExactLoginLocation(). Closes BUKKIT-145 useExactLoginLocation() looks for settings.use-exact-login-location within bukkit.yml. If true, we will bypass Vanilla's behaviour of checking for collisions and moving the player if needed when they login. If false, we will continue to follow Vanilla's behaviour and move players that 'collide' with objects when they login. --- .../minecraft/server/ServerConfigurationManager.java | 10 +++++++--- src/main/java/org/bukkit/craftbukkit/CraftServer.java | 4 ++++ src/main/resources/configurations/bukkit.yml | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java index f6595e3e7..62d370897 100644 --- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java @@ -120,11 +120,15 @@ public class ServerConfigurationManager { worldserver.chunkProviderServer.getChunkAt((int) entityplayer.locX >> 4, (int) entityplayer.locZ >> 4); - while (worldserver.a(entityplayer, entityplayer.boundingBox).size() != 0) { - entityplayer.setPosition(entityplayer.locX, entityplayer.locY + 1.0D, entityplayer.locZ); + // CraftBukkit start + if (!cserver.useExactLoginLocation()) { + while (worldserver.a(entityplayer, entityplayer.boundingBox).size() != 0) { + entityplayer.setPosition(entityplayer.locX, entityplayer.locY + 1.0D, entityplayer.locZ); + } + } else { + entityplayer.setPosition(entityplayer.locX, entityplayer.locY + entityplayer.getBukkitEntity().getEyeHeight(), entityplayer.locZ); } - // CraftBukkit start PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(this.cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.name + " joined the game."); this.cserver.getPluginManager().callEvent(playerJoinEvent); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 5f8216f5d..a7e98d74a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -771,6 +771,10 @@ public final class CraftServer implements Server { return this.console.allowFlight; } + public boolean useExactLoginLocation() { + return configuration.getBoolean("settings.use-exact-login-location"); + } + public ChunkGenerator getGenerator(String world) { ConfigurationSection section = configuration.getConfigurationSection("worlds"); ChunkGenerator result = null; diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml index 392ca9c0a..cf93fab41 100644 --- a/src/main/resources/configurations/bukkit.yml +++ b/src/main/resources/configurations/bukkit.yml @@ -20,6 +20,7 @@ settings: permissions-file: permissions.yml update-folder: update ping-packet-limit: 100 + use-exact-login-location: false aliases: icanhasbukkit: - version