Bukkit |单独玩家的倒计时/计时器

时间:2014-05-13 22:55:52

标签: timer bukkit

所以我一直在研究一个与计时器非常紧张的新迷你游戏。它基本上是一个快节奏的跑酷游戏,但问题是,当我的计时器工作时,它们会同时影响所有在线玩家。我如何限制玩家的计时器?我读了一下,我看到很多解决方案都是将玩家名称和任务ID存储在HashMap中,但我不知道从那一点开始。一点指导将不胜感激!

2 个答案:

答案 0 :(得分:1)

您只需为每位玩家创建一个单独的计时器,然后将该ID存储在HashMap中:

public Map<String, Integer> taskID = new HashMap<String, Integer>();

//call this to schedule the task
public void scheduleRepeatingTask(final Player p, long ticks){
  final int tid = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable(){
    public void run(){
      //do you want here
    }
  },ticks, ticks); //schedule task with the ticks specified in the arguments

  taskID.put(p.getName(), tid); //put the player in a hashmap
}

//call this to end the task
public void endTask(Player p){
  if(taskID.containsKey(p.getName()){
    int tid = taskID.get(p.getName()); //get the ID from the hashmap
    plugin.getServer().getScheduler().cancelTask(tid); //cancel the task
    taskID.remove(p.getName()); //remove the player from the hashmap
  }
}

答案 1 :(得分:0)

不要为每个玩家单独创建任务,如上所述(我没有足够的评论声誉)使任务减少HashMap中的计数器,当计数器达到零时从HashMap中删除玩家UUID

为每个玩家编写单独的任务是没有意义的,它会增加CPU负载,因为它必须处理大量的线程而不是一个