ServerPlugin Plugin warten lassen bzw nach einer gewissen Zeit etwas durchführen

Dieses Thema im Forum "Programmierung" wurde erstellt von Kallo1994, 18. Februar 2014.

  1. Kallo1994
    Offline

    Kallo1994

    Registriert seit:
    18. Februar 2014
    Beiträge:
    4
    Moin Leute,
    Ich möchte gerne das mein Event Plugin, zu unterschiedlichen Zeiten Messages ausgibt.
    Nur leider funktioniert es nicht so, wie ich es haben möchte.
    Ich hoffe ihr könnt mir helfen ;)
    z.b:
    PHP:
    1.  
    2. eventSendMessage(" Das Event startet jetzt"); /* Das wird noch ausgefürht */
    3. eventWait(10, " Bla Bla Bla"); /* Die beiden nicht mehr, er überspringt es einfach. */
    4. eventWait(20, "bla bla bla");
    5. /* folge Code wird wieder ausgeführt */
    6. }
    7.  
    8. /* Die Mehode fürs Warten*/
    9.     public void eventWait(final long sek, final String message){
    10.         Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    11.             public void run() {
    12.                 eventSendMessage(message);
    13.             }
    14.            
    15.         },sek * 20L);
    16.     }
     
    #1
  2. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Es wäre gut, wenn man die ganze Klasse, bzw. die aufgerufenden Methoden sehen würde. Außerdem solltest Du alles mit einem Scheduler machen, wenn Du es in den Methoden, die ich jetzt nicht sehe, nicht schon getan hast.
     
    #2
  3. Kallo1994
    Offline

    Kallo1994

    Registriert seit:
    18. Februar 2014
    Beiträge:
    4
    Eigentlich wird durch ein Command /block start das Event aus gelöst werden.
    PHP:
    1. else if (args[0].equalsIgnoreCase("start")){
    2.                             if(Variables.players.size() > 3){
    3.                                 if(Variables.questions.size() > 3){
    4.                                     if(Variables.start == 0){
    5.                                         Variables.start = 1;
    6.                                         eventWait(2, "Das Quiz startet jetzt. Viel Spaß");
    7.                                        
    8.                                         for(String question: Variables.questions.keySet()){
    9.                                             eventSendMessage("Hier ist kommt die nächste Frage:");
    10.                                             eventWait(15, question);
    11.                                             eventWait(30, "Die Antwort war richtig");
    12. }
    13. }
    14. }
    15. }
    16.  
    Die Metoden die Aufgerufen werde.
    PHP:
    1. public void eventWait(final long sek, final String message){
    2.         Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    3.             public void run() {
    4.                 eventSendMessage(message);
    5.             }
    6.            
    7.         },sek * 20L);
    8.     }
    9.    
    10.    
    11.     public void eventSendMessage(final String message){
    12.         if (message!=null){
    13.             for(Player p : Bukkit.getOnlinePlayers()) {
    14.                 if(Variables.players.containsKey(p)){
    15.                     p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + message);
    16.                 }
    17.             }
    18.         }
    19.     }
     
    #3
  4. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Bekommst Du irgendwelche Fehlermeldungen im Log? Und poste hier bitte ALLE Klassen, die mit dem, was Du machen willst, irgendetwas zu tuen haben. Und dann bitte nicht als PHP-Code, sondern im normalen
    Code (Text):
    1. -Tag (und evtl. als [SPOILER]), da man den PHP-Code kaum lesen kann.
     
    #4
  5. Kallo1994
    Offline

    Kallo1994

    Registriert seit:
    18. Februar 2014
    Beiträge:
    4
    Code (Text):
    1.  
    2.  
    3. public class Main extends JavaPlugin {
    4.    
    5.     public static Logger LOG = Logger.getLogger("Minecraft");
    6.     public static Main INSTANCE;
    7.    
    8.    
    9.     @Override
    10.     public void onDisable() {
    11.     }
    12.  
    13.     @Override
    14.     public void onEnable() {
    15.         Main.INSTANCE = this;
    16.         this.getServer().getPluginManager().registerEvents(new EventPlayerChatEvent(), this);      
    17.     }
    18.  
    19.    
    20.     public boolean onCommand(CommandSender sender, Command cmd, String commandLable, String[] args){
    21.         if(sender instanceof Player) {
    22.             Player pl = (Player)sender;
    23.             if(cmd.getName().equalsIgnoreCase("block")){
    24.                 if((args.length >= 1) && (args[0].equalsIgnoreCase("start") || (args[0].equalsIgnoreCase("join"))){
    25.  
    26.  if(args[0].equalsIgnoreCase("join")){ 
    27.                            
    28.                                     if(!(Variables.players.containsKey(pl))){
    29.                                         Variables.players.put(pl, pl.getName());
    30.                                        
    31.                                         pl.sendMessage("Du nimmst jetzt an Event teil");
    32.                                         return true;
    33.                                     }
    34.                                 }
    35.                             }
    36.  
    37.                     //start
    38.                     else if (args[0].equalsIgnoreCase("start")){
    39.                         if(Variables.players.size() > 1){
    40.                             if(Variables.questions.size() > 1){
    41.                                 if(Variables.start == 0){
    42.                                     Variables.start = 1;
    43.                                     eventWait(5, "Das Quiz startet jetzt. Viel Spaß");
    44.                                        
    45.                                         for(String question: Variables.questions.keySet()){
    46.                                         eventSendMessage("Hier ist kommt die nächste Frage:");
    47.                                         eventWait(15, question);
    48.                                         if(question != null)
    49.                                                 if(Variables.questions.get(question) == 0){
    50.                                                     eventWait(15, "Die Antwort war: Richtig");
    51.                                                 }else{
    52.                                                     eventWait(15, "Die Antwort war: Falsch");  
    53.                                                 }
    54.                                            
    55.                                         }
    56.                                        
    57.                                         eventWait(15, "Das Quiz ist jetzt beendet.")
    58.                                         for(Player p : Bukkit.getOnlinePlayers()) {
    59.                                             if(Variables.players.containsKey(p)){
    60.                                                 Variables.players.remove(p);
    61.                                                 p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + "Das Spiel ist beendet.");
    62.                                    
    63.                                             }
    64.                                         }
    65.                                         Variables.questions.clear();
    66.                                         Variables.start = 0;
    67.                                         return true;
    68.                                     }
    69.                                     pl.sendMessage("Das Event läuft schon.");
    70.                                     return true;
    71.                                 }
    72.                                 pl.sendMessage("Es sind zu wenige Fragen.");
    73.                                 return true;
    74.                             }
    75.                             pl.sendMessage("Es sind zu wenige Spieler.");
    76.                             return true;
    77.                         }
    78.                 }
    79.             }
    80.         }
    81.         return false;
    82.     }  
    83.    
    84.    
    85.     public void eventWait(final long sek, final String message){
    86.         Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    87.             public void run() {
    88.                 eventSendMessage(message);
    89.             }
    90.            
    91.         },sek * 20L);
    92.     }
    93.    
    94.    
    95.     public void eventSendMessage(final String message){
    96.         if (message!=null){
    97.             for(Player p : Bukkit.getOnlinePlayers()) {
    98.                 if(Variables.players.containsKey(p)){
    99.                     p.sendMessage(ChatColor.RED + "EVENT: " + ChatColor.AQUA + message);
    100.                 }
    101.             }
    102.         }
    103.     }
    104.    
    105.    
    106. }

    Code (Text):
    1.  
    2. public class Variables {
    3.    
    4.     //Maps
    5.     public static HashMap<String, Integer> questions = new HashMap<String, Integer>();
    6.     public static HashMap<Player, String> players = new HashMap<Player, String>();
    7.    
    8.    
    9.     //Start
    10.     public static int start = 0;
    11.  

    Code (Text):
    1.  
    2. public class EventPlayerChatEvent implements Listener {
    3.    
    4.     @EventHandler
    5.     public void PlayerCommand(PlayerCommandPreprocessEvent event){
    6.         String message = event.getMessage();
    7.         Player player = event.getPlayer();
    8.         if (message.startsWith("/block start") || message.startsWith("/msg")){
    9.         }else{
    10.             if (message.startsWith("/") && Variables.players.containsKey(player)){
    11.                 event.getPlayer().sendMessage("Du darfst keine Befehle verwenden im Event");
    12.                 event.setCancelled(true);
    13.             }
    14.         }
    15.     }
    16. }
    17.  
    18.  
    19.  

    Ich gab keine Fehlermeldungen. Er hat alles ausfgeführt, nur die eventWait() übersprungen.
     
    #5
  6. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Wenn Du einen Scheduler startest, wird nicht der Code danach erst ausgeführt, wenn das Delay des Schedulers abgelaufen ist, sondern sofort. Wenn das ganze erst nach Ablauf der Zeit geschehen soll, muss das ganze in den Code der Methode "run()".
     
    #6
  7. Kallo1994
    Offline

    Kallo1994

    Registriert seit:
    18. Februar 2014
    Beiträge:
    4
    Also, wenn ich das richtig verstehe muss der ganze Command Teil in den Run() rein.
    Soll sich also das ding immer selbstaufrufen. Denn es soll doch nur die Message später ausgegeben werden. Ich glaube ich verwirr mich gerade selber :(
    Ich versuch es einfach mal :D

    Edit:
    Ich versteh nicht ganz wie es es umsetzten soll, kannst du mir es an einem Beispiel vielleicht zeigen. :)
     
    #7