From ae43b837b026f2afec55558f83b2a854857270e9 Mon Sep 17 00:00:00 2001 From: Rigby Date: Tue, 26 Jul 2011 21:14:52 +0100 Subject: [PATCH] Prevent Nether Portals from teleporting the player from Bukkit worlds to the Nether. Plugins would need to provide a To Location for Nether Portals to work in Bukkit Worlds. --- .../server/ServerConfigurationManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java index 0d8d621990..c7bb9f073d 100644 --- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java @@ -276,16 +276,24 @@ public class ServerConfigurationManager { // CraftBukkit start -- Replaced the standard handling of portals with a more customised method. int dimension = entityplayer.dimension; WorldServer fromWorld = this.server.getWorldServer(dimension); - WorldServer toWorld = this.server.getWorldServer(dimension == -1 ? 0 : -1); + WorldServer toWorld = null; + if (dimension < 10) { + int toDimension = dimension == -1 ? 0 : -1; + for (WorldServer world : this.server.worlds) { + if (world.dimension == toDimension) { + toWorld = world; + } + } + } double blockRatio = dimension == -1 ? 8 : 0.125; Location fromLocation = new Location(fromWorld.getWorld(), entityplayer.locX, entityplayer.locY, entityplayer.locZ, entityplayer.yaw, entityplayer.pitch); - Location toLocation = new Location(toWorld.getWorld(), (entityplayer.locX * blockRatio), entityplayer.locY, (entityplayer.locZ * blockRatio), entityplayer.yaw, entityplayer.pitch); + Location toLocation = toWorld == null ? null : new Location(toWorld.getWorld(), (entityplayer.locX * blockRatio), entityplayer.locY, (entityplayer.locZ * blockRatio), entityplayer.yaw, entityplayer.pitch); org.bukkit.craftbukkit.PortalTravelAgent pta = new org.bukkit.craftbukkit.PortalTravelAgent(); PlayerPortalEvent event = new PlayerPortalEvent((Player) entityplayer.getBukkitEntity(), fromLocation, toLocation, pta); Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { + if (event.isCancelled() || event.getTo() == null) { return; }