问题
I am trying to teleport a user to their own realm using the following code:
@EventHandler
public static void onPortalTravel(PlayerPortalEvent event) throws Exception {
if(event.getCause() == PlayerPortalEvent.TeleportCause.END_PORTAL) {
int x = event.getPlayer().getLocation().getBlockX();
int y = event.getPlayer().getLocation().getBlockY();
int z = event.getPlayer().getLocation().getBlockZ();
String[] data = getPageData("http://example.com/game.php?type=getRealm&location="+x+":"+y+":"+z ).split(":"); // THIS RETURNS <username>:<oldblockid>
String realm = data[0];
int oldID = Integer.parseInt(data[1].trim());
Bukkit.getServer().getWorld("world").getBlockAt(x, y, z).setTypeId(oldID);
*err* event.getPlayer().teleport(new Location(Bukkit.getWorld("realms/" + realm), 1, 65, 16.5));
}
}
and the error is:
Caused by: java.lang.NullPointerException
at org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer.teleport(CraftPlayer.java:395)
at org.bukkit.craftbukkit.v1_6_R2_entity.CraftEntity.teleport(CraftEntity.java:199)
at com.mysite.plugin.Start.onPortalTravel(Start.java:202)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
... 26 more
回答1:
It seems like this world is not loaded yet. You have to load it first.
This snippets checks if the world is null. If it is null, it loads(if the world already exists) or creates(if the world doesn't exist yet) the world.
@EventHandler
public static void onPortalTravel(PlayerPortalEvent event) throws Exception {
if (event.getCause() == PlayerPortalEvent.TeleportCause.END_PORTAL) {
int x = event.getPlayer().getLocation().getBlockX();
int y = event.getPlayer().getLocation().getBlockY();
int z = event.getPlayer().getLocation().getBlockZ();
String[] data = getPageData("http://example.com/game.php?type=getRealm&location="+x+":"+y+":"+z).split(":"); // THIS RETURNS <username>:<oldblockid>
String realm = data[0];
int oldID = Integer.parseInt(data[1].trim());
Bukkit.getServer().getWorld("world").getBlockAt(x, y, z).setTypeId(oldID);
World world = Bukkit.getWorld("realms/" + realm);
if(world == null){
//Loads a world with the name given in the constructor
WorldCreator wc = new WorldCreator("realms/" + realm);
world = Bukkit.createWorld(wc);
}
event.getPlayer().teleport(new Location(world, 1, 65,16.5));
}
}
来源:https://stackoverflow.com/questions/18212244/bukkit-teleport-nullpointerexception