Bukkit teleport - nullPointerException

浪子不回头ぞ 提交于 2019-12-02 17:51:51

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!