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
)