Witam, piszę plugin, który gdy gracz nie biegnie bedzie regenerował mu głód.
Niestety napotkałem problem iż nie mogę przekazać zmiennej evt pobranej z Listener'a PlayerMoveEvent
do Scheduler.
Posiadam taki kod:
public void onPlayerMove(PlayerMoveEvent evt) {
if(evt.getPlayer().isSprinting()) {
Bukkit.getScheduler().cancelTask(taskID);
food = false;
}
else {
food = true;
wait = Bukkit.getScheduler().isQueued(taskID);
if(wait == false && food == true && evt.getPlayer().getFoodLevel() < 20) {
taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInst(), new Runnable(){
public void run(){
Player p = evt.getPlayer();
if(p.getFoodLevel() >= 20) {
p.sendMessage("§7Koniec regeneracji energi.§7");
Bukkit.getScheduler().cancelTask(taskID);
}else {
p.setFoodLevel(p.getFoodLevel() + 1);
p.sendMessage("§7Zregenerowano§7 §e§l1 pkt§e§l §7energii!§7");
}
p.sendMessage("§7Aktualna ilość energii:§7 §3§l"+p.getFoodLevel()+" pkt");
}
}, 5*20, 3*20);
}
}
}
Pytanie brzmi, jak przekazać zmienną evt do Scheduler..
Aktualnie występuje błąd: "Cannot refer to the non-final local variable evt defined in an enclosing scope".
Aby go naprawić należy dodać final dozmiennej evt, ale wtedy zmienna nie będzie się zmieniać zależnie od gracza.
Ogólnie cały kod działa przy 1 nym graczu, problem pojawia się przy większej ilości graczy.