我正在尝试使用以下代码将用户传送到他们自己的领域:
@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));
}
}
错误是:
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
最佳答案
似乎这个世界还没有加载。您必须先加载它。
此摘要检查世界是否为空。如果为null,则加载(如果世界已经存在)
或创造(如果世界尚不存在)世界。
@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));
}
}