Bukkit Repeating Task beenden

Dieses Thema im Forum "Programmierung" wurde erstellt von Funzocker1, 18. Juni 2013.

  1. Funzocker1
    Offline

    Funzocker1

    Registriert seit:
    21. Oktober 2012
    Beiträge:
    127
    Heyho liebe Coder :). Ich dachte mir heute einfach mal:
    Auf meinem Server wäre doch ein Antilogout Plugin cool. Also habe ich mich drann gemacht und schnell was hin gecodet.
    Code (Text):
    1.     @EventHandler(priority = EventPriority.HIGHEST)
    2.     public void onEnti(EntityDamageByEntityEvent e) {
    3.         if(e.isCancelled() == false) {
    4.             if(e.getEntity() instanceof Player) {
    5.                 if(e.getDamager() instanceof Player) {
    6.                    
    7.  
    8.                    
    9.                    
    10.                    
    11.                     final Player victim = (Player) e.getEntity();
    12.                     final Player damager = (Player) e.getDamager();
    13.                     if(plugin.logout.containsKey(e.getEntity()) == false) {
    14.                         victim.sendMessage("§7[§6System§7] §cDu bist nun im Kampf. Loggst du dich aus verlierst du dein Inventar");
    15.                         plugin.logout.put(victim, 15);
    16.                         if(plugin.logout.containsKey(damager) == false) {
    17.                             damager.sendMessage("§7[§6System§7] §cDu bist nun im Kampf. Loggst du dich aus verlierst du dein Inventar");
    18.                             plugin.logout.put(damager, 15);
    19.                         }else {
    20.                             plugin.logout.put(damager, 15);
    21.                         }
    22.                          
    23.                     }else {
    24.                         plugin.logout.put(victim, 15);
    25.                         if(plugin.logout.containsKey(damager) == false) {
    26.                             damager.sendMessage("§7[§6System§7] §cDu bist nun im Kampf. Loggst du dich aus verlierst du dein Inventar");
    27.                             plugin.logout.put(damager, 15);
    28.                            
    29.                         }else {
    30.                             plugin.logout.put(damager, 15);
    31.                         }
    32.                     }
    33.                    
    34.                 plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin,new Runnable() {
    35.  
    36.                    
    37.                         @Override
    38.                         public void run() {
    39.                             try{
    40.                            
    41.                             int victimcount = plugin.logout.get(victim) - 1;
    42.                             int damagercount = plugin.logout.get(damager) -1;
    43.                             System.out.println(victimcount);
    44.                             System.out.println(damagercount);
    45.                             plugin.logout.put(victim, victimcount);
    46.                             plugin.logout.put(damager, damagercount);
    47.                            
    48.                             if(victimcount <= 0) {
    49.                                 victim.sendMessage("§7[§6System§7] §aDu hast den Kampf verlassen. Du kannst dich wieder ausloggen");
    50.                                 plugin.logout.remove(victim);
    51.                             }
    52.                             if(damagercount <= 0) {
    53.                                 damager.sendMessage("§7[§6System§7] §aDu hast den Kampf verlassen. Du kannst dich wieder ausloggen");
    54.                                 plugin.logout.remove(damager);
    55.                             }
    56.                         }catch(Exception e) {
    57.                            
    58.                         }
    59.                         }
    60.                        
    61.                     },0,20);
    62.                    
    63.                 }
    64.             }
    65.            
    66.            
    67.            
    68.            
    69.            
    70.            
    71.            
    72.         }
    73.     }
    Dann ist mir aber aufgefallen das der Countdown beim ersten Schlag funktioniert aber bei allen folgenden immer schneller wird. Jetzt ist es meiner Meinung nach das Problem das die Tasks nicht beendet werden und so immer mehr Tasks runterzählen. Jetzt wollte ich fragen wie ich dieses Problem am besten lösen könnte bzw. die Task einfach wieder schließen kann um 1. Ramen zu sparen und 2. Mein Problem damit zu beheben.
    Ok hoffe auf Antworten lg
     
    #1
  2. ChunkNorris
    Offline

    ChunkNorris

    1. Du rufst methoden der Player-Klasse asynchron auf.
    2. Der Scheduler gibt dir eine Task-ID zurück, mit der du den Task beenden kannst. -> Scheduler.cancelTask(int taskID)
     
    #2