• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Dégâts de zone+explosion

    1.7.x
    1.7.10
    4
    10
    1262
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Folgansky
      Folgansky Correcteurs dernière édition par

      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 =D ).

      1 réponse Dernière réponse Répondre Citer 0
      • Kujaroth
        Kujaroth dernière édition par

        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.

        >! Bonjour/Bonsoir,
        >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

        1 réponse Dernière réponse Répondre Citer 0
        • Deleted
          Deleted dernière édition par

          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 réponse Dernière réponse Répondre Citer 0
          • Kujaroth
            Kujaroth dernière édition par

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

            >! Bonjour/Bonsoir,
            >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              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 réponse Dernière réponse Répondre Citer 0
              • Deleted
                Deleted dernière édition par

                Vire la condition world.isRemote et dis moi quoi

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                  @‘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 réponse Dernière réponse Répondre Citer 0
                  • Folgansky
                    Folgansky Correcteurs dernière édition par

                    [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 réponse Dernière réponse Répondre Citer 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                      Il faut faire une explosion custom.

                      1 réponse Dernière réponse Répondre Citer 0
                      • Folgansky
                        Folgansky Correcteurs dernière édition par

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

                        1 réponse Dernière réponse Répondre Citer 0
                        • 1 / 1
                        • Premier message
                          Dernier message
                        Design by Woryk
                        Contact / Mentions Légales

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB