Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Dégâts de zone+explosion

    1.7.x
    1.7.10
    4
    10
    1166
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Folgansky
      Folgansky Correcteurs last edited by

      Bonjour, bonsoir,

      J’ai fais une pièce d’armure associée à un item, quand on “clic droit” avec l’item tout en portant la pièce d’armure sur soi on explose…
      Oui j’ai fais une tenue de bombe humaine.

      Alors le soucis qui me fait venir cette fois c’est que sur mon serveur les explosions sont “cancel” en tout cas elles n’explosent pas les blocs et en y testant ma fonctionnalité je me suis rendu compte que les dégâts n’étaient pas pris en compte, je crée simplement l’animation d’une explosion en gros.

      Du coup je me suis dis qu’il suffirait d’appliquer des dégâts en zone au moment de l’animation. Grâce au bonus en tuto de Robin sur les épées c’est fait.
      Au final j’ai deux méthodes l’une quand on tape une entité, l’autre quand on clique droit:

      :::

      public class ItemDetonateur extends Item
      {
      public ItemDetonateur()
      {
      super();
      this.maxStackSize = 1;
      this.setHasSubtypes(true); 
      }
      
      public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
          {
      ItemStack chestPlate = player.getEquipmentInSlot(3);
      if (!world.isRemote && chestPlate != null  && chestPlate.getItem() == Modpg.bodyKamikaze)
      {    
         world.createExplosion(null, player.posX, player.posY + 1, player.posZ, 5.0F, true);
              }
      return stack;
          }
      
      @SuppressWarnings("rawtypes")
      public boolean hitEntity(ItemStack stack, EntityLivingBase attackedLiving, EntityLivingBase attackerLiving)
      {
      if(!stack.hasTagCompound())
      {
      stack.setTagCompound(new NBTTagCompound());
      }
      
      IEntitySelector filter;
      // filter = new IEntitySelector()
      // {
      // @Override
      // public boolean isEntityApplicable(Entity entity)
      // {
      // if(entity instanceof EntityPlayer)
      // {
      // return true;
      // }
      // return false;
      // }
      // };
      filter = new IEntitySelector()
      {
      @Override
      public boolean isEntityApplicable(Entity entity)
      {
      if(entity instanceof EntityAnimal)
      {
      return true;
      }
      return false;
      }
      };
      List entityTargetList = attackedLiving.worldObj.selectEntitiesWithinAABB(EntityLivingBase.class, attackedLiving.boundingBox.expand(3.0D, 2.0D, 3.0D), filter);
      for(Object entity : entityTargetList)
      {
      EntityLivingBase living = (EntityLivingBase)entity;
      living.attackEntityFrom(DamageSource.lava, 12.0F);
      }
      return super.hitEntity(stack, attackedLiving, attackerLiving);
      }
      }
      

      :::

      L’instanceofAnimal c’est pour tester en solo si les dégâts s’appliquent bien.

      Auriez-vous un moyen, une méthode peut-être, qui me permettent de me faire péter et d’appliquer les dégâts en une seule action?
      Au passage j’aimerais fortement que les dégâts en zone s’appliquent également au joueur qui porte l’armure (Sinon c’est pas drôle 😃 ).

      1 Reply Last reply Reply Quote 0
      • Kujaroth
        Kujaroth last edited by

        world.createExplosion(null, player.posX, player.posY + 1, player.posZ, 5.0F, true);

        si ma memoire est bonne, tu n’a pas d’explosion car la premiere variable est null. entité, x,y,z,zone,pete bloc. Donc, l’explosion n’est pas défini.

        Quand au joueur qui explose, methode barbare, mais ce serai de lui enlever de la vie en meme temps que du clic avec l’item. Car j’ai tester, les dommage source de l’explosion de celui qui l’émet sont ignorer.

        1 Reply Last reply Reply Quote 0
        • Deleted
          Deleted last edited by

          L erreur ne vient pas du tout des arguments de la méthode. Nan. Le problème est que la méthode createExplosion est à appeler sur les deux Sides : le client se charge des particules, et le serveur des dégâts, de la destruction des blocks et du son. Or là dans ton code, ce qui est bizarre c’est que tu fais une condition pour ne créer l explosion sur serveur. Vire le (!world.isRemote), mais c est quand même bizarre que tu n’ais pas la destruction, ni les dégârs…

          1 Reply Last reply Reply Quote 0
          • Kujaroth
            Kujaroth last edited by

            J’ai testé, avec le !world.isRemote, j’ai l’explosion, la destruction et les dégâts infligé oO. Etrange.

            1 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

              La seule explication que je vois c’est que le serveur tourne sous Cauldron est qu’un plugin bloque les explosions. Car il n’y a aucune erreur dans ton code.

              1 Reply Last reply Reply Quote 0
              • Deleted
                Deleted last edited by

                Vire la condition world.isRemote et dis moi quoi

                1 Reply Last reply Reply Quote 0
                • robin4002
                  robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                  @‘robin4002’:

                  La seule explication que je vois c’est que le serveur tourne sous Cauldron est qu’un plugin bloque les explosions. Car il n’y a aucune erreur dans ton code.

                  = ça ne vient pas du world.isRemote
                  Surtout que dans son code il y a !world.isRemote ce qui correspond au monde serveur …

                  1 Reply Last reply Reply Quote 0
                  • Folgansky
                    Folgansky Correcteurs last edited by

                    [font=Ubuntu, sans-serifc’est que sur mon serveur les explosions sont “cancel”]

                    Sous Eclipse j’explose, y’a pas de soucis les gars. C’est que sur mon serveur je bloque les dégâts de l’explosion et donc j’aimerais appliquer d’autres dégâts à la place.

                    Comme ça j’aurai l’animation d’explosion et les dégâts aux joueurs sans pour autant foutre en l’air la carte.
                    Mon soucis est d’arriver à faire les deux d’un coup. Avec mes deux méthodes actuelles c’est pas ça.

                    1 Reply Last reply Reply Quote 0
                    • robin4002
                      robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                      Il faut faire une explosion custom.

                      1 Reply Last reply Reply Quote 0
                      • Folgansky
                        Folgansky Correcteurs last edited by

                        Je passe en résolu, j’ai fais un mix des deux méthodes et en fait ça marche bien.

                        1 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Design by Woryk
                        Contact / Mentions Légales / Faire un don

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB