summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorEdGruberman <ed@rjump.com>2013-02-03 12:55:51 -0700
committerfeildmaster <admin@feildmaster.com>2013-02-04 18:53:06 -0600
commitefe8e9a7f504aed2d187e4aeb3bc55460ddf8eca (patch)
tree57d0e2fc9539addc6bdb8d822bdf96237998701b /src/main
parent4d3865a03639eac0da60cd830ba4feee0bb53121 (diff)
downloadcraftbukkit-efe8e9a7f504aed2d187e4aeb3bc55460ddf8eca.tar
craftbukkit-efe8e9a7f504aed2d187e4aeb3bc55460ddf8eca.tar.gz
craftbukkit-efe8e9a7f504aed2d187e4aeb3bc55460ddf8eca.tar.lz
craftbukkit-efe8e9a7f504aed2d187e4aeb3bc55460ddf8eca.tar.xz
craftbukkit-efe8e9a7f504aed2d187e4aeb3bc55460ddf8eca.zip
Always return a TravelAgent; Fixes BUKKIT-3541
Recent changes caused PlayerPortalEvent to suddenly return null unexpectedly and could end up in NPEs resulting that did not before. This commit addresses that situation by always ensuring a TravelAgent instance is returned. The TravelAgent for world 0 is returned arbitrarily in an effort to compensate for plugins that are implementation dependent and expect some form of a TravelAgent to be accessible in the event at all times.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/net/minecraft/server/Entity.java2
-rw-r--r--src/main/java/net/minecraft/server/PlayerList.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java5
3 files changed, 7 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 87efe2cb..71707ed1 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1764,7 +1764,7 @@ public abstract class Entity {
Location exit = exitWorld != null ? minecraftserver.getPlayerList().calculateTarget(enter, minecraftserver.getWorldServer(i)) : null;
boolean useTravelAgent = exitWorld != null && !(this.dimension == 1 && exitWorld.dimension == 1); // don't use agent for custom worlds or return from THE_END
- TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().s() : null;
+ TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().s() : org.bukkit.craftbukkit.CraftTravelAgent.DEFAULT; // return arbitrary TA to compensate for implementation dependent plugins
EntityPortalEvent event = new EntityPortalEvent(this.getBukkitEntity(), enter, exit, agent);
event.useTravelAgent(useTravelAgent);
event.getEntity().getServer().getPluginManager().callEvent(event);
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index c9810b4b..b0bb672e 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -451,7 +451,7 @@ public abstract class PlayerList {
}
}
- TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().s() : null;
+ TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().s() : org.bukkit.craftbukkit.CraftTravelAgent.DEFAULT; // return arbitrary TA to compensate for implementation dependent plugins
PlayerPortalEvent event = new PlayerPortalEvent(entityplayer.getBukkitEntity(), enter, exit, agent, cause);
event.useTravelAgent(useTravelAgent);
Bukkit.getServer().getPluginManager().callEvent(event);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
index b21714e5..3a313e53 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
@@ -9,12 +9,17 @@ import org.bukkit.TravelAgent;
public class CraftTravelAgent extends PortalTravelAgent implements TravelAgent {
+ public static TravelAgent DEFAULT = null;
+
private int searchRadius = 128;
private int creationRadius = 16;
private boolean canCreatePortal = true;
public CraftTravelAgent(WorldServer worldserver) {
super(worldserver);
+ if (DEFAULT == null && worldserver.dimension == 0) {
+ DEFAULT = (TravelAgent) worldserver.s();
+ }
}
public Location findOrCreate(Location target) {