CountDown Plugin Probleme

Dieses Thema im Forum "Programmierung" wurde erstellt von =McAnarchy11.DE=, 29. Januar 2013.

  1. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    Hallo,

    Ich Arbeite grade an ein CountDown Plugin,

    Nur es geht nicht so wie ich es möchte!

    Code:
    Code (Text):
    1.  
    2.     int i = 10;
    3.    
    4.     @SuppressWarnings("deprecation")
    5.     public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args) {
    6.         if (!(sender instanceof Player)) {
    7.             cSystem.log.info("Du kannst diesen Befehl nicht in der Console benutze!");
    8.             return true;
    9.           }
    10.         final Player pl = (Player)sender;
    11.             if (!pl.hasPermission("System.CountDown")) {
    12.                 pl.sendMessage(plugin.rechte);
    13.                 return true;
    14.               }
    15.           Bukkit.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() {
    16.             public void run() {
    17.                 if (i != -1) {
    18.                     if (i != 0) {
    19.                         Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §aIn " + i + " Sekunden beginnt ein Event! Macht euch bereit!");
    20.                         i--;
    21.                     } else {
    22.                         Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §a");
    23.                                                 i--;
    24.                     }
    25.                 }
    26.             }
    27.         }, 0L, 20L);
    28.         return true;
    29.   }
    Der CountDown geht nur einmal!

    Er geht erst nach ein Reload wieder,
    wo ist ein Fehler?
    -UPDATE-

    Ich benutze die neuste CraftBukkit.
     
    #1
  2. games6471
    Online

    games6471

    Du fragst gar nicht nach dem Namen des Befehls ab.
     
    #2
  3. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    games6471, in einer Extra classe ok....
     
    #3
  4. Crafter6432
    Offline

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    686
    Aus einem Asynchronen Thread sollte man keine Bukkit aufrufe verwenden außer sie sind Threadsicher lies dir am besten mal:
    http://wiki.bukkit.org/Scheduler_Programming
    durch,bevor du deinen Thread startest solltest du i=10; setzen, dann geht es auch ohne reload.
     
    #4
  5. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    Erst mal danke,

    Ich habe das mal mit 'i=10' mit eingebaut,

    Aber die Erste Message kommt nur noch! neuer Code:

    int i = 10;

    Code (Text):
    1.     @SuppressWarnings("deprecation")
    2.     public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args) {
    3.         if (!(sender instanceof Player)) {
    4.             cSystem.log.info("Du kannst diesen Befehl nicht in der Console benutze!");
    5.             return true;
    6.           }
    7.         final Player pl = (Player)sender;
    8.             if (!pl.hasPermission("System.CountDown")) {
    9.                 pl.sendMessage(plugin.rechte);
    10.                 return true;
    11.               }
    12.           Bukkit.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() {
    13.             public void run() {
    14.                 if (i != -1) {
    15.                     if (i != 0) {
    16.                                                 i=10;
    17.                         Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §aIn " + i + " Sekunden beginnt ein Event! Macht euch bereit!");
    18.                         i--;
    19.                     } else {
    20.                         Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §a");
    21.                                                 i--;
    22.                     }
    23.                 }
    24.             }
    25.         }, 0L, 20L);
    26.         return true;
    27.   }
    --UPDATE--
    Ich glaube ich habe es gleich!
     
    #5
  6. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Nimm doch eine SCHLEIFE! Wieso machst du eine If-Abfrage?!

    Improvisierter Code von mir:
    onCommand:
    Code (Text):
    1.  
    2. for(int t = 10; t > 0; t--)
    3. {
    4.     countdown(t);
    5. }
    6.  
    Scheduler:
    Code (Text):
    1.  
    2. public void countdown(int t)
    3. {
    4.     Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
    5.     {
    6.         public void run()
    7.         {
    8.             Bukkit.broadcastMessage("Reload in " + t + " Sekunden!");
    9.         }
    10.     },t * 20);
    11. }
    12.  
     
    #6
  7. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    Erst mal danke,

    nur es ist so:

    Code (Text):
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6 usw,
     
    #7
  8. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Dann dreh's um? ...
     
    #8
  9. MrOAriO
    Offline

    MrOAriO

    Registriert seit:
    6. Oktober 2012
    Beiträge:
    135
    Minecraft:
    OAriO
    Dann einfach so :
    for(int t = 10; t < 0; t--)
    {
    countdown(t);
    }
     
    #9
  10. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    So habe ich,

    Aber geht immer noch nicht,

    Neuer Code:
    Code (Text):
    1.  
    2.     public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args) {
    3.         if (!(sender instanceof Player)) {
    4.             cSystem.log.info("Du kannst diesen Befehl nicht in der Console benutze!");
    5.             return true;
    6.           }
    7.         final Player pl = (Player)sender;
    8.             if (!pl.hasPermission("cSystem.CountDown")) {
    9.                 pl.sendMessage(plugin.rechte);
    10.                 return true;
    11.               }
    12.            
    13.             for(int t = 10; t < 0; t--)
    14.             {
    15.                
    16.             countdown(t);
    17.            
    18.             }
    19.            
    20.             return true;
    21.     }
    22.  
    23.     private void countdown(final int t) {
    24.             Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
    25.             {
    26.                 public void run()
    27.                 {
    28.                     Bukkit.broadcastMessage("§7[§a§lCount§c§lDown§7] §ain " + t + " Sekunden beginnt ein Event! Macht euch bereit!");
    29.                 }
    30.             },t * 20);
    31.   }
    32. }
     
    #10
  11. Calenria
    Offline

    Calenria

    Registriert seit:
    28. Juli 2012
    Beiträge:
    387
    Minecraft:
    Calenria
    Probier mal sowas, konnte Problemlos auch mehrere gleichzeitig starten und da der Thread Async ist stört es auch nicht wenn man ihn schlafen legt.
    Code (Text):
    1.  
    2.     public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    3.         final int sec = Integer.parseInt(args[0]);
    4.         if (cmd.getName().equalsIgnoreCase("countdown")) {
    5.             Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() {
    6.                 @Override
    7.                 public void run() {
    8.                     int count = sec;
    9.                     while (true) {
    10.                         Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §aIn " + count + " Sekunden beginnt ein Event! Macht euch bereit!");
    11.                         count--;
    12.                         if (count == 0) {
    13.                             Bukkit.getServer().broadcastMessage("§7[§aCount§cDown§7] §aEvent beginnt! Macht euch bereit!");
    14.                             break;
    15.                         }
    16.                         try {
    17.                             Thread.sleep(1000);
    18.                         } catch (InterruptedException e) {
    19.                             // TODO Auto-generated catch block
    20.                             e.printStackTrace();
    21.                         }
    22.                     }
    23.                 }
    24.             });
    25.         }
    26.     }
    27.  
    28.  
     
    #11
  12. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

    Registriert seit:
    6. Januar 2013
    Beiträge:
    54
    @Calenria, Danke ;)
     
    #12