Dynamite ayant aucun effet



  • Hey, j'ai suivi le tuto sur comment créer une dynamite mais lorsque je la lance rien ne se passe une idée ?

    La classe Dynamite:

    package com.hypala.hypalacore.common;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class Dynamite extends Item
    {
        public ItemStack onItemRightClick(ItemStack stack ,World world, EntityPlayer player){
            world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
            if(!world.isRemote){
                world.spawnEntityInWorld(new EntityDynamite(world)); 
            }
            return stack;
        }
    }
    

    La classe EntityDynamite :

    package com.hypala.hypalacore.common;
    
    import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
    import io.netty.buffer.ByteBuf;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.projectile.EntityThrowable;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.util.MovingObjectPosition;
    import net.minecraft.world.World;
    
    public class EntityDynamite extends EntityThrowable implements IEntityAdditionalSpawnData{
        
        
       public EntityDynamite(World world, EntityLivingBase thrower){
            super(world,thrower);
        }
       private int fuseTime = 50;
       public EntityDynamite(World world){
           super(world);
       }
      
       @Override
       public void onUpdate() {
          super.onUpdate();
          if(fuseTime > 0){  //si fuseTime est supérieur à 0 alors
              this.fuseTime --; // retire 1 a la variable fuseTime
          }
          else if(!this.worldObj.isRemote){ //si le monde n'est pas distant, on est sur le monde serveur uniquement
              this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, 7.0F, true, true);  //(l'entité que l'on veut utiliser, x, y, z, puissance de l'explosion,  si l'explosion met le feux, si l'explosion casse les blocs)
              this.setDead();//On tue l'entité, on l'enlève
          }
       }
       @Override
       public void writeSpawnData(ByteBuf buffer) {
           buffer.writeInt(this.fuseTime);
           buffer.writeDouble(this.motionX);
           buffer.writeDouble(this.motionY);
           buffer.writeDouble(this.motionZ);
       }
       @Override
       public void readSpawnData(ByteBuf additionalData) {
               this.fuseTime = additionalData.readInt();
                   
               this.motionX = additionalData.readDouble();
           this.motionY = additionalData.readDouble();
           this.motionZ = additionalData.readDouble();
       }
    @Override
    protected void onImpact(MovingObjectPosition mop){
        this.motionX = 0;
        this.motionY = 0;
        this.motionZ = 0;
    }
    }
    

    Et la classe RenderDynamite :

    package com.hypala.hypalacore.common;
    
    import com.sun.prism.TextureMap;
    
    import net.minecraft.client.renderer.entity.Render;
    import net.minecraft.entity.Entity;
    import net.minecraft.item.Item;
    import net.minecraft.util.IIcon;
    import net.minecraft.util.ResourceLocation;
    
    public class renderDynamite extends Render
    {
        private Item dynamite;
        private int renderdynamite;
    
        public void doRender(Entity player, double x, double y, double z, float p_76986_8_ , float p_76986_9_){
            IIcon icon = this.dynamite.getIconFromDamage(this.renderdynamite);
        }
        
        public void DynamiteRender(Item Dynamite, int RenderDynamite){
            this.dynamite = Dynamite;
            this.renderdynamite = RenderDynamite;
        }
        public void DynamiteRender(Item Dynamite){
            this.DynamiteRender(Dynamite,0);
        }
    
        @Override
        protected ResourceLocation getEntityTexture(Entity p_110775_1_)
        {
            return null;
        }
    }
    
    

    Merci pour votre aide 😉



  • Yo, as tu compris ce que tu as fait au moins ? car la methode onImpect de la class de ton Entity n'est pas rempli correctement, rien dans le code qui est present dans cette methode ne fait allusion a une eventuelle création d'explosion
    pour rappel la fonction onImpact est appelé lorsque l'entity touche un surface solide.

    Le rendu a été lui aussi mal programmer, car la methode doRender contient seulement une var local qui est inutilisé :

    public void doRender(Entity player, double x, double y, double z, float p_76986_8_ , float p_76986_9_){
            IIcon icon = this.dynamite.getIconFromDamage(this.renderdynamite);
    }
    


  • J'ai essayé de rajouter une explosion dans onImpact mais ça fait rien et pour le rendu je vois pas trop comment faire


Log in to reply