我正在尝试制作一个小游戏,所以当我想让玩家在倒计时后自动传送,但没有人传送,我发出命令开始游戏和传送(有效),所以这是我的代码(这是冰岛服务器所以变量名称是冰岛语和一些东西):
主要类中的onEnable:
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):
if(klukka == 0){
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
Bukkit.shutdown();
}
for(Player p : Bukkit.getOnlinePlayers()){
p.playSound(p.getLocation(), "random.levelup", 100.0F, 1F);
byrja.teleportToGame(p);
}
stada.setjaStodu(stada.Leikur);
chat.tilkynna("Og þið megið byrja!", false);
keyra = false;
}
传送课程:
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);
}
}
答案 0 :(得分:0)
使用从不
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);
}