ServerPlugin [FehlerCode] Kann mir jeamnd helfen ?

Dieses Thema im Forum "Programmierung" wurde erstellt von Masiwo, 1. Februar 2014.

  1. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Hallo zusammen.


    grade war ich dabei mal ein wenig an meinem Falldown Plugin weiterzucoden(Für mehrere Server), allerdings habe ich ein paar Fragen:
    1. Wie kann man beim loaden des Plugins eine world loaden lassen ? Ansonsten gibts nämlich immer Null error, da die world dann nicht gefunden werden konnte.
    Kurzfristig habe ich das jetzt mal mit Multiverse gelöst, hoffe aber auf einen Änderungsvorschlag.
    2.
    Wenn jetzt der Countdown abgelaufen ist kommt der Error hier in der Konsole:
    Code (Text):
    1. [11:47:38 WARN]: Exception in thread "Craft Scheduler Thread - 165"
    2. [11:47:38 WARN]: org.apache.commons.lang.UnhandledException: Plugin FallDown v0.0 generated an exception while executing task 10
    3.         at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
    4.         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    5.         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    6.         at java.lang.Thread.run(Thread.java:724)
    7. Caused by: java.lang.IllegalStateException: Asynchronous player tracker clear!
    8.         at net.minecraft.server.v1_7_R1.EntityTrackerEntry.clear(EntityTrackerEntry.java:519)
    9.         at net.minecraft.server.v1_7_R1.EntityTracker.untrackPlayer(EntityTracker.java:199)
    10.         at net.minecraft.server.v1_7_R1.PlayerList.moveToWorld(PlayerList.java:413)
    11.         at org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer.teleport(CraftPlayer.java:474)
    12.         at org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity.teleport(CraftEntity.java:200)
    13.         at game.Arena.spawnTeleport(Arena.java:18)
    14.         at falldowndaniel.Main$1.run(Main.java:80)
    15.         at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java:58)
    16.         at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
    17.         ... 3 more
    18.  
    HIer meine Teleport Klasse:
    Code (Text):
    1. package game;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Location;
    5. import org.bukkit.World;
    6. import org.bukkit.entity.Player;
    7.  
    8. public class Arena
    9. {
    10.     public static void spawnTeleport ()
    11.     {
    12.         String Arena = "Arena";
    13.         World w = Bukkit.getWorld(Arena);
    14.         if (w != null ) {
    15.             Location locDest = new Location(w,-382,4000,-170);
    16.         for(Player ap : Bukkit.getOnlinePlayers())
    17.         {
    18.             ap.teleport(locDest);
    19.         }
    20.         }
    21.         else {
    22.             Bukkit.broadcastMessage("§9Ein Fehler ist aufgetreten (Welt nicht gefunden)");
    23.         }
    24.     }
    25. }
    Hat irgendjemand eine Idee ?

    Danke für Antworten

    LG Daniel
     
    #1
  2. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Das scheint nicht die ganze Klasse zu sein...
    Es sieht danach aus, als ob du ein Scheudler die Funktion aufrufen lässt..
     
    #2
  3. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Doch ist es ich hab ne neue Klasse nur fürs Teleportieren gemacht hier im Countdown wird das ganze aufgerufen :
    Code (Text):
    1.     public void startCountdown()
    2.     {
    3.         Bukkit.getScheduler().runTaskTimerAsynchronously(this,  new Runnable()
    4.         {
    5.             int time = 90;
    6.  
    7.             @Override
    8.             public void run()
    9.             {
    10.                
    11.                 for(Player p : Bukkit.getOnlinePlayers())
    12.                 {
    13.                     if(time == 90 || time == 80 || time == 70 || time == 60 || time == 50 || time == 40 || time == 30 || time == 20 || time == 10)
    14.                     {
    15.                         p.sendMessage(prefix() + " Noch " + time + " Sekunden bis das Spiel startet!");
    16.                     }
    17.                        
    18.                     if(time <= 9 && !(time <= 0))
    19.                     {
    20.                             p.sendMessage(prefix() + " Noch " + time + " Sekunden bis das Spiel startet!");
    21.                     }
    22.                    
    23.                     if(time == 0)
    24.                     {
    25.                         Arena.spawnTeleport();
    26.  
    27.                     }
    28.                 }
    29.                     time--;
    30.             }
    31.            
    32.         }, 40L, 20L);
    33.     }
     
    #3
  4. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Du solltest statt

    Code (Text):
    1. Bukkit.getScheduler().runTaskTimerAsynchronously(this,  new Runnable() {
    Code (Text):
    1. Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    verwenden.
     
    #4
  5. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Ist das der Fehler gewesen ?
     
    #5
  6. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Zumindest hast du n Fehler der von einer Illegalstate kommt wegen AsynTimer.
     
    #6
  7. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    Ok echt fettes DAnke das geht jetzt problemlos.
    Haste ne Idee mit der world und wie man die loaden könnte?
     
    #7
  8. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Du könntest alle deine Maps für das Spiel in eine einzelne Welt packen und die Spieler, je nach dem, welche Map gespielt werden soll, zu den verschiedenen Spawn-Punkten teleportieren.
     
    #8
  9. Masiwo
    Offline

    Masiwo

    Registriert seit:
    28. April 2013
    Beiträge:
    40
    Ort:
    C:/Eclipse/Workspace/ @Paulh
    Minecraft:
    blotiu
    So das mit der world läuft jetzt auch problemlos.
    So noch 2 Sachen wie kann ich in das PlayerLoginEvent einen Boolean namens jonable mit einer if abfragen ? (Andere Klasse)
    Also auslesen ob er auf true oder false steht und dann bei false das Event canceln.
    Und 2. Wie kann ich den Minecraft Server Motd verändern (Methode)


    Danke für Antworten.
     
    #9
  10. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Join verhindern:
    Code (Text):
    1. @EventHandler(ignoreCancelled = true)
    2.     public void onPlayerPreJoin(AsyncPlayerPreLoginEvent event){
    3.         if (keineSpeilerReinLassen){
    4.             event.setKickMessage("§c§lDas Spiel läuft grade!");
    5.             event.setLoginResult(Result.KICK_OTHER);
    6.             event.disallow(Result.KICK_OTHER, "§c§lDas Spiel läuft grade!");
    7.         }
    8.     }
    *Ich weiß auch nicht wieso es .setLoginResult und .disallow gibt, warscheinlich Bukkit logik..

    Modt ändern:
    Code (Text):
    1.    
    2.     @EventHandler
    3.     public void onServerPing(ServerListPingEvent event){
    4.         event.setMotd("neue motd");
    5.     }
     
    #10