[Programmierung] Selbst geschriegebenes Regionen Plugin -> Threads

Dieses Thema im Forum "Programmierung" wurde erstellt von Kaladial, 2. Februar 2014.

  1. Kaladial
    Offline

    Kaladial

    Registriert seit:
    25. Mai 2013
    Beiträge:
    91
    moin

    ich hab ein kleines problem mit einem selbst geschriebenen Plugin...
    Folgende Aktion:
    in meiner main-class gibt es befehle z.b. den zum verkaufen eines Grundstücks
    hier in dem Fall : /sg sell <gsnummer>

    dann gibt es bei meinem Plugin unterschiedliche Arten von Grundstücken
    unter anderem auch ein mietbares Grundstück.
    Dieses läuft nach einer gewissen zeit ab.

    und hier tritt mein Fehler auf

    ich habe einen Thread programmiert welcher alle 15 sec mal nachguckt wie süät es ist und wenn eine bestimmte uhrzeit erreicht ist in der datenbank nachsieht ob für den heutigen tag mietbare gs ablaufen... soweit sogut...

    nun wollte ich, wenn ein gs abläuft der einfachhalt halber einfach den gs sell befehl aus der main class aufrufen...
    also hab ich mir gedacht ich versuch das so:

    Code (Text):
    1.  
    2.     public void run(){
    3.         SoraMarketEx sm = SoraMarketEx.getInstance();
    4.         boolean mail_send=false;
    5.         while (thread != null){
    6. sm.getServer().dispatchCommand(sm.getServer().getConsoleSender(), "mail send " + spielername + " Der Laden "+gsnummer+" wurde an die Bank zurueck gegeben (Mietzeit abgelaufen).");
    7.                         try{
    8.                             Thread.sleep(1000);
    9.                         }catch(InterruptedException e){ break; }
    10.                         sm.getServer().dispatchCommand(sm.getServer().getConsoleSender(), "gs sell "+gsnummer+"");
    11.                 }
    12.     }
    13.  
    (sind nur die wichtigen dinge im quellcode )
    problem hierbei:
    2014-02-02 00:05:15 [INFO] [SME_Debug]: gs sell l9
    2014-02-02 00:05:15 [INFO] CONSOLE issued server command: /mail send Jackson_S Der Laden l9 wurde an die Bank zurueck gegeben (Mietzeit abgelaufen).
    2014-02-02 00:05:15 [INFO] Mail sent!
    2014-02-02 00:05:15 [SEVERE] net.minecraft.server.v1_6_R3.ReportedException: Ticking entity
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:578)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    2014-02-02 00:05:15 [SEVERE] Caused by: java.util.ConcurrentModificationException
    2014-02-02 00:05:15 [SEVERE] at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
    2014-02-02 00:05:15 [SEVERE] at java.util.HashMap$KeyIterator.next(HashMap.java:928)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.EntityTracker.a(EntityTracker.java:201)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.EntityPlayer.l_(EntityPlayer.java:216)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.World.entityJoinedWorld(World.java:1354)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.World.playerJoinedWorld(World.java:1335)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.World.tickEntities(World.java:1223)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.WorldServer.tickEntities(WorldServer.java:480)
    2014-02-02 00:05:15 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:574)
    2014-02-02 00:05:15 [SEVERE] ... 4 more
    2014-02-02 00:05:15 [SEVERE] Encountered an unexpected exception ReportedException
    net.minecraft.server.v1_6_R3.ReportedException: Ticking entity
    at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:578)
    at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
    at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
    at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
    at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
    at java.util.HashMap$KeyIterator.next(HashMap.java:928)
    at net.minecraft.server.v1_6_R3.EntityTracker.a(EntityTracker.java:201)
    at net.minecraft.server.v1_6_R3.EntityPlayer.l_(EntityPlayer.java:216)
    at net.minecraft.server.v1_6_R3.World.entityJoinedWorld(World.java:1354)
    at net.minecraft.server.v1_6_R3.World.playerJoinedWorld(World.java:1335)
    at net.minecraft.server.v1_6_R3.World.tickEntities(World.java:1223)
    at net.minecraft.server.v1_6_R3.WorldServer.tickEntities(WorldServer.java:480)
    at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:574)
    ... 4 more
    2014-02-02 00:05:15 [SEVERE] This crash report has been saved to: /home/lightlegends/minecraft/srv-main/./crash-reports/crash-2014-02-02_00.05.15-server.txt


    und das doofe is: er macht ganz normal den gs sell befehl nur hängt sich halt der server weg ...
    ich hab diverse dinge schon ausprobiert ...
    was ich überlege ist ob man den thead mit dem main programm irgendwie synchronisieren muss...
    nur grad kein plan wie das in der bukkit api geht...

    kann mir da jemand weiter helfen?

    thx Kala
     
    #1
  2. DASPOT
    Offline

    DASPOT Moderator

    Registriert seit:
    1. November 2011
    Beiträge:
    1.445
    Ort:
    minecraftnews.de
    Minecraft:
    DASPOOT
    Das gehört ins PRogrammierung Forum. habs deswegen mal verschoben.
     
    #2
  3. games6471
    Offline

    games6471

    Könntest du eventuell uns auch mehr Code zu Verfügung stellen.
     
    #3