1. Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

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. Werbung
    Online

    Werbung

  3. games6471
    Online

    games6471

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

    =McAnarchy11.DE= Gesperrt

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

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    682
    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
  6. =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
  7. 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
  8. =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
  9. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Dann dreh's um? ...
     
    #8
  10. 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
  11. =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
  12. Calenria
    Offline

    Calenria

    Registriert seit:
    28. Juli 2012
    Beiträge:
    386
    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
  13. =McAnarchy11.DE=
    Offline

    =McAnarchy11.DE= Gesperrt

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