Programm Spieler, der einen anderen Spieler mit einer Angel trifft.

Dieses Thema im Forum "Programmierung" wurde erstellt von Verschraubt, 22. August 2015.

  1. Verschraubt
    Offline

    Verschraubt

    Hallo!
    Ich habe folgendes Problem. Skypvp: Wenn Spieler 1 Spieler 2 mit einer Angel von einer Insel schmeißt ( Hierbei ist zu beachten, dass Der Spieler die Angel nicht wieder einzieht! ), soll dem zweiten Spieler der Name des ersten Spielers in einer HashMap zugewiesen werden. Ich habe versucht, den Spieler über das PlayerFishEvent zu erfassen. Dabei stellte sich aber heraus, dass dieses Event nur eintritt, wenn der Spieler die Angel wieder einzieht.

    Code (Text):
    1.     @EventHandler
    2.     public void onFish(PlayerFishEvent e) {
    3.         Player p = e.getPlayer();
    4.  
    5.         if (e.getCaught() != null) {
    6.             if (e.getCaught() instanceof Player) {
    7.                 Player x = (Player) e.getCaught();
    8.                 this.plugin.attack.put(x, p);
    9.  
    10.             }
    11.         }
    12.  
    13.     }
    Über eine Lösung wäre ich sehr dankbar.
    Mit freundlichen Grüßen
    DasThema
     
    #1
  2. Vanityra
    Offline

    Vanityra

    Registriert seit:
    9. Juni 2015
    Beiträge:
    219
    Ort:
    Heidelberg
    Minecraft:
    Vanityra
    Überprüf doch, ob die Schadensursache eine Angel ist.
     
    #2
  3. Victini151
    Offline

    Victini151

    Das könnte über ein EntityDamageByEntityEvent mit Schadensverursacher (e.getDamager()) vom Typ Projectile feststellbar sein.
     
    #3
  4. Verschraubt
    Offline

    Verschraubt

    So habe ich es auch schon probiert. Das Problem dabei ist, der Damager FISHING_HOOK hat dann nichts mehr mit einem Spieler zu tun.


    Code (Text):
    1.     @EventHandler
    2.     public void onAttack(EntityDamageByEntityEvent e) {
    3.         Player p = (Player) e.getEntity();
    4.         if (e.getDamager().getType() == EntityType.PLAYER) {
    5.             Player attacker = (Player) e.getDamager();
    6.             this.plugin.attack.put(p, attacker);
    7.         }
    8.        
    9.         if (e.getDamager().getType() == EntityType.FISHING_HOOK)  {
    10.             this.plugin.attack.put(p, ##Spieler mit der Angel##);
    11.         }
    12.  
    13.     }
    Code:
    this.plugin.attack = HashMap, in welcher der Angreifer festgesetzt werden soll.
     
    #4
  5. Victini151
    Offline

    Victini151

    Wenn der vom Typ "Projectile" ist, schau dir mal Projectile#getShooter() an :)
     
    #5
    Verschraubt gefällt das.
  6. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Zum Fish_Hook:
     
    #6
    Verschraubt gefällt das.
  7. Verschraubt
    Offline

    Verschraubt

    Vielen Dank für die Antworten. Konnte es so lösen:
    Code (Text):
    1. @EventHandler
    2.     public void onAttack(EntityDamageByEntityEvent e) {
    3.         Player p = (Player) e.getEntity();
    4.         if (e.getDamager().getType() == EntityType.PLAYER) {
    5.             Player attacker = (Player) e.getDamager();
    6.             this.plugin.attack.put(p, attacker);
    7.         }
    8.  
    9.         if (e.getDamager() instanceof Projectile) {
    10.             Projectile x = (Projectile) e.getDamager();
    11.             if (x.getType() == EntityType.FISHING_HOOK) {
    12.                 Player attacker = (Player) x.getShooter();
    13.                 this.plugin.attack.put(p, attacker);
    14.  
    15.             }
    16.         }
    17.  
    18.     }
     
    #7
  8. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Hast du schon ausprobiert ob das geht?
    Es dürfte eigentlich nicht funktionieren. Siehe meine Zitate
     
    #8
    Verschraubt gefällt das.
  9. Victini151
    Offline

    Victini151

    #9
    Verschraubt und GPSforLEGENDS gefällt das.
  10. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    #10
    Verschraubt gefällt das.