Kurzer PvP-Schutz nach Respawn

Dieses Thema im Forum "Technischer Support" wurde erstellt von Valyreon, 6. November 2015.

  1. Valyreon
    Offline

    Valyreon

    Registriert seit:
    18. September 2014
    Beiträge:
    18
    Minecraft:
    Valyreon
    Guten Tag,
    ich habe wieder mal eine kleine Frage die vermutlich vielen einfach vorkommt, aber Google mir leider nicht beantworten will:
    Ich dachte immer, Essentials, Multiverse, oder ein anderes Grundplugin oder eine Einstellung könnte irgendwie einen Respawnschutz erzeugen. Also für eine Zeit nach dem Respawn ist man unverwundbar.

    Leider bringt mich Google nur zu Lösungen, die die Protection des Spawnbereichs meinen, aber keine zu meiner Frage nach einer zeitweisen Unverwundbarkeit nach dem respawn.

    Vielleicht kann mir ja jemand hier die Frage beantworten, gab hier sehr oft gute Hilfestellungen bei allen möglichen Fragen.
    Danke schonmal für jede konstruktive Antwort.
     
    #1
  2. Verschraubt
    Offline

    Verschraubt

    Hai!
    Wenn mich nicht Alles täuscht müsste man das so hinbekommen:
    Code (Text):
    1. private ArrayList<Player> schutz = new ArrayList<>();
    2.  
    3.     @EventHandler
    4.     public void onRespawn(PlayerRespawnEvent e) {
    5.         final Player p = e.getPlayer();
    6.         schutz.add(p);
    7.         Bukkit.getScheduler().scheduleAsyncDelayedTask(this.plugin, new Runnable() {
    8.      
    9.             @Override
    10.             public void run() {
    11.                 schutz.remove(p);
    12.          
    13.             }
    14.         }, 100); // Diese Zahl beschreibt die Dauer des Schutzes in Ticks [1 Sec = 20 Ticks]
    15.     }
    16.     @EventHandler
    17.     public void onDamage(EntityDamageEvent e) {
    18.         Player p = (Player) e.getEntity();
    19.         if (schutz.contains(p)){
    20.             e.setCancelled(true);
    21.         }
    22.     }
     
    #2
    CitopiaMC und Valyreon gefällt das.
  3. CitopiaMC
    Offline

    CitopiaMC

    Registriert seit:
    14. Mai 2015
    Beiträge:
    17
    Ort:
    127.0.0.1
    Minecraft:
    Talkbox
    Essentials bietet die Möglichkeit nach einem Teleport den Spieler für x Sekunden unverwundbar zu machen.

    Leider gilt dies nicht für Respawning daher wäre der Vorschlag von DasThema am besten.

    Jedoch würde ich beim EntityDamageEvent erst prüfen ob das Entity das Schaden genommen hat, ein Spieler ist. (Könnte sonst zu Fehlern führen)

    Code (Text):
    1.  
    2. @EventHandler
    3. public void onDamage(EntityDamageEvent event) {
    4.     if(event.getEntity() instanceof Player) {
    5.         Player p = (Player) event.getEntity();
    6.         if(schutz.contains(p.getName)) {
    7.             event.setCancelled(true);
    8.         }
    9.     }
    10.  
    11. }
    12.  
    Mit freundlichen Grüßen,
    CitopiaMC
     
    #3
    Valyreon und Verschraubt gefällt das.
  4. Verschraubt
    Offline

    Verschraubt

    Danke für die Ergänzung. :D
     
    #4
    CitopiaMC und Valyreon gefällt das.
  5. Valyreon
    Offline

    Valyreon

    Registriert seit:
    18. September 2014
    Beiträge:
    18
    Minecraft:
    Valyreon
    Wao, vielen Dank für die schnellen und wertvollen Antworten :0
    Auf Anhieb ein Problem durch ein eigenes Plugin zu lösen, dazu reichen meine Fähigkeiten leider nicht aus.
    Darum noch einmal vielen Dank für den Code an euch beide.
    Den noch in einen Standard-Pluginrahmen zu integrieren, bekomme sogar ich hin und was dazugelernt habe ich auch.
    :D
     
    #5
    CitopiaMC und Verschraubt gefällt das.