[Java] [Bukkit] && [Wie könnte ich das hier anstellen] Hey liebe Community,

Dieses Thema im Forum "Programmierung" wurde erstellt von necnuc, 28. Dezember 2013.

  1. necnuc
    Offline

    necnuc

    Registriert seit:
    15. Dezember 2013
    Beiträge:
    36
    Ort:
    /home
    Minecraft:
    necnuc | Der Kunde
    Hey liebe Community,
    Heute habe ich die frage aller fragen :p,
    Ich bin gerade dran ein eigenes mobarena plugin zu schreiben, und dazu diese frage jetzt.
    Wie könnte ich es anstellen das wen alle entity's in einer area gestorben sind das da was passiert.
    Und ich hoffe ihr könnt mir helfen.
    Freue mich auf jede antwort.

    *push*
     
    #1
  2. Chrisliebaer
    Offline

    Chrisliebaer

    Anzahl der Gegner in der Arena speichern und bei jedem Tot eines Gegners, der innerhalb der Arena starb den Wert reduzieren, bis er 0 erreicht?
     
    #2
  3. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Du könntest alle Entitys in der Welt aufrufen und testen, ob die sich in der Arena befinden... Ungefähr so:

    Code (Text):
    1. int counter = 0;
    2. for(LivingEntity ent : Bukkit.getWorld("h").getLivingEntities()) {
    3.     if (ent.isInArena)
    4.         counter++; 
    5. }
    6. if (counter == 0) {
    7.     //To do
    8. }
    Das ganze prüfst du mit einem Scheduler alle x Sekunden.
     
    #3
  4. Taces
    Offline

    Taces

    Registriert seit:
    17. Oktober 2013
    Beiträge:
    16
    Ich würde die Entitys die du jede Runde spawnst einfach in eine ArrayList packen und dann bei jedem Tod das gestorbene Mob aus der Liste entfernen und anschließend gucken ob sie leer ist ;)

    /e Diese Methode wäre jedenfalls performanter als die beiden hierüber, weil dabei jedes Mal durch alle Mobs der Welt iterieren müsstest, um zu prüfen, ob sie in der Arena gestorben sind und dann auch noch bei jedem die Abfrage nach der Position machen müsstest
     
    #4
  5. Chrisliebaer
    Offline

    Chrisliebaer

    Du must nur die Koordinaten der gestorbenen Mobs vergleichen. Das ist kein Hexenwerk. Da muss überhaupt nichts iteriert werden. Ganz simple. Und schnell ohne Ende.

    http://jd.bukkit.org/rb/apidocs/org/bukkit/event/entity/EntityDeathEvent.html
     
    #5
  6. Taces
    Offline

    Taces

    Registriert seit:
    17. Oktober 2013
    Beiträge:
    16
    Hast Recht, Denkfehler meinerseits, ist schon spät :D
     
    #6
  7. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Und was ist, wenn durch andere Plugins oder, weil es dunkel wird neue Mobs spawnen? Dann funktioniert das ganze nicht. Und so viel Leistung zieht es nicht, wenn man alle x Sekunden die Koordinaten der Mobs abfragt.

    Kleine Zwichenfrage: Werden bei "world.getLivingEntitys()" nut die geladenen oder alle Mobs abgefragt?
     
    #7
  8. Taces
    Offline

    Taces

    Registriert seit:
    17. Oktober 2013
    Beiträge:
    16
    Warum willst du alle x Sekunden die Position aller Mobs abfragen? Jede unnötige Abfrage ist eine Verschwendung von Ressourcen, das ist halt so.
    /E: Ok, dachte du bist der TE ^^ ist trotzdem übertrieben alle paar Sekunden durch alle Mobs zu Iterieren und deren Position zu überprüfen ;)

    Zu dem dunkel Werden und andere Plugins: Mach es halt so, wie ich es vorgeschlagen habe. Pack alle Mobs, die du in einer Runde spawnst oder meinetwegen auch nur ihre UID in eine ArrayList und bei einem DeathEvent löschst du sie wieder raus. Danach guckst du, ob die größe 0 ist und falls ja, sind alle Mobs der eine getötet. Das ist völlig unabhängig von irgendwelchem anderen Random Mobspawn
     
    #8
  9. Chrisliebaer
    Offline

    Chrisliebaer

    Ich würd mal sagen, dass das Arenaplugin nutzlos ist, wenn auch normale Gegner in der Arena spawnen können. Von daher stellt sich die Frage mir eigentlich nicht.
     
    #9