Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Minecraft Bukkit插件:我的小型游戏传送机不工作_Java_Plugins_Minecraft_Bukkit - Fatal编程技术网

Java Minecraft Bukkit插件:我的小型游戏传送机不工作

Java Minecraft Bukkit插件:我的小型游戏传送机不工作,java,plugins,minecraft,bukkit,Java,Plugins,Minecraft,Bukkit,我正在尝试制作一个小游戏,所以当我想让玩家在倒计时后自动传送,但没有人传送时,我发出了一个命令来启动游戏并传送(这是有效的),这是我的代码(这是冰岛服务器,所以变量名称在冰岛语和一些东西上): 主类中的唯一性: public void onEnable() { stada.setjaStodu(stada.Lobby); nidurtalning.keyra = true; new Thread(new nidurtalning()).start(); r

我正在尝试制作一个小游戏,所以当我想让玩家在倒计时后自动传送,但没有人传送时,我发出了一个命令来启动游戏并传送(这是有效的),这是我的代码(这是冰岛服务器,所以变量名称在冰岛语和一些东西上):

主类中的唯一性:

    public void onEnable() {
    stada.setjaStodu(stada.Lobby);
    nidurtalning.keyra = true;
    new Thread(new nidurtalning()).start();
    registerEvt();
    getCmd();
    for (Player p : Bukkit.getOnlinePlayers()) {
        p.teleport(playerJoin.wait);
        p.setGameMode(GameMode.ADVENTURE);
    }

}
当倒计时变量为0(klukka)时:

和传送类:

public class byrja {


public static void teleportToGame(Player p){
    World war = Bukkit.getWorld("Empty");
    Location leikur = new Location(war, -416, 253, 175);
    p.teleport(leikur);
}
}

使用永不

Thread.sleep();
因为它会暂停整个线程! 即使您使用的是asnc调度程序,它仍然不好!(这将花费不必要的资源)

而是使用RunTaskLater调度程序

然而。。。你确定世界是空的吗`

总之,该功能应能正常工作

大概是这样的:

protected void endCountdown(int klukka) {
    if (klukka == 0) {
        Bukkit.getScheduler().runTaskLater(pl, new Runnable() {
            @Override
            public void run() {
                Bukkit.getOnlinePlayers().stream().forEach(all -> {
                    all.playSound(all.getLocation(), Sound.LEVEL_UP, 100, 1);
                    teleportToGame(all);
                });
                // DO MORE STUFF IF NEEDED
            }
        }, 10);
    }
}

private void teleportToGame(Player p) {
    World war = Bukkit.getWorld("Empty");
    Location loc = new Location(war, -416, 253, 175);
    p.teleport(loc);
}

使用永不

Thread.sleep();
因为它会暂停整个线程! 即使您使用的是asnc调度程序,它仍然不好!(这将花费不必要的资源)

而是使用RunTaskLater调度程序

然而。。。你确定世界是空的吗`

总之,该功能应能正常工作

大概是这样的:

protected void endCountdown(int klukka) {
    if (klukka == 0) {
        Bukkit.getScheduler().runTaskLater(pl, new Runnable() {
            @Override
            public void run() {
                Bukkit.getOnlinePlayers().stream().forEach(all -> {
                    all.playSound(all.getLocation(), Sound.LEVEL_UP, 100, 1);
                    teleportToGame(all);
                });
                // DO MORE STUFF IF NEEDED
            }
        }, 10);
    }
}

private void teleportToGame(Player p) {
    World war = Bukkit.getWorld("Empty");
    Location loc = new Location(war, -416, 253, 175);
    p.teleport(loc);
}

如果我没有记错,线程的默认
UncaughtExceptionHandler
可以是
null
,这意味着不会打印异常。我猜是
Bukkit.getWorld(“Empty”)
返回空值,当
Location
尝试使用
war
传送玩家时,你会得到一个NPE。这里确实不需要
线程
,Bukkit有自己的调度程序,如果我没有记错的话,你可以使用(
Bukkit#getScheduler
),线程的默认
UncaughtExceptionHandler
可以是
null
,这意味着不会打印异常。我猜是
Bukkit.getWorld(“Empty”)
返回空值,当
Location
尝试使用
war
传送玩家时,你会得到一个NPE。这里确实不需要
线程
,Bukkit有自己的调度器,您可以使用(
Bukkit\getScheduler