Szymoon202 15 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 Cześć, da się jakoś usunąć, albo anulować dany task? @EventHandler public void onJoin(PlayerJoinEvent e) { Player p = e.getPlayer(); p.setLevel(45); p.setExp((float) 0.99); Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInst(), new Runnable() { int level = 45; double exp = 0.99; public void run() { level--; exp = exp - 0.022; if(level != 0) { p.playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 100, 100); p.setLevel(level); p.setExp((float) exp); } else { anulujtentask(); } } }, 0, 20); } Próbowałem nadawać temu task'u id, i potem je anulować, ale tak też nie działa. @EventHandler public void onJoin(PlayerJoinEvent e) { Player p = e.getPlayer(); p.setLevel(45); p.setExp((float) 0.99); task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInst(), new Runnable() { int level = 45; double exp = 0.99; public void run() { level--; exp = exp - 0.022; if(level != 0) { p.playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 100, 100); p.setLevel(level); p.setExp((float) exp); } else { Bukkit.getScheduler().cancelTask(task); } } }, 0, 20); } Ktoś ma jakiś pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 GotoFinal 195 Opublikowano 21 lutego 2018 Udostępnij Opublikowano 21 lutego 2018 użyj BukkitRunnable, znacznie wygodniejsze do takiej zabaw new BukkitRunnable(){ @Override public void run() { System.out.println("Z tasku"); this.cancel(); // i anulowany } }.runTaskTimer(plugin, 0, 20); możesz też przypisać do zmiennej i anulować kiedy chcesz z innego miejsca: BukkitTask printTask = new BukkitRunnable() { @Override public void run() { System.out.println("Z tasku"); this.cancel(); // i anulowany } }.runTaskTimer(plugin, 0, 20); // w innym miejscu: printTask.cancel(); Szymoon202 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Szymoon202 15 Opublikowano 22 lutego 2018 Autor Udostępnij Opublikowano 22 lutego 2018 @GotoFinal zrobiłem za Twoją radą, lecz nie mogę w ogóle używać zmiennej task. @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { Player p = e.getPlayer(); Main.getPlayers().put(p, true); p.setLevel(45); p.setExp((float) 0.99); BukkitTask task = new BukkitRunnable() { int level = 45; double exp = 0.99; public void run() { if(!Main.getTasks().containsKey(p)) { Main.getTasks().put(p, task); } level--; exp = exp - 0.022; if(level != 0) { p.setLevel(level); p.setExp((float) exp); } } }.runTaskTimer(Main.getInst(), 0, 20); } Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 GotoFinal 195 Opublikowano 22 lutego 2018 Udostępnij Opublikowano 22 lutego 2018 no bo w środku tego nie masz dostępu do tej zmiennej, tam musisz odwołać się do "this" tylko też "this" odwołuje się tam do instancji BukkitRunnable nie BukkitTask, ale możesz pobrać ID tasku i wtedy znaleźć w schedulerze danego taska. Z tym że sensowniej byłoby chyba dodawać task do mapy za taskiem Szymoon202 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
Szymoon202 15
Cześć, da się jakoś usunąć, albo anulować dany task?
Próbowałem nadawać temu task'u id, i potem je anulować, ale tak też nie działa.
Ktoś ma jakiś pomysł?
Odnośnik do komentarza
Udostępnij na innych stronach
3 odpowiedzi na to pytanie
Rekomendowane odpowiedzi