如何在服务器范围内设置计时器

时间:2016-05-22 19:52:35

标签: java timer bukkit

瓷砖没有正确描述,所以我试着在这里描述一下:

我有一个bukkit插件,它是一个小游戏。

它必须有一些代码运行10分钟,然后运行另一个代码,直到游戏结束

我目前有这个: 定时器计时器=新的计时器();             timer.schedule(new TimerTask(){

Destroy(gameObject.name);
dict.Remove(gameObject.name);

//代码

之后

然而,这只会影响单个玩家,而不会影响那个世界。 因此,如果一个玩家加入,他将等待10分钟,然后运行代码的另一部分,依此类推,当目的是10分钟开始自己兜售,即使没有玩家。 感谢

1 个答案:

答案 0 :(得分:1)

您的问题可能是因为您的代码全部由事件触发而引起的? 这意味着它只会影响触发该事件的玩家。

相反,您需要一个不会触发事件的通用插件(登录除外),而是使用计时器,然后抓取所有玩家的列表并在每个/所有玩家上运行您的代码。然后在10分钟后,它将退出到您的其他代码并在其余时间运行。

编辑:粗略的例子:

import org.bukkit.plugin.java.JavaPlugin;

    public final class {$PluginName} extends JavaPlugin {
        @Override
        public void onEnable() { //This should proberbly be done onCommand rather than onEnable
            Thread thread = new Thread(new Runnable() {

                @Override
                public void run() {
                    long time = System.currentTimeMillis();
                    while (some condition....){
                        //load list of players
                        //now iterate through player list and do your code
                        //check if 10min has passed:
                        if ((System.currentTimeMillis() - time) > 600000){
                            //now break the loop and run your other code for the rest of the minigame
                            break;
                        }
                    }
                    //code for the rest of the minigame
                    while (true){
                        //load list of players
                        //now iterate through player list and do your code for the rest of the time
                    }
                }
           }); 
           thread.start();               
        }
    }