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