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

    Solved Redstone + Entity / DamageSource explosion

    1.7.x
    1.7.10
    4
    17
    3468
    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.
    • Kujaroth
      Kujaroth last edited by

      Salut,

      Je sais que l’on peu chercher un signale de redstone a un bloc, comme les portes, trappes, lampe de redstone, TNT,…

      Mais y’a t’il un équivalent pour une entité vivante ?

      Genre si le mob est proche d’un signale de redstone de x ou plus.

      Cordialement.

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

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

        @‘UnknowOrigin’:

        Salut,

        Je sais que l’on peu chercher un signale de redstone a un bloc, comme les portes, trappes, lampe de redstone, TNT,…

        Mais y’a t’il un équivalent pour une entité vivante ?

        Genre si le mob est proche d’un signale de redstone de x ou plus.

        Cordialement.

        Bah dans sa fonction onLivingUpdate tu check si a tel coordonée de x ou de z ou de y (si il est dessus) il y a un block est un block de redstone allumé. Au pire tu check si les blocks autour de lui ont l’id du block de redstone allumé grâce à la méthode getBlockById(int id).
        J’espère que je t’aurai mis sur la voie 😉

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

          Exactement. Par contre pas besoin de regarder le bloc en question, il y a une fonction dans la classe World pour savoir si il y a un signal de redstone.

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

            Ha… C’est ci con que ça… Je vais aller voire ^^’

            Et ouai, l’histoire du bloc ne me plaisais pas trop, car imaginons qu’un bloc du type redstone d’un autre mod est présent, bah il ne se passera rien… ^^

            Le signal c’mieux 😄

            EDIT : J’ai trouvé 2 fonctions, getBlockPowerInput et isBlockIndirectlyGettingPowered.

            Je pense que c’est la isBlockIndirectlyGettingPowered, plus qu’a comprendre le code ^^

            EDIT² : Bon, en faite je bloque… Je n’y arrive pas ><
            Y’a pas de damagesource pour les explosions ? Si machin a recut des dommages d’explosions… De mémoire, y’a bien un “machin est mort d’une explosion” non dans le chat ? (Je joue mieux en créative que survie ^^)

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

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

              Oui, il y a bien un type de damage source pour les explosions. C’est une condition dans la classe DamageSource il me semble.

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

                Ok, c’est que c’est un peu le bordel là dedans ^^’

                J’arrive pas a faire fonctionner, que se soit le damage soruce explo ou l’entité qui recoit un signal ><

                Peut etre ça ?     public int getBlockPowerInput(int p_94577_1_, int p_94577_2_, int p_94577_3_)

                Pour chopper la valeur de la redstone + condition si le signal est plus grand que qqch

                ou alors ça : getStrongestIndirectPower qui serai mieux adapter, mais le soucis c’est que je n’arrive pas faire fonctionner cette fonction dans une entity.

                Je continue de creuser.

                Quand au damage source explosion…

                Voici tout ce qui est liée a l’explosion dans le DomageSource.java

                ​   public static DamageSource setExplosionSource(Explosion p_94539_0_)
                
                    {
                        return p_94539_0_ != null && p_94539_0_.getExplosivePlacedBy() != null ? (new EntityDamageSource("explosion.player", p_94539_0_.getExplosivePlacedBy())).setDifficultyScaled().setExplosion() : (new DamageSource("explosion")).setDifficultyScaled().setExplosion();
                    }
                
                    public boolean isExplosion()
                
                    {
                        return this.explosion;
                    }
                
                    public DamageSource setExplosion()
                
                    {
                        this.explosion = true;
                        return this;
                    }
                

                EDIT : Ha bah merde le con… En faite j’avais le bon code, mais la fatigue et la taille de l’ecran, ainsi que mes yeux mon trahit !

                worldObj.getStrongestIndirectPower((int)this.posX, (int)this.posY, (int)this.posZ);
                

                tout bêtement, j’avais juste a mettre un (int) devant les variable de l’entité… Plus qu’a trouver comment faire une zone de detection (genre

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

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

                  (genre ?
                  Utilise plutôt MathHelper.floor_double(this.posX) pour avoir une meilleur précision.

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

                    Effectivement, j’avais pas vue que ma phase était incomplète…

                    genre une zone de 1 case au dessus/dessous/cotés.

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

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

                      boolean redstone = worldObj.getStrongestIndirectPower(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ) || worldObj.getStrongestIndirectPower(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) - 1, MathHelper.floor_double(this.posZ) || worldObj.getStrongestIndirectPower(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) + 1, MathHelper.floor_double(this.posZ); …
                      À faire sur tous les côtés, là j’ai juste fait haut bas.

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

                        Hum, bien se qu’il me semblait… un code pour chaque zone.

                        Mais imaginons pour faire une zone sphérique “Minecraftienne” la aussi faut coder de la meme façon ? Car ça peut etre un sacré truc pour une zone de 5 cases xD, m’enfin, je pense qu’avec des boucles for le truc peut être alléger en faite…

                        Plus qu’a trouver cette histoire de damage source explosion, car j’aimerai faire en sorte que si l’entité recoit des dommages d’explosion, elle explose a sont tour ^^ (non, je ne suis pas sadique.)

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

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

                          Il y a fonction onHurt dans l’entité il me semble, avec le DamageSource en argument. Donc tu as juste a faire un if(damageSource.isExplosion())

                          Pour la zone je verrai bien aussi une petite fonction avec des boucles for.

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

                            @‘robin4002’:

                            Il y a fonction onHurt dans l’entité il me semble, avec le DamageSource en argument. Donc tu as juste a faire un if(damageSource.isExplosion())

                            Pour la zone je verrai bien aussi une petite fonction avec des boucles for.

                            C est tout simplement la méthode attackEntityFrom (DamageSource par1, float par2)

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

                              Mais cette méthode sert à infliger des dégâts, pas à effectuer une action si une entité reçoit se type de dégâts.

                              Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                                Non c’est bien ça :

                                ​    protected void damageEntity(DamageSource source, float amount)
                                    {
                                super.damageEntity(source, amount); // effectue ce qui se trouve dans la classe EntityLivingBase
                                if(source.isExplosion)
                                {
                                // ton code
                                }
                                }
                                

                                Sinon tu peux aussi passer par l’event LivingHurtEvent

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

                                  @‘robin4002’:

                                  Non c’est bien ça :

                                  ​    protected void damageEntity(DamageSource source, float amount)
                                      {
                                          super.damageEntity(source, amount); // effectue ce qui se trouve dans la classe EntityLivingBase
                                          if(source.isExplosion)
                                          {
                                              // ton code
                                          }
                                      }
                                  

                                  Sinon tu peux aussi passer par l’event LivingHurtEvent

                                  Il y a aussi ce code là qui marche très bien (je viens de le tester)

                                  
                                     public boolean attackEntityFrom(DamageSource damagesource, int i)
                                  
                                     {
                                         if(damagesource.getDamageType() == "explosion")
                                         {
                                         System.out.println("l'entity s'est bien faite attaquée par une explosion");
                                  //Tu peux placer n'importe quelle ligne de code à cette endroit là cela fera le même effet que d'utiliser l'event ou la méthode cités par robin.
                                         }
                                  super.attackEntityFrom(DamageSource.causeMobDamage(this), i);
                                         return true;
                                     }
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • Kujaroth
                                    Kujaroth last edited by

                                    Salut ! Merci a vous ! C’est niquel !

                                    Julot, ton code ne marchait pas chez moi, mais celui de Robin ouai ^^’

                                    Quoi qu’il en soit, merci a vous !

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

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

                                      @‘UnknowOrigin’:

                                      Salut ! Merci a vous ! C’est niquel !

                                      Julot, ton code ne marchait pas chez moi, mais celui de Robin ouai ^^’

                                      Quoi qu’il en soit, merci a vous !

                                      En fait autant pour moi j’ai testé mon code sous la 1.2.5 car je n’avais que cette workspace sous la main et du ocup je pensais que le code serait le même sous la 1.7.10
                                      La méthode a sûrement changé de nom ou alors c’est le String qui n’est plus valide. Je regarderai pour le corriger 😉

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

                                      MINECRAFT FORGE FRANCE © 2018

                                      Powered by NodeBB