Items de base sur un Mob !



  • Bonjour bonjour !

    Je voulais savoir si il est possible de pouvoir rajouter à son Entitée une arme de base (Une hache par exemple ou autre..), j'ai voulu essayer avec cette fonction :

       protected void addRandomArmor()
       {
           this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
       }
    

    Mais rien n'apparaît en jeu ! Une solution ? 🙂



  • Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
    {
    if (!this.worldObj.isRemote)
    {
    EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
    entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
    entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
    this.worldObj.spawnEntityInWorld(entitypigzombie);
    this.setDead();
    }
    }
    
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)



  • @'SCAREX':

    Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
               entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
               entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(entitypigzombie);
               this.setDead();
           }
       }
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)

    Ou alors tu as aussi le méthode getHeldItem()



  • @'Julot10085':

    @'SCAREX':

    Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
               entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
               entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(entitypigzombie);
               this.setDead();
           }
       }
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)

    Ou alors tu as aussi le méthode getHeldItem()

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.


  • Administrateurs

    Ton mob à quoi comme modèle ? Un modèle custom de 0 ou ModelBiped/ quelque chose extends ModelBiped ?
    Dans le cas 2 et 3, avec le code que t'as donné SCAREX ça devrait être bon (suffit de le mettre dans le constructeur du mob ou dans la fonction initEntity)
    Par contre si tu as un modèle custom, l'item ne s'affichera pas sur le mob, faut ajouter un code en plus dans le rendu du mob.



  • Merci de vos réponses, alors, j'ai donc fait ça dans mon entity :

    package unicorncraft.mod.common;
    
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.effect.EntityLightningBolt;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class EntityNain extends EntityMob{
    
    public EntityNain(World par1world) {
    super(par1world);
    
    }
    public void applyEntityAttributes()
    {
    super.applyEntityAttributes();
    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100D);
    this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(10.0D);
    this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(2D);
    }
    public Item getDropItem()
    {
    return Items.gold_nugget;
    
    }
    
    protected void addRandomArmor()
    {
    this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
    }
    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
    {
    if (!this.worldObj.isRemote)
    {
    EntityNain EntityNain = new EntityNain(this.worldObj);
    EntityNain.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
    EntityNain.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
    this.worldObj.spawnEntityInWorld(EntityNain);
    this.setDead();
    }
    }
    }
    

    Mais toujours rien, je pense peut être que ça vient de la fonction onStruckByLightning, il faut peut être la remplacée mais par quoi dans ce cas ? Sinon il faudrais faire autre chose ?



  • @'SquizzCraft':

    Merci de vos réponses, alors, j'ai donc fait ça dans mon entity :

    package unicorncraft.mod.common;
    
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.effect.EntityLightningBolt;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class EntityNain extends EntityMob{
    
    public EntityNain(World par1world) {
    super(par1world);
    
    }
    public void applyEntityAttributes()
    {
    super.applyEntityAttributes();
    this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(100D);
    this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(10.0D);
    this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(2D);
    }
    public Item getDropItem()
    {
    return Items.gold_nugget;
    
    }
    
       protected void addRandomArmor()
       {
           this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
       }
    
       public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityNain EntityNain = new EntityNain(this.worldObj);
               EntityNain.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
               EntityNain.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(EntityNain);
               this.setDead();
           }
       }
    }
    

    Mais toujours rien, je pense peut être que ça vient de la fonction onStruckByLightning, il faut peut être la remplacée mais par quoi dans ce cas ? Sinon il faudrais faire autre chose ?

    😄 ici je te montrai le code dans la classe du cochon pour qu'il se transforme en zombie pigman lorsqu'il est touché par un éclair. il faut que ton constructeur soit comme ça :

    
    public EntityNain(World par1world) {
    super(par1world);
    this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
    }
    
    

    PS : ne met pas de majuscules à tes noms de variables. Et tu m'a l'air novice, je te conseille donc de regarder quelques tutoriels sur java/forge avant de te lancer dans quoi que ce soit de trop grand.



  • @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
               entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
               entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(entitypigzombie);
               this.setDead();
           }
       }
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)

    Ou alors tu as aussi le méthode getHeldItem()

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.

    Le résultat est le même et où il est dit qu'il ne souhaite pas un getter (au passage c'est gettER et pas gettEUR il faut arrêter de franciser les mots anglais de Java).  Tu peux tester les 2 méthodes proposées ici sont bonnes , c'est le résultat qui compte pas le procédé.



  • @'Julot10085':

    @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
               entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
               entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(entitypigzombie);
               this.setDead();
           }
       }
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)

    Ou alors tu as aussi le méthode getHeldItem()

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.

    Le résultat est le même et où il est dit qu'il ne souhaite pas un getter (au passage c'est gettER et pas gettEUR il faut arrêter de franciser les mots anglais de Java).  Tu peux tester les 2 méthodes proposées ici sont bonnes , c'est le résultat qui compte pas le procédé.

    getHeldItem récupère l'ItemStack tenu en main, c'est plus propre d'utiliser setCurrentItemOrArmor. (et je francise les mots en anglais si je veux 😛 )



  • @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    Dans le code du zombie pigman, l'épée est rajoutée au moment de le faire apparaître :

    
    public void onStruckByLightning(EntityLightningBolt lightningBolt)
       {
           if (!this.worldObj.isRemote)
           {
               EntityPigZombie entitypigzombie = new EntityPigZombie(this.worldObj);
               entitypigzombie.setCurrentItemOrArmor(0, new ItemStack(Items.golden_sword));
               entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
               this.worldObj.spawnEntityInWorld(entitypigzombie);
               this.setDead();
           }
       }
    

    ou tu peux aussi override la fonction func_180482_a (je ne sais pas comment elle s'appelle en 1.7)

    Ou alors tu as aussi le méthode getHeldItem()

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.

    Le résultat est le même et où il est dit qu'il ne souhaite pas un getter (au passage c'est gettER et pas gettEUR il faut arrêter de franciser les mots anglais de Java).  Tu peux tester les 2 méthodes proposées ici sont bonnes , c'est le résultat qui compte pas le procédé.

    getHeldItem récupère l'ItemStack tenu en main, c'est plus propre d'utiliser setCurrentItemOrArmor. (et je francise les mots en anglais si je veux  😛 )

    Oui c'est un getter je le sais c'est sûrement mieux d'utiliser ta méthode mais moi j'ai l'habitude d'utiliser celle-ci car elle était déjà présente quand j'ai commencé vanilla en 1.2.5

    Sinon revenons au sujet il peut aussi utiliser cette méthode là pour ajouter setCurrentItemOrArmor, c'est comme ceci que le skeleton fait

    
        protected void addRandomArmor()
        {
            super.addRandomArmor();
            this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));
        }
    
    


  • @'Julot10085':

    @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    @'Julot10085':

    Ou alors tu as aussi le méthode getHeldItem()

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.

    Le résultat est le même et où il est dit qu'il ne souhaite pas un getter (au passage c'est gettER et pas gettEUR il faut arrêter de franciser les mots anglais de Java).  Tu peux tester les 2 méthodes proposées ici sont bonnes , c'est le résultat qui compte pas le procédé.

    getHeldItem récupère l'ItemStack tenu en main, c'est plus propre d'utiliser setCurrentItemOrArmor. (et je francise les mots en anglais si je veux  😛 )

    Oui c'est un getter je le sais c'est sûrement mieux d'utiliser ta méthode mais moi j'ai l'habitude d'utiliser celle-ci car elle était déjà présente quand j'ai commencé vanilla en 1.2.5

    Sinon revenons au sujet il peut aussi utiliser cette méthode là pour ajouter setCurrentItemOrArmor, c'est comme ceci que le skeleton fait

    
        protected void addRandomArmor()
        {
            super.addRandomArmor();
            this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));
        }
    

    C'est la méthode qu'il utilise déjà mais apparemment elle ne fonctionne pas



  • @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    @'Julot10085':

    @'SCAREX':

    Ce qu'il veut lui c'est pas un getteur, c'est mettre un item de base à une entitée, comme l'archer ou le zombie pigman.

    Le résultat est le même et où il est dit qu'il ne souhaite pas un getter (au passage c'est gettER et pas gettEUR il faut arrêter de franciser les mots anglais de Java).  Tu peux tester les 2 méthodes proposées ici sont bonnes , c'est le résultat qui compte pas le procédé.

    getHeldItem récupère l'ItemStack tenu en main, c'est plus propre d'utiliser setCurrentItemOrArmor. (et je francise les mots en anglais si je veux  😛 )

    Oui c'est un getter je le sais c'est sûrement mieux d'utiliser ta méthode mais moi j'ai l'habitude d'utiliser celle-ci car elle était déjà présente quand j'ai commencé vanilla en 1.2.5

    Sinon revenons au sujet il peut aussi utiliser cette méthode là pour ajouter setCurrentItemOrArmor, c'est comme ceci que le skeleton fait

    
        protected void addRandomArmor()
        {
            super.addRandomArmor();
            this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));
        }
    

    C'est la méthode qu'il utilise déjà mais apparemment elle ne fonctionne pas

    Ah oui autant pour moi je n'avais pas vu x)
    Comme l'a demandé robin ton mob utilise-il un model différent du ModelBiped, a-t-il une forme spéciale ? Si ce n'est pas le cas essaies toujours de passer par ma fonction getHeldItem(), elle est pas propre certes ^^ Mais elle fonctionne



  • Merci merci ! Alors, j'ai fais ce que m'a dis Scarex, donc dans mon construteur, j'ai compléter celui de base par ça :

    public EntityNain(World par1world) {
    super(par1world);
    this.setCurrentItemOrArmor(0, new ItemStack(Items.golden_axe));
    

    Encore merci ! 😄