Augmenter les dégats des flèches par rapport aux arcs



  • Bonjour, je souhaite augmenter les dégâts fait par les flèches normales suivant l'arc que le joueur a.

    J'ai donc fait ce code :
    :::

    @SubscribeEvent
       public void onEntityJoin(LivingHurtEvent event)
       {
           if(event.source.isProjectile())
           {
               if(event.source.getSourceOfDamage() != null && event.source.getSourceOfDamage() instanceof EntityPlayer)
               {
                   EntityPlayer shooter = (EntityPlayer)event.source.getSourceOfDamage();
                   System.out.println("Touché");
                   if(shooter.inventory.hasItem(ItemMod.Androrium_Bow))
                   {
                       event.ammount += 4;
                   }
                   if(shooter.inventory.hasItem(ItemMod.Axinite_Bow))
                   {
                       event.ammount += 3;
                   }
                   if(shooter.inventory.hasItem(ItemMod.Mangano_Bow))
                   {
                       event.ammount += 2;
                   }
                   if(shooter.inventory.hasItem(ItemMod.Natrolite_Bow))
                   {
                       event.ammount += 1;
                   }
               }
           }
    

    :::

    Cependant, le System.out.println n'est jamais appelé donc l'augmentation des dégâts ne peut pas avoir lieu

    Pouvez-vous m'aider ?



  • Salut, essaie de mettre des println pour voir où MC arrete de lire ton code.


  • Administrateurs

    ❗ Note: instanceof null renvoie false. Donc ton instanceof sert déjà de null check, tu peux le retirer.



  • En utilisant plusieurs System.out.println, j'ai remarqué que la condition if(event.source.getSourceOfDamage() instanceof EntityPlayer) n'était jamais sur True.
    Je suppose qu'au lieu de retourner le joueur qui a tiré la flèche, elle retourne la flèche mais alors, comment avoir le tireur de celle-ci ?

    EDIT : C'est confirmé car System.out.println(event.source.getSourceOfDamage().getClass()); me retourne class net.minecraft.entity.projectile.EntityArrow


  • Administrateurs

    Normalement les dégâts de flèche sont du type IndirectDamageSource et dans cette classe il y a une fonction du genre getIndirectSource qui te permet d'avoir le joueur.



  • Je suis passé par un autre moyen :

    • Je récupère la flèche avec le event.source.getSourceOfDamage() dans  une variable arrow
    • Je récupère le joueur avec arrow.shootingEntity
    • Je vérifie s'il tiens mon arc moddé, si oui, j'augmente les dégats (event.ammount)

    Merci quand même


Log in to reply