Lanceur qui ne casse pas l'obsi dans l'eau



  • Salut,

    Je revient vers vous car j'ai un petit probleme j'ai créer un lanceur que quand on fait clique droit sa lance une balle qui peut casser l'obsi jusqu'a la tous va bien mais mon probleme c'est qu'on peut casser l'obsi meme quand elle est dans de l'eau se qui devrai pas.

    
    package fr.darkvince.ultra;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockRedstoneDiode;
    import net.minecraft.block.material.Material;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.projectile.EntityThrowable;
    import net.minecraft.init.Blocks;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.MovingObjectPosition;
    import net.minecraft.world.World;
    
    public class EntityBalleTntObsi extends EntityThrowable
    {
        public static float explosionPower;
        public static final int empRadius = 4;
    
        public EntityBalleTntObsi(World world)
        {
            super(world);
        }
    
        public EntityBalleTntObsi(World world, EntityLivingBase entity)
        {
            super(world, entity);
        }
    
        private void explode()
        {
            int bx = (int)posX;
            int by = (int)posY;
            int bz = (int)posZ;
            worldObj.createExplosion(this, posX, posY, posZ, 0.75F, true);
    
            for (int x = bx - empRadius; x <= empRadius; x++)
            {
                for (int y = by - empRadius; y <= by + empRadius; y++)
                {
                    for (int z = bz - empRadius; z <= bz + empRadius; z++)
                    {
                        Block block = worldObj.getBlock(x, y, z);  
                        if (block.getMaterial() != Material.air)
                            if(block == Blocks.water)
                              if(block != Blocks.obsidian){
                              explosionPower = 0.75F;
                              System.out.println("Dans l'eau");
                              }
                              else
    
                                  explosionPower = 0.75F*1000.0F;
                          System.out.println("Casse l'obsi");
                              }
                }
    
                }
    
            setDead();
        }
        @Override
        public void onUpdate()
        {
            super.onUpdate();
            if (ticksExisted > 20)
            {
               explode();
            }
    
            for (int i = 0; i < 10; i++)
            {
                double x = (double)(rand.nextInt(10) - 5) / 8.0D;
                double y = (double)(rand.nextInt(10) - 5) / 8.0D;
                double z = (double)(rand.nextInt(10) - 5) / 8.0D;
                worldObj.spawnParticle("fireworksSpark", posX, posY, posZ, x, y, z);
            }
        }
    
        @Override
        protected float getGravityVelocity()
        {
            return 0.005F;
        }
    
        @Override
        public void onImpact(MovingObjectPosition movingObjectPosition)
        {
            explode();
    
        }
    }
    
    


  • @'darkvince37':

    Salut,

    Je revient vers vous car j'ai un petit probleme j'ai créer un lanceur que quand on fait clique droit sa lance une balle qui peut casser l'obsi jusqu'a la tous va bien mais mon probleme c'est qu'on peut casser l'obsi meme quand elle est dans de l'eau se qui devrai pas.

    Tu devrais mettre que si c'est egal a un block d'eau sa fait rien

    [font=monospaceif] [font=monospace(][font=monospaceblock ][font=monospace== ][font=monospaceBlocks].water[font=monospace){]

    [font=monospace}]



  • Hum je vais essayer sa

    Envoyé de mon SM-G928F en utilisant Tapatalk

    Edit:

    J'ai fait sa mais l'obsi casse plus maintenant

    
      if (block.getMaterial() != Material.air)
                      if(block == Blocks.water)
                        if(block != Blocks.obsidian){
                        explosionPower = 0.75F;
                        System.out.println("Dans l'eau");
                        }
                        else
    
                            explosionPower = 0.75F*1000.0F;
                    System.out.println("Casse l'obsi");
                        }
    }
    
    

    Les conditions ne sont pas appelé


  • Administrateurs

    Tu l'utilises où la variable explosionPower ?



  • @'robin4002':

    Tu l'utilises où la variable explosionPower ?

    Un peut plus haut je vais actualisé mon code actuelle en haut.

    public static float explosionPower;


  • Administrateurs

    ça c'est juste la déclaration de la variable.
    Je veux savoir où elle est utilisé.



  • @'robin4002':

    ça c'est juste la déclaration de la variable.
    Je veux savoir où elle est utilisé.

    Elle est utilisé ici

    
    1.  **if**(block != Blocks.obsidian){
    2.                      explosionPower = 0.75F;
    3.                      System.**out**.println("Dans l'eau");
    4.                      }
    5.                      **else**
    6.                          
    7.                          explosionPower = 0.75F%(#666600)
    8.  1000.0F;
    
    

  • Administrateurs

    Je ne vois pas pourquoi elle est static alors.
    Et je ne vois pas non plus en quoi elle modifie la force d'explosion.



  • @'robin4002':

    Je ne vois pas pourquoi elle est static alors.
    Et je ne vois pas non plus en quoi elle modifie la force d'explosion.

    Je veut pas modifier la force de l'explosion je veut juste quelle casse l'obsi mais le probleme c'est quelle casse l'obsi mais meme dans l'eau
    J'ai juste mis en float du coup



  • @'darkvince37':

    
           
      if (block.getMaterial() != Material.air)
                      if(block == Blocks.water)
                        if(block != Blocks.obsidian){
                        explosionPower = 0.75F;
                        System.out.println("Dans l'eau");
                        }
                        else
                            
                            explosionPower = 0.75F*1000.0F;
                    System.out.println("Casse l'obsi");
                        }
    }
    
    

    Les conditions ne sont pas appelé

    Traduction de ton code :

    Si c'est un bloc d'eau et que ce n'est pas un bloc d'obsidienne : "dans l'eau"
    Sinon, si c'est un bloc d'eau et que ce bloc d'eau est un bloc d'obsidienne : "casse l'obsi"

    Personnellement je ne connais aucun bloc d'eau qui soit de l'obsidienne



  • J'avais essayé sans le water mais mon problème c'est que sa casse mais même dans l'eau

    Envoyé de mon SM-G928F en utilisant Tapatalk


  • Modérateurs

    Il faudrait que tu vérifies si un des 6 blocs autour de l'obsidienne est un bloc d'eau (au dessus, en dessous, au nord, au sud, à l'est et à l'ouest).
    Et encore, je pense qu'il faudrait ne pas prendre le bloc d'en dessous au risque de faire des faux positifs.