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

    Comment faire une lance ?

    Sans suite
    1.7.10
    5
    73
    15354
    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.
    • QuantumSheep
      QuantumSheep dernière édition par

      Bonjour,

      Après de longues recherches et d’essaies, je n’arrive toujours pas à faire une lance c’est à dire un Item qui se charge comme un arc pour se lancer comme une flèche.
      Si quelqu’un a une solution je suis preneur, merci 🙂

      Cordialement,

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

        Salut.
        Je ne modde pas en 1.7 donc je sais pas si çela fonctionne comme en 1.8 ( Les coddes ci-dessous seront en 1.7 hein )
        C’est assez simple, il te faudra ton item, mon aussi une entité Lance.
        D’abbord, dans la classe de l’item, rajoute ces méthodes :

        Cette méthode servira a faire spawn ton entité tirée

        public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
           {
               int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
        
               ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
               MinecraftForge.EVENT_BUS.post(event);
               if (event.isCanceled())
               {
                   return;
               }
               j = event.charge;
        
               boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
        
               if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
               {
                   float f = (float)j / 20.0F;
                   f = (f * f + f * 2.0F) / 3.0F;
        
                   if ((double)f < 0.1D)
                   {
                       return;
                   }
        
                   if (f > 1.0F)
                   {
                       f = 1.0F;
                   }
        
                   EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
        
                   if (f == 1.0F)
                   {
                       entityarrow.setIsCritical(true);
                   }
        
                   int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);
        
                   if (k > 0)
                   {
                       entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
                   }
        
                   int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);
        
                   if (l > 0)
                   {
                       entityarrow.setKnockbackStrength(l);
                   }
        
                   if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
                   {
                       entityarrow.setFire(100);
                   }
        
                   p_77615_1_.damageItem(1, p_77615_3_);
                   p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
        
                   if (flag)
                   {
                       entityarrow.canBePickedUp = 2;
                   }
                   else
                   {
                       p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
                   }
        
                   if (!p_77615_2_.isRemote)
                   {
                       p_77615_2_.spawnEntityInWorld(entityarrow);
                   }
               }
           }
        

        Puisque tu veut créer une lance, j’imagine que ce n’est pas un arc, donc voila le code, sans effet grâce aux enchantements

        public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
           {
               int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
        
               ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
               MinecraftForge.EVENT_BUS.post(event);
               if (event.isCanceled())
               {
                   return;
               }
               j = event.charge;
        
               boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
        
               if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
               {
                   float f = (float)j / 20.0F;
                   f = (f * f + f * 2.0F) / 3.0F;
        
                   if ((double)f < 0.1D)
                   {
                       return;
                   }
        
                   if (f > 1.0F)
                   {
                       f = 1.0F;
                   }
        
                   EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
        
                   if (f == 1.0F)
                   {
                       entityarrow.setIsCritical(true);
                   }
        
                   p_77615_1_.damageItem(1, p_77615_3_);
                   p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
        
                   if (flag)
                   {
                       entityarrow.canBePickedUp = 2;
                   }
                   else
                   {
                       p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
                   }
        
                   if (!p_77615_2_.isRemote)
                   {
                       p_77615_2_.spawnEntityInWorld(entityarrow);
                   }
               }
           }
        

        Maintenant, remplace la flèche par ton entité ( Appelé ‘EntitySpear’ dans cette méthode ( Appele la classe de ton entity comme tu veut )

        public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
           {
               int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
        
               ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
               MinecraftForge.EVENT_BUS.post(event);
               if (event.isCanceled())
               {
                   return;
               }
               j = event.charge;
        
               boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
        
               if (flag || p_77615_3_.inventory.hasItem(Items.arrow)) //Ici, change par le nom de ton item (Inutile dans le contexte, mais laise toujours )
               {
                   float f = (float)j / 20.0F;
                   f = (f * f + f * 2.0F) / 3.0F;
        
                   if ((double)f < 0.1D)
                   {
                       return;
                   }
        
                   if (f > 1.0F)
                   {
                       f = 1.0F;
                   }
        
                   EntitySpear entityarrow = new EntitySpear(p_77615_2_, p_77615_3_, f * 2.0F); //Tu a juste a changer le nom de l'entity ici
        
                   if (f == 1.0F)
                   {
                       entityarrow.setIsCritical(true);
                   }
        
                   p_77615_1_.damageItem(1, p_77615_3_);
                   p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
        
                   if (flag)
                   {
                       entityarrow.canBePickedUp = 2;
                   }
                   else
                   {
                       p_77615_3_.inventory.consumeInventoryItem(Items.arrow); //Ici, change aussi par ton item
                   }
        
                   if (!p_77615_2_.isRemote)
                   {
                       p_77615_2_.spawnEntityInWorld(entityarrow);
                   }
               }
           }
        

        Je ne sais pas si c’est méthode est utile, mais elle est présente dans le code de l’arc donc…

        public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_)
            {
                return p_77654_1_;
            }
        

        Ces méthodes servirons a faire en sorte que l’arc se charge ( Arc ou item hein )

        public int getMaxItemUseDuration(ItemStack p_77626_1_)
            {
                return 72000;
            }
        
         public EnumAction getItemUseAction(ItemStack p_77661_1_)
            {
                return EnumAction.bow;
            }
        
         public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
            {
                ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
                MinecraftForge.EVENT_BUS.post(event);
                if (event.isCanceled())
                {
                    return event.result;
                }
        
                if (p_77659_3_.capabilities.isCreativeMode || p_77659_3_.inventory.hasItem(Items.arrow))
                {
                    p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_));
                }
        
                return p_77659_1_;
            }
        

        Et voila, j’espère t’avoir aidé 🙂 Et dis moi s’il y a des erreurs, car je n’ai jamais moddé en 1.7

        Membre fantôme
        Je développe maintenant un jeu sur UnrealEngine4


        Contact :…

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

          Salut 🙂

          Merci beaucoup, la lance semble fonctionné mais je créé comment l’entité ? Je suis débutant dans ce milieu 😛

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

            Je t’invite a faire un petit copier coller sympatoche de la classe EntityArrow 🙂
            Voici comment l’obtenir, si tu ne sais pas ( Eh oui, je suis gentil moi )
            Sur ton package explorer :
            Minecraft > Referenced Libaries > forgeSrc BLAHBLAHBLAH > net > minecraft > entity > projectile > EntityArrow
            Si tu ne te débrouille pas trop bien avec les classes de bases, je pourrais t’expliquer un peu quoi changer

            Membre fantôme
            Je développe maintenant un jeu sur UnrealEngine4


            Contact :…

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

              J’ai bien fait le copié/coller, lancer le jeu et…. ça marche pas 😞
              La lance ne se charge pas et n’envois rien 😢

              Mes class:

              Class principale:
              :::

              package com.quantumsheep.arkcraft;
              
              import org.apache.logging.log4j.LogManager;
              import org.apache.logging.log4j.Logger;
              
              import com.quantumsheep.arkcraft.lib.CommonProxy;
              import com.quantumsheep.arkcraft.lib.References;
              import com.quantumsheep.arkcraft.weapons.WeaponSpear;
              
              import cpw.mods.fml.common.Mod;
              import cpw.mods.fml.common.Mod.EventHandler;
              import cpw.mods.fml.common.Mod.Instance;
              import cpw.mods.fml.common.SidedProxy;
              import cpw.mods.fml.common.event.FMLInitializationEvent;
              import cpw.mods.fml.common.event.FMLPostInitializationEvent;
              import cpw.mods.fml.common.event.FMLPreInitializationEvent;
              import cpw.mods.fml.common.registry.GameRegistry;
              import net.minecraft.creativetab.CreativeTabs;
              import net.minecraft.entity.Entity;
              import net.minecraft.item.Item;
              import net.minecraft.item.Item.ToolMaterial;
              import net.minecraftforge.common.util.EnumHelper;
              
              @Mod(modid = References.MODID, name = "ArkCraft Mod", version = References.VERSION)
              
              public class ArkCraftMod {
              
              @Instance("arkcraft")
              public static ArkCraftMod instance;
              
              @SidedProxy(clientSide = References.Client, serverSide = References.Common)
              public static CommonProxy proxy;
              
              public static Entity entitySpear;
              public static Item weaponSpear;
              
              public static final Logger LOGGER = LogManager.getLogger(References.NAME);
              
              @EventHandler
              public void preInit(FMLPreInitializationEvent event)
              {
              weaponSpear = new WeaponSpear().setUnlocalizedName("weaponSpear").setTextureName(References.MODID + ":itemtutoriel").setCreativeTab(CreativeTabs.tabMaterials);
              GameRegistry.registerItem(weaponSpear, "weapon_spear");
              }
              
              @EventHandler
              public void init(FMLInitializationEvent event)
              {
              proxy.registerRender();
              }
              
              @EventHandler
              public void postInit(FMLPostInitializationEvent event)
              {
              
              }
              }
              

              :::

              Class de la lance:
              :::

              package com.quantumsheep.arkcraft.weapons;
              
              import com.quantumsheep.arkcraft.entity.EntitySpear;
              
              import net.minecraft.creativetab.CreativeTabs;
              import net.minecraft.enchantment.Enchantment;
              import net.minecraft.enchantment.EnchantmentHelper;
              import net.minecraft.entity.player.EntityPlayer;
              import net.minecraft.entity.projectile.EntityArrow;
              import net.minecraft.entity.projectile.EntitySnowball;
              import net.minecraft.init.Items;
              import net.minecraft.item.Item;
              import net.minecraft.item.ItemStack;
              import net.minecraft.world.World;
              import net.minecraftforge.common.MinecraftForge;
              import net.minecraftforge.event.entity.player.ArrowLooseEvent;
              
              public class WeaponSpear extends Item {
              
              public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
                {
                    int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
              
                    ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
                    MinecraftForge.EVENT_BUS.post(event);
                    if (event.isCanceled())
                    {
                        return;
                    }
                    j = event.charge;
              
                    boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
              
                    if (flag || p_77615_3_.inventory.hasItem(Items.arrow)) //Ici, change par le nom de ton item (Inutile dans le contexte, mais laise toujours )
                    {
                        float f = (float)j / 20.0F;
                        f = (f * f + f * 2.0F) / 3.0F;
              
                        if ((double)f < 0.1D)
                        {
                            return;
                        }
              
                        if (f > 1.0F)
                        {
                            f = 1.0F;
                        }
              
                        EntitySpear entityarrow = new EntitySpear(p_77615_2_, p_77615_3_, f * 2.0F); //Tu a juste a changer le nom de l'entity ici
              
                        if (f == 1.0F)
                        {
                            entityarrow.setIsCritical(true);
                        }
              
                        p_77615_1_.damageItem(1, p_77615_3_);
                        p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
              
                        if (flag)
                        {
                            entityarrow.canBePickedUp = 2;
                        }
                        else
                        {
                            p_77615_3_.inventory.consumeInventoryItem(Items.arrow); //Ici, change aussi par ton item
                        }
              
                        if (!p_77615_2_.isRemote)
                        {
                            p_77615_2_.spawnEntityInWorld(entityarrow);
                        }
                    }
                }
              }
              

              :::

              Class de l’entité:
              :::

              package com.quantumsheep.arkcraft.entity;
              
              import java.util.List;
              
              import cpw.mods.fml.relauncher.Side;
              import cpw.mods.fml.relauncher.SideOnly;
              import net.minecraft.block.Block;
              import net.minecraft.block.material.Material;
              import net.minecraft.enchantment.EnchantmentHelper;
              import net.minecraft.entity.Entity;
              import net.minecraft.entity.EntityLivingBase;
              import net.minecraft.entity.monster.EntityEnderman;
              import net.minecraft.entity.player.EntityPlayer;
              import net.minecraft.entity.player.EntityPlayerMP;
              import net.minecraft.entity.projectile.EntityArrow;
              import net.minecraft.init.Items;
              import net.minecraft.item.ItemStack;
              import net.minecraft.nbt.NBTTagCompound;
              import net.minecraft.network.play.server.S2BPacketChangeGameState;
              import net.minecraft.util.AxisAlignedBB;
              import net.minecraft.util.DamageSource;
              import net.minecraft.util.MathHelper;
              import net.minecraft.util.MovingObjectPosition;
              import net.minecraft.util.Vec3;
              import net.minecraft.world.World;
              
              public class EntitySpear extends EntityArrow
              {
                 private int field_145791_d = -1;
                 private int field_145792_e = -1;
                 private int field_145789_f = -1;
                 private Block field_145790_g;
                 private int inData;
                 private boolean inGround;
                 /** 1 if the player can pick up the arrow */
                 public int canBePickedUp;
                 /** Seems to be some sort of timer for animating an arrow. */
                 public int arrowShake;
                 /** The owner of this arrow. */
                 public Entity shootingEntity;
                 private int ticksInGround;
                 private int ticksInAir;
                 private double damage = 2.0D;
                 /** The amount of knockback an arrow applies when it hits a mob. */
                 private int knockbackStrength;
                 private static final String __OBFID = "CL_00001715";
              
                 public EntitySpear(World p_i1753_1_)
                 {
                     super(p_i1753_1_);
                     this.renderDistanceWeight = 10.0D;
                     this.setSize(0.5F, 0.5F);
                 }
              
                 public EntitySpear(World p_i1754_1_, double p_i1754_2_, double p_i1754_4_, double p_i1754_6_)
                 {
                     super(p_i1754_1_);
                     this.renderDistanceWeight = 10.0D;
                     this.setSize(0.5F, 0.5F);
                     this.setPosition(p_i1754_2_, p_i1754_4_, p_i1754_6_);
                     this.yOffset = 0.0F;
                 }
              
                 public EntitySpear(World p_i1755_1_, EntityLivingBase p_i1755_2_, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_)
                 {
                     super(p_i1755_1_);
                     this.renderDistanceWeight = 10.0D;
                     this.shootingEntity = p_i1755_2_;
              
                     if (p_i1755_2_ instanceof EntityPlayer)
                     {
                         this.canBePickedUp = 1;
                     }
              
                     this.posY = p_i1755_2_.posY + (double)p_i1755_2_.getEyeHeight() - 0.10000000149011612D;
                     double d0 = p_i1755_3_.posX - p_i1755_2_.posX;
                     double d1 = p_i1755_3_.boundingBox.minY + (double)(p_i1755_3_.height / 3.0F) - this.posY;
                     double d2 = p_i1755_3_.posZ - p_i1755_2_.posZ;
                     double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
              
                     if (d3 >= 1.0E-7D)
                     {
                         float f2 = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
                         float f3 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI));
                         double d4 = d0 / d3;
                         double d5 = d2 / d3;
                         this.setLocationAndAngles(p_i1755_2_.posX + d4, this.posY, p_i1755_2_.posZ + d5, f2, f3);
                         this.yOffset = 0.0F;
                         float f4 = (float)d3 * 0.2F;
                         this.setThrowableHeading(d0, d1 + (double)f4, d2, p_i1755_4_, p_i1755_5_);
                     }
                 }
              
                 public EntitySpear(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_)
                 {
                     super(p_i1756_1_);
                     this.renderDistanceWeight = 10.0D;
                     this.shootingEntity = p_i1756_2_;
              
                     if (p_i1756_2_ instanceof EntityPlayer)
                     {
                         this.canBePickedUp = 1;
                     }
              
                     this.setSize(0.5F, 0.5F);
                     this.setLocationAndAngles(p_i1756_2_.posX, p_i1756_2_.posY + (double)p_i1756_2_.getEyeHeight(), p_i1756_2_.posZ, p_i1756_2_.rotationYaw, p_i1756_2_.rotationPitch);
                     this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                     this.posY -= 0.10000000149011612D;
                     this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                     this.setPosition(this.posX, this.posY, this.posZ);
                     this.yOffset = 0.0F;
                     this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                     this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                     this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));
                     this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5F, 1.0F);
                 }
              
                 protected void entityInit()
                 {
                     this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
                 }
              
                 /**
                  * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
                  */
                 public void setThrowableHeading(double p_70186_1_, double p_70186_3_, double p_70186_5_, float p_70186_7_, float p_70186_8_)
                 {
                     float f2 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_3_ * p_70186_3_ + p_70186_5_ * p_70186_5_);
                     p_70186_1_ /= (double)f2;
                     p_70186_3_ /= (double)f2;
                     p_70186_5_ /= (double)f2;
                     p_70186_1_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                     p_70186_3_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                     p_70186_5_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                     p_70186_1_ *= (double)p_70186_7_;
                     p_70186_3_ *= (double)p_70186_7_;
                     p_70186_5_ *= (double)p_70186_7_;
                     this.motionX = p_70186_1_;
                     this.motionY = p_70186_3_;
                     this.motionZ = p_70186_5_;
                     float f3 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_5_ * p_70186_5_);
                     this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70186_1_, p_70186_5_) * 180.0D / Math.PI);
                     this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70186_3_, (double)f3) * 180.0D / Math.PI);
                     this.ticksInGround = 0;
                 }
              
                 /**
                  * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX,
                  * posY, posZ, yaw, pitch
                  */
                 @SideOnly(Side.CLIENT)
                 public void setPositionAndRotation2(double p_70056_1_, double p_70056_3_, double p_70056_5_, float p_70056_7_, float p_70056_8_, int p_70056_9_)
                 {
                     this.setPosition(p_70056_1_, p_70056_3_, p_70056_5_);
                     this.setRotation(p_70056_7_, p_70056_8_);
                 }
              
                 /**
                  * Sets the velocity to the args. Args: x, y, z
                  */
                 @SideOnly(Side.CLIENT)
                 public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_)
                 {
                     this.motionX = p_70016_1_;
                     this.motionY = p_70016_3_;
                     this.motionZ = p_70016_5_;
              
                     if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                     {
                         float f = MathHelper.sqrt_double(p_70016_1_ * p_70016_1_ + p_70016_5_ * p_70016_5_);
                         this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70016_1_, p_70016_5_) * 180.0D / Math.PI);
                         this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70016_3_, (double)f) * 180.0D / Math.PI);
                         this.prevRotationPitch = this.rotationPitch;
                         this.prevRotationYaw = this.rotationYaw;
                         this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
                         this.ticksInGround = 0;
                     }
                 }
              
                 /**
                  * Called to update the entity's position/logic.
                  */
                 public void onUpdate()
                 {
                     super.onUpdate();
              
                     if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                     {
                         float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                         this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
                         this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);
                     }
              
                     Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
              
                     if (block.getMaterial() != Material.air)
                     {
                         block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
                         AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
              
                         if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ)))
                         {
                             this.inGround = true;
                         }
                     }
              
                     if (this.arrowShake > 0)
                     {
                         --this.arrowShake;
                     }
              
                     if (this.inGround)
                     {
                         int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
              
                         if (block == this.field_145790_g && j == this.inData)
                         {
                             ++this.ticksInGround;
              
                             if (this.ticksInGround == 1200)
                             {
                                 this.setDead();
                             }
                         }
                         else
                         {
                             this.inGround = false;
                             this.motionX *= (double)(this.rand.nextFloat() * 0.2F);
                             this.motionY *= (double)(this.rand.nextFloat() * 0.2F);
                             this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);
                             this.ticksInGround = 0;
                             this.ticksInAir = 0;
                         }
                     }
                     else
                     {
                         ++this.ticksInAir;
                         Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                         Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
                         MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false);
                         vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                         vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
              
                         if (movingobjectposition != null)
                         {
                             vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
                         }
              
                         Entity entity = null;
                         List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
                         double d0 = 0.0D;
                         int i;
                         float f1;
              
                         for (i = 0; i < list.size(); ++i)
                         {
                             Entity entity1 = (Entity)list.get(i);
              
                             if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))
                             {
                                 f1 = 0.3F;
                                 AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1);
                                 MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);
              
                                 if (movingobjectposition1 != null)
                                 {
                                     double d1 = vec31.distanceTo(movingobjectposition1.hitVec);
              
                                     if (d1 < d0 || d0 == 0.0D)
                                     {
                                         entity = entity1;
                                         d0 = d1;
                                     }
                                 }
                             }
                         }
              
                         if (entity != null)
                         {
                             movingobjectposition = new MovingObjectPosition(entity);
                         }
              
                         if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)
                         {
                             EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;
              
                             if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))
                             {
                                 movingobjectposition = null;
                             }
                         }
              
                         float f2;
                         float f4;
              
                         if (movingobjectposition != null)
                         {
                             if (movingobjectposition.entityHit != null)
                             {
                                 f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                 int k = MathHelper.ceiling_double_int((double)f2 * this.damage);
              
                                 if (this.getIsCritical())
                                 {
                                     k += this.rand.nextInt(k / 2 + 2);
                                 }
              
                                 DamageSource damagesource = null;
              
                                 if (this.shootingEntity == null)
                                 {
                                     damagesource = DamageSource.causeArrowDamage(this, this);
                                 }
                                 else
                                 {
                                     damagesource = DamageSource.causeArrowDamage(this, this.shootingEntity);
                                 }
              
                                 if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))
                                 {
                                     movingobjectposition.entityHit.setFire(5);
                                 }
              
                                 if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))
                                 {
                                     if (movingobjectposition.entityHit instanceof EntityLivingBase)
                                     {
                                         EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;
              
                                         if (!this.worldObj.isRemote)
                                         {
                                             entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);
                                         }
              
                                         if (this.knockbackStrength > 0)
                                         {
                                             f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
              
                                             if (f4 > 0.0F)
                                             {
                                                 movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);
                                             }
                                         }
              
                                         if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase)
                                         {
                                             EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity);
                                             EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase);
                                         }
              
                                         if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)
                                         {
                                             ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));
                                         }
                                     }
              
                                     this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
              
                                     if (!(movingobjectposition.entityHit instanceof EntityEnderman))
                                     {
                                         this.setDead();
                                     }
                                 }
                                 else
                                 {
                                     this.motionX *= -0.10000000149011612D;
                                     this.motionY *= -0.10000000149011612D;
                                     this.motionZ *= -0.10000000149011612D;
                                     this.rotationYaw += 180.0F;
                                     this.prevRotationYaw += 180.0F;
                                     this.ticksInAir = 0;
                                 }
                             }
                             else
                             {
                                 this.field_145791_d = movingobjectposition.blockX;
                                 this.field_145792_e = movingobjectposition.blockY;
                                 this.field_145789_f = movingobjectposition.blockZ;
                                 this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                 this.inData = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                 this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));
                                 this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));
                                 this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));
                                 f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                 this.posX -= this.motionX / (double)f2 * 0.05000000074505806D;
                                 this.posY -= this.motionY / (double)f2 * 0.05000000074505806D;
                                 this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D;
                                 this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                                 this.inGround = true;
                                 this.arrowShake = 7;
                                 this.setIsCritical(false);
              
                                 if (this.field_145790_g.getMaterial() != Material.air)
                                 {
                                     this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this);
                                 }
                             }
                         }
              
                         if (this.getIsCritical())
                         {
                             for (i = 0; i < 4; ++i)
                             {
                                 this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ);
                             }
                         }
              
                         this.posX += this.motionX;
                         this.posY += this.motionY;
                         this.posZ += this.motionZ;
                         f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                         this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
              
                         for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
                         {
                             ;
                         }
              
                         while (this.rotationPitch - this.prevRotationPitch >= 180.0F)
                         {
                             this.prevRotationPitch += 360.0F;
                         }
              
                         while (this.rotationYaw - this.prevRotationYaw < -180.0F)
                         {
                             this.prevRotationYaw -= 360.0F;
                         }
              
                         while (this.rotationYaw - this.prevRotationYaw >= 180.0F)
                         {
                             this.prevRotationYaw += 360.0F;
                         }
              
                         this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
                         this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
                         float f3 = 0.99F;
                         f1 = 0.05F;
              
                         if (this.isInWater())
                         {
                             for (int l = 0; l < 4; ++l)
                             {
                                 f4 = 0.25F;
                                 this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ);
                             }
              
                             f3 = 0.8F;
                         }
              
                         if (this.isWet())
                         {
                             this.extinguish();
                         }
              
                         this.motionX *= (double)f3;
                         this.motionY *= (double)f3;
                         this.motionZ *= (double)f3;
                         this.motionY -= (double)f1;
                         this.setPosition(this.posX, this.posY, this.posZ);
                         this.func_145775_I();
                     }
                 }
              
                 /**
                  * (abstract) Protected helper method to write subclass entity data to NBT.
                  */
                 public void writeEntityToNBT(NBTTagCompound p_70014_1_)
                 {
                     p_70014_1_.setShort("xTile", (short)this.field_145791_d);
                     p_70014_1_.setShort("yTile", (short)this.field_145792_e);
                     p_70014_1_.setShort("zTile", (short)this.field_145789_f);
                     p_70014_1_.setShort("life", (short)this.ticksInGround);
                     p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.field_145790_g));
                     p_70014_1_.setByte("inData", (byte)this.inData);
                     p_70014_1_.setByte("shake", (byte)this.arrowShake);
                     p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));
                     p_70014_1_.setByte("pickup", (byte)this.canBePickedUp);
                     p_70014_1_.setDouble("damage", this.damage);
                 }
              
                 /**
                  * (abstract) Protected helper method to read subclass entity data from NBT.
                  */
                 public void readEntityFromNBT(NBTTagCompound p_70037_1_)
                 {
                     this.field_145791_d = p_70037_1_.getShort("xTile");
                     this.field_145792_e = p_70037_1_.getShort("yTile");
                     this.field_145789_f = p_70037_1_.getShort("zTile");
                     this.ticksInGround = p_70037_1_.getShort("life");
                     this.field_145790_g = Block.getBlockById(p_70037_1_.getByte("inTile") & 255);
                     this.inData = p_70037_1_.getByte("inData") & 255;
                     this.arrowShake = p_70037_1_.getByte("shake") & 255;
                     this.inGround = p_70037_1_.getByte("inGround") == 1;
              
                     if (p_70037_1_.hasKey("damage", 99))
                     {
                         this.damage = p_70037_1_.getDouble("damage");
                     }
              
                     if (p_70037_1_.hasKey("pickup", 99))
                     {
                         this.canBePickedUp = p_70037_1_.getByte("pickup");
                     }
                     else if (p_70037_1_.hasKey("player", 99))
                     {
                         this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0;
                     }
                 }
              
                 /**
                  * Called by a player entity when they collide with an entity
                  */
                 public void onCollideWithPlayer(EntityPlayer p_70100_1_)
                 {
                     if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0)
                     {
                         boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
              
                         if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(Items.arrow, 1)))
                         {
                             flag = false;
                         }
              
                         if (flag)
                         {
                             this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                             p_70100_1_.onItemPickup(this, 1);
                             this.setDead();
                         }
                     }
                 }
              
                 /**
                  * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
                  * prevent them from trampling crops
                  */
                 protected boolean canTriggerWalking()
                 {
                     return false;
                 }
              
                 @SideOnly(Side.CLIENT)
                 public float getShadowSize()
                 {
                     return 0.0F;
                 }
              
                 public void setDamage(double p_70239_1_)
                 {
                     this.damage = p_70239_1_;
                 }
              
                 public double getDamage()
                 {
                     return this.damage;
                 }
              
                 /**
                  * Sets the amount of knockback the arrow applies when it hits a mob.
                  */
                 public void setKnockbackStrength(int p_70240_1_)
                 {
                     this.knockbackStrength = p_70240_1_;
                 }
              
                 /**
                  * If returns false, the item will not inflict any damage against entities.
                  */
                 public boolean canAttackWithItem()
                 {
                     return false;
                 }
              
                 /**
                  * Whether the arrow has a stream of critical hit particles flying behind it.
                  */
                 public void setIsCritical(boolean p_70243_1_)
                 {
                     byte b0 = this.dataWatcher.getWatchableObjectByte(16);
              
                     if (p_70243_1_)
                     {
                         this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));
                     }
                     else
                     {
                         this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));
                     }
                 }
              
                 /**
                  * Whether the arrow has a stream of critical hit particles flying behind it.
                  */
                 public boolean getIsCritical()
                 {
                     byte b0 = this.dataWatcher.getWatchableObjectByte(16);
                     return (b0 & 1) != 0;
                 }
              }
              

              :::

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

                Les entités doivent être enregistré. Et il faut ajouter un rendu à ton entité sinon elle ne se verra pas.

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

                  Comme là dit robin, il faut register ton entitée
                  Et ton item n’a pas toutes les méthodes que j’ai mis
                  Il te manque toutes celles qui font que ton item peut se charger, donc oui, ça marchera pas 😕

                  Membre fantôme
                  Je développe maintenant un jeu sur UnrealEngine4


                  Contact :…

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

                    Bon, j’ai réussi, ça charge et ça tire (Des flèches….)

                    Voilà mes class:

                    Principale:
                    :::

                    package com.quantumsheep.arkcraft;
                    
                    import java.awt.Color;
                    
                    import org.apache.logging.log4j.LogManager;
                    import org.apache.logging.log4j.Logger;
                    
                    import com.quantumsheep.arkcraft.entity.EntitySpear;
                    import com.quantumsheep.arkcraft.lib.CommonProxy;
                    import com.quantumsheep.arkcraft.lib.References;
                    import com.quantumsheep.arkcraft.weapons.WeaponSpear;
                    
                    import cpw.mods.fml.common.Mod;
                    import cpw.mods.fml.common.Mod.EventHandler;
                    import cpw.mods.fml.common.Mod.Instance;
                    import cpw.mods.fml.common.SidedProxy;
                    import cpw.mods.fml.common.event.FMLInitializationEvent;
                    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
                    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
                    import cpw.mods.fml.common.registry.EntityRegistry;
                    import cpw.mods.fml.common.registry.GameRegistry;
                    import net.minecraft.creativetab.CreativeTabs;
                    import net.minecraft.entity.Entity;
                    import net.minecraft.item.Item;
                    import net.minecraft.item.Item.ToolMaterial;
                    import net.minecraftforge.common.util.EnumHelper;
                    
                    @Mod(modid = References.MODID, name = "ArkCraft Mod", version = References.VERSION)
                    
                    public class ArkCraftMod {
                    
                    @Instance("arkcraft")
                    public static ArkCraftMod instance;
                    
                    @SidedProxy(clientSide = References.Client, serverSide = References.Common)
                    public static CommonProxy proxy;
                    
                    public static Item weaponSpear;
                    
                    public static final Logger LOGGER = LogManager.getLogger(References.NAME);
                    
                    @EventHandler
                    public void preInit(FMLPreInitializationEvent event)
                    {
                    weaponSpear = new WeaponSpear().setUnlocalizedName("weaponSpear").setTextureName(References.MODID + ":itemtutoriel").setCreativeTab(CreativeTabs.tabMaterials);
                    
                    GameRegistry.registerItem(weaponSpear, "weapon_spear");
                    }
                    
                    @EventHandler
                    public void init(FMLInitializationEvent event)
                    {
                    proxy.registerRender();
                    EntityRegistry.registerGlobalEntityID(EntitySpear.class, "entitySpear", EntityRegistry.findGlobalUniqueEntityId(), new Color(0, 255, 0).getRGB(), new Color(255, 0, 0).getRGB());
                    EntityRegistry.registerModEntity(EntitySpear.class, "entitySpear", 420, this.instance, 40, 1, true);
                    }
                    
                    @EventHandler
                    public void postInit(FMLPostInitializationEvent event)
                    {
                    
                    }
                    }
                    

                    :::

                    Lance:
                    :::

                    package com.quantumsheep.arkcraft.weapons;
                    
                    import com.quantumsheep.arkcraft.ArkCraftMod;
                    import com.quantumsheep.arkcraft.entity.EntitySpear;
                    
                    import net.minecraft.creativetab.CreativeTabs;
                    import net.minecraft.enchantment.Enchantment;
                    import net.minecraft.enchantment.EnchantmentHelper;
                    import net.minecraft.entity.player.EntityPlayer;
                    import net.minecraft.entity.projectile.EntityArrow;
                    import net.minecraft.entity.projectile.EntitySnowball;
                    import net.minecraft.init.Items;
                    import net.minecraft.item.EnumAction;
                    import net.minecraft.item.Item;
                    import net.minecraft.item.ItemStack;
                    import net.minecraft.world.World;
                    import net.minecraftforge.common.MinecraftForge;
                    import net.minecraftforge.event.entity.player.ArrowLooseEvent;
                    import net.minecraftforge.event.entity.player.ArrowNockEvent;
                    
                    public class WeaponSpear extends Item {
                    
                    public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
                      {
                          int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
                    
                          ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
                          MinecraftForge.EVENT_BUS.post(event);
                          if (event.isCanceled())
                          {
                              return;
                          }
                          j = event.charge;
                    
                          boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
                    
                          if (flag || p_77615_3_.inventory.hasItem(ArkCraftMod.weaponSpear)) //Ici, change par le nom de ton item (Inutile dans le contexte, mais laise toujours )
                          {
                              float f = (float)j / 5.0F;
                              f = (f * f + f * 2.0F) / 3.0F;
                    
                              if ((double)f < 0.1D)
                              {
                                  return;
                              }
                    
                              if (f > 1.0F)
                              {
                                  f = 1.0F;
                              }
                    
                              EntitySpear entityarrow = new EntitySpear(p_77615_2_, p_77615_3_, f * 2.0F); //Tu a juste a changer le nom de l'entity ici
                    
                              if (f == 1.0F)
                              {
                                  entityarrow.setIsCritical(true);
                              }
                    
                              p_77615_1_.damageItem(1, p_77615_3_);
                              p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
                    
                              if (flag)
                              {
                                  entityarrow.canBePickedUp = 2;
                              }
                              else
                              {
                                  p_77615_3_.inventory.consumeInventoryItem(Items.arrow); //Ici, change aussi par ton item
                              }
                    
                              if (!p_77615_2_.isRemote)
                              {
                                  p_77615_2_.spawnEntityInWorld(entityarrow);
                              }
                          }
                      }
                    
                    public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_)
                       {
                           return p_77654_1_;
                       }
                    
                    public int getMaxItemUseDuration(ItemStack p_77626_1_)
                       {
                           return 72000;
                       }
                    
                    public EnumAction getItemUseAction(ItemStack p_77661_1_)
                       {
                           return EnumAction.bow;
                       }
                    
                    public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
                       {
                           ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
                           MinecraftForge.EVENT_BUS.post(event);
                           if (event.isCanceled())
                           {
                               return event.result;
                           }
                    
                           if (p_77659_3_.capabilities.isCreativeMode || p_77659_3_.inventory.hasItem(Items.arrow))
                           {
                               p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_));
                           }
                    
                           return p_77659_1_;
                       }
                    }
                    
                    

                    :::

                    Entity de la lance:
                    :::

                    
                    package com.quantumsheep.arkcraft.entity;
                    
                    import java.util.List;
                    
                    import cpw.mods.fml.relauncher.Side;
                    import cpw.mods.fml.relauncher.SideOnly;
                    import net.minecraft.block.Block;
                    import net.minecraft.block.material.Material;
                    import net.minecraft.enchantment.EnchantmentHelper;
                    import net.minecraft.entity.Entity;
                    import net.minecraft.entity.EntityLivingBase;
                    import net.minecraft.entity.monster.EntityEnderman;
                    import net.minecraft.entity.player.EntityPlayer;
                    import net.minecraft.entity.player.EntityPlayerMP;
                    import net.minecraft.entity.projectile.EntityArrow;
                    import net.minecraft.init.Items;
                    import net.minecraft.item.ItemStack;
                    import net.minecraft.nbt.NBTTagCompound;
                    import net.minecraft.network.play.server.S2BPacketChangeGameState;
                    import net.minecraft.util.AxisAlignedBB;
                    import net.minecraft.util.DamageSource;
                    import net.minecraft.util.MathHelper;
                    import net.minecraft.util.MovingObjectPosition;
                    import net.minecraft.util.Vec3;
                    import net.minecraft.world.World;
                    
                    public class EntitySpear extends EntityArrow
                    {
                        private int field_145791_d = -1;
                        private int field_145792_e = -1;
                        private int field_145789_f = -1;
                        private Block field_145790_g;
                        private int inData;
                        private boolean inGround;
                        /** 1 if the player can pick up the arrow */
                        public int canBePickedUp;
                        /** Seems to be some sort of timer for animating an arrow. */
                        public int arrowShake;
                        /** The owner of this arrow. */
                        public Entity shootingEntity;
                        private int ticksInGround;
                        private int ticksInAir;
                        private double damage = 2.0D;
                        /** The amount of knockback an arrow applies when it hits a mob. */
                        private int knockbackStrength;
                        private static final String __OBFID = "CL_00001715";
                    
                        public EntitySpear(World p_i1753_1_)
                        {
                            super(p_i1753_1_);
                            this.renderDistanceWeight = 10.0D;
                            this.setSize(0.5F, 0.5F);
                        }
                    
                        public EntitySpear(World p_i1754_1_, double p_i1754_2_, double p_i1754_4_, double p_i1754_6_)
                        {
                            super(p_i1754_1_);
                            this.renderDistanceWeight = 10.0D;
                            this.setSize(0.5F, 0.5F);
                            this.setPosition(p_i1754_2_, p_i1754_4_, p_i1754_6_);
                            this.yOffset = 0.0F;
                        }
                    
                        public EntitySpear(World p_i1755_1_, EntityLivingBase p_i1755_2_, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_)
                        {
                            super(p_i1755_1_);
                            this.renderDistanceWeight = 10.0D;
                            this.shootingEntity = p_i1755_2_;
                    
                            if (p_i1755_2_ instanceof EntityPlayer)
                            {
                                this.canBePickedUp = 1;
                            }
                    
                            this.posY = p_i1755_2_.posY + (double)p_i1755_2_.getEyeHeight() - 0.10000000149011612D;
                            double d0 = p_i1755_3_.posX - p_i1755_2_.posX;
                            double d1 = p_i1755_3_.boundingBox.minY + (double)(p_i1755_3_.height / 3.0F) - this.posY;
                            double d2 = p_i1755_3_.posZ - p_i1755_2_.posZ;
                            double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
                    
                            if (d3 >= 1.0E-7D)
                            {
                                float f2 = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
                                float f3 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI));
                                double d4 = d0 / d3;
                                double d5 = d2 / d3;
                                this.setLocationAndAngles(p_i1755_2_.posX + d4, this.posY, p_i1755_2_.posZ + d5, f2, f3);
                                this.yOffset = 0.0F;
                                float f4 = (float)d3 * 0.2F;
                                this.setThrowableHeading(d0, d1 + (double)f4, d2, p_i1755_4_, p_i1755_5_);
                            }
                        }
                    
                        public EntitySpear(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_)
                        {
                            super(p_i1756_1_);
                            this.renderDistanceWeight = 10.0D;
                            this.shootingEntity = p_i1756_2_;
                    
                            if (p_i1756_2_ instanceof EntityPlayer)
                            {
                                this.canBePickedUp = 1;
                            }
                    
                            this.setSize(0.5F, 0.5F);
                            this.setLocationAndAngles(p_i1756_2_.posX, p_i1756_2_.posY + (double)p_i1756_2_.getEyeHeight(), p_i1756_2_.posZ, p_i1756_2_.rotationYaw, p_i1756_2_.rotationPitch);
                            this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                            this.posY -= 0.10000000149011612D;
                            this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                            this.setPosition(this.posX, this.posY, this.posZ);
                            this.yOffset = 0.0F;
                            this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                            this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                            this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));
                            this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5F, 1.0F);
                        }
                    
                        protected void entityInit()
                        {
                            this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
                        }
                    
                        /**
                         * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
                         */
                        public void setThrowableHeading(double p_70186_1_, double p_70186_3_, double p_70186_5_, float p_70186_7_, float p_70186_8_)
                        {
                            float f2 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_3_ * p_70186_3_ + p_70186_5_ * p_70186_5_);
                            p_70186_1_ /= (double)f2;
                            p_70186_3_ /= (double)f2;
                            p_70186_5_ /= (double)f2;
                            p_70186_1_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                            p_70186_3_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                            p_70186_5_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                            p_70186_1_ *= (double)p_70186_7_;
                            p_70186_3_ *= (double)p_70186_7_;
                            p_70186_5_ *= (double)p_70186_7_;
                            this.motionX = p_70186_1_;
                            this.motionY = p_70186_3_;
                            this.motionZ = p_70186_5_;
                            float f3 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_5_ * p_70186_5_);
                            this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70186_1_, p_70186_5_) * 180.0D / Math.PI);
                            this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70186_3_, (double)f3) * 180.0D / Math.PI);
                            this.ticksInGround = 0;
                        }
                    
                        /**
                         * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX,
                         * posY, posZ, yaw, pitch
                         */
                        @SideOnly(Side.CLIENT)
                        public void setPositionAndRotation2(double p_70056_1_, double p_70056_3_, double p_70056_5_, float p_70056_7_, float p_70056_8_, int p_70056_9_)
                        {
                            this.setPosition(p_70056_1_, p_70056_3_, p_70056_5_);
                            this.setRotation(p_70056_7_, p_70056_8_);
                        }
                    
                        /**
                         * Sets the velocity to the args. Args: x, y, z
                         */
                        @SideOnly(Side.CLIENT)
                        public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_)
                        {
                            this.motionX = p_70016_1_;
                            this.motionY = p_70016_3_;
                            this.motionZ = p_70016_5_;
                    
                            if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                            {
                                float f = MathHelper.sqrt_double(p_70016_1_ * p_70016_1_ + p_70016_5_ * p_70016_5_);
                                this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70016_1_, p_70016_5_) * 180.0D / Math.PI);
                                this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70016_3_, (double)f) * 180.0D / Math.PI);
                                this.prevRotationPitch = this.rotationPitch;
                                this.prevRotationYaw = this.rotationYaw;
                                this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
                                this.ticksInGround = 0;
                            }
                        }
                    
                        /**
                         * Called to update the entity's position/logic.
                         */
                        public void onUpdate()
                        {
                            super.onUpdate();
                    
                            if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                            {
                                float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                                this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
                                this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);
                            }
                    
                            Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                    
                            if (block.getMaterial() != Material.air)
                            {
                                block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
                    
                                if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ)))
                                {
                                    this.inGround = true;
                                }
                            }
                    
                            if (this.arrowShake > 0)
                            {
                                --this.arrowShake;
                            }
                    
                            if (this.inGround)
                            {
                                int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                    
                                if (block == this.field_145790_g && j == this.inData)
                                {
                                    ++this.ticksInGround;
                    
                                    if (this.ticksInGround == 1200)
                                    {
                                        this.setDead();
                                    }
                                }
                                else
                                {
                                    this.inGround = false;
                                    this.motionX *= (double)(this.rand.nextFloat() * 0.2F);
                                    this.motionY *= (double)(this.rand.nextFloat() * 0.2F);
                                    this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);
                                    this.ticksInGround = 0;
                                    this.ticksInAir = 0;
                                }
                            }
                            else
                            {
                                ++this.ticksInAir;
                                Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                                Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
                                MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false);
                                vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                                vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
                    
                                if (movingobjectposition != null)
                                {
                                    vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
                                }
                    
                                Entity entity = null;
                                List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
                                double d0 = 0.0D;
                                int i;
                                float f1;
                    
                                for (i = 0; i < list.size(); ++i)
                                {
                                    Entity entity1 = (Entity)list.get(i);
                    
                                    if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))
                                    {
                                        f1 = 0.3F;
                                        AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1);
                                        MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);
                    
                                        if (movingobjectposition1 != null)
                                        {
                                            double d1 = vec31.distanceTo(movingobjectposition1.hitVec);
                    
                                            if (d1 < d0 || d0 == 0.0D)
                                            {
                                                entity = entity1;
                                                d0 = d1;
                                            }
                                        }
                                    }
                                }
                    
                                if (entity != null)
                                {
                                    movingobjectposition = new MovingObjectPosition(entity);
                                }
                    
                                if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)
                                {
                                    EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;
                    
                                    if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))
                                    {
                                        movingobjectposition = null;
                                    }
                                }
                    
                                float f2;
                                float f4;
                    
                                if (movingobjectposition != null)
                                {
                                    if (movingobjectposition.entityHit != null)
                                    {
                                        f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                        int k = MathHelper.ceiling_double_int((double)f2 * this.damage);
                    
                                        if (this.getIsCritical())
                                        {
                                            k += this.rand.nextInt(k / 2 + 2);
                                        }
                    
                                        DamageSource damagesource = null;
                    
                                        if (this.shootingEntity == null)
                                        {
                                            damagesource = DamageSource.causeArrowDamage(this, this);
                                        }
                                        else
                                        {
                                            damagesource = DamageSource.causeArrowDamage(this, this.shootingEntity);
                                        }
                    
                                        if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))
                                        {
                                            movingobjectposition.entityHit.setFire(5);
                                        }
                    
                                        if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))
                                        {
                                            if (movingobjectposition.entityHit instanceof EntityLivingBase)
                                            {
                                                EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;
                    
                                                if (!this.worldObj.isRemote)
                                                {
                                                    entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);
                                                }
                    
                                                if (this.knockbackStrength > 0)
                                                {
                                                    f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                    
                                                    if (f4 > 0.0F)
                                                    {
                                                        movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);
                                                    }
                                                }
                    
                                                if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase)
                                                {
                                                    EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity);
                                                    EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase);
                                                }
                    
                                                if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)
                                                {
                                                    ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));
                                                }
                                            }
                    
                                            this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                    
                                            if (!(movingobjectposition.entityHit instanceof EntityEnderman))
                                            {
                                                this.setDead();
                                            }
                                        }
                                        else
                                        {
                                            this.motionX *= -0.10000000149011612D;
                                            this.motionY *= -0.10000000149011612D;
                                            this.motionZ *= -0.10000000149011612D;
                                            this.rotationYaw += 180.0F;
                                            this.prevRotationYaw += 180.0F;
                                            this.ticksInAir = 0;
                                        }
                                    }
                                    else
                                    {
                                        this.field_145791_d = movingobjectposition.blockX;
                                        this.field_145792_e = movingobjectposition.blockY;
                                        this.field_145789_f = movingobjectposition.blockZ;
                                        this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        this.inData = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));
                                        this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));
                                        this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));
                                        f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                        this.posX -= this.motionX / (double)f2 * 0.05000000074505806D;
                                        this.posY -= this.motionY / (double)f2 * 0.05000000074505806D;
                                        this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D;
                                        this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                                        this.inGround = true;
                                        this.arrowShake = 7;
                                        this.setIsCritical(false);
                    
                                        if (this.field_145790_g.getMaterial() != Material.air)
                                        {
                                            this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this);
                                        }
                                    }
                                }
                    
                                if (this.getIsCritical())
                                {
                                    for (i = 0; i < 4; ++i)
                                    {
                                        this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ);
                                    }
                                }
                    
                                this.posX += this.motionX;
                                this.posY += this.motionY;
                                this.posZ += this.motionZ;
                                f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                                this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
                    
                                for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
                                {
                                    ;
                                }
                    
                                while (this.rotationPitch - this.prevRotationPitch >= 180.0F)
                                {
                                    this.prevRotationPitch += 360.0F;
                                }
                    
                                while (this.rotationYaw - this.prevRotationYaw < -180.0F)
                                {
                                    this.prevRotationYaw -= 360.0F;
                                }
                    
                                while (this.rotationYaw - this.prevRotationYaw >= 180.0F)
                                {
                                    this.prevRotationYaw += 360.0F;
                                }
                    
                                this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
                                this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
                                float f3 = 0.99F;
                                f1 = 0.05F;
                    
                                if (this.isInWater())
                                {
                                    for (int l = 0; l < 4; ++l)
                                    {
                                        f4 = 0.25F;
                                        this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ);
                                    }
                    
                                    f3 = 0.8F;
                                }
                    
                                if (this.isWet())
                                {
                                    this.extinguish();
                                }
                    
                                this.motionX *= (double)f3;
                                this.motionY *= (double)f3;
                                this.motionZ *= (double)f3;
                                this.motionY -= (double)f1;
                                this.setPosition(this.posX, this.posY, this.posZ);
                                this.func_145775_I();
                            }
                        }
                    
                        /**
                         * (abstract) Protected helper method to write subclass entity data to NBT.
                         */
                        public void writeEntityToNBT(NBTTagCompound p_70014_1_)
                        {
                            p_70014_1_.setShort("xTile", (short)this.field_145791_d);
                            p_70014_1_.setShort("yTile", (short)this.field_145792_e);
                            p_70014_1_.setShort("zTile", (short)this.field_145789_f);
                            p_70014_1_.setShort("life", (short)this.ticksInGround);
                            p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.field_145790_g));
                            p_70014_1_.setByte("inData", (byte)this.inData);
                            p_70014_1_.setByte("shake", (byte)this.arrowShake);
                            p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));
                            p_70014_1_.setByte("pickup", (byte)this.canBePickedUp);
                            p_70014_1_.setDouble("damage", this.damage);
                        }
                    
                        /**
                         * (abstract) Protected helper method to read subclass entity data from NBT.
                         */
                        public void readEntityFromNBT(NBTTagCompound p_70037_1_)
                        {
                            this.field_145791_d = p_70037_1_.getShort("xTile");
                            this.field_145792_e = p_70037_1_.getShort("yTile");
                            this.field_145789_f = p_70037_1_.getShort("zTile");
                            this.ticksInGround = p_70037_1_.getShort("life");
                            this.field_145790_g = Block.getBlockById(p_70037_1_.getByte("inTile") & 255);
                            this.inData = p_70037_1_.getByte("inData") & 255;
                            this.arrowShake = p_70037_1_.getByte("shake") & 255;
                            this.inGround = p_70037_1_.getByte("inGround") == 1;
                    
                            if (p_70037_1_.hasKey("damage", 99))
                            {
                                this.damage = p_70037_1_.getDouble("damage");
                            }
                    
                            if (p_70037_1_.hasKey("pickup", 99))
                            {
                                this.canBePickedUp = p_70037_1_.getByte("pickup");
                            }
                            else if (p_70037_1_.hasKey("player", 99))
                            {
                                this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0;
                            }
                        }
                    
                        /**
                         * Called by a player entity when they collide with an entity
                         */
                        public void onCollideWithPlayer(EntityPlayer p_70100_1_)
                        {
                            if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0)
                            {
                                boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
                    
                                if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(Items.arrow, 1)))
                                {
                                    flag = false;
                                }
                    
                                if (flag)
                                {
                                    this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                                    p_70100_1_.onItemPickup(this, 1);
                                    this.setDead();
                                }
                            }
                        }
                    
                        /**
                         * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
                         * prevent them from trampling crops
                         */
                        protected boolean canTriggerWalking()
                        {
                            return false;
                        }
                    
                        @SideOnly(Side.CLIENT)
                        public float getShadowSize()
                        {
                            return 0.0F;
                        }
                    
                        public void setDamage(double p_70239_1_)
                        {
                            this.damage = p_70239_1_;
                        }
                    
                        public double getDamage()
                        {
                            return this.damage;
                        }
                    
                        /**
                         * Sets the amount of knockback the arrow applies when it hits a mob.
                         */
                        public void setKnockbackStrength(int p_70240_1_)
                        {
                            this.knockbackStrength = p_70240_1_;
                        }
                    
                        /**
                         * If returns false, the item will not inflict any damage against entities.
                         */
                        public boolean canAttackWithItem()
                        {
                            return false;
                        }
                    
                        /**
                         * Whether the arrow has a stream of critical hit particles flying behind it.
                         */
                        public void setIsCritical(boolean p_70243_1_)
                        {
                            byte b0 = this.dataWatcher.getWatchableObjectByte(16);
                    
                            if (p_70243_1_)
                            {
                                this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));
                            }
                            else
                            {
                                this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));
                            }
                        }
                    
                        /**
                         * Whether the arrow has a stream of critical hit particles flying behind it.
                         */
                        public boolean getIsCritical()
                        {
                            byte b0 = this.dataWatcher.getWatchableObjectByte(16);
                            return (b0 & 1) != 0;
                        }
                    }
                    
                    

                    :::

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

                      Dans l’entity de ta lance , tu extends EntityArrow , fait comme ceci

                      extends Entity implements IProjectile
                      

                      Oui ce gif est drôle.

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

                        C’est une mauvaise idée d’extends EntityArrow ou EntityThrowable car Minecraft les a codé avec les pieds. C’est mieux de recopier la classe comme a dit Eryah.

                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                        Pas de demandes de support par MP ni par skype SVP.
                        Je n'accepte sur skype que l…

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

                          @‘SCAREX’:

                          C’est une mauvaise idée d’extends EntityArrow ou EntityThrowable car Minecraft les a codé avec les pieds. C’est mieux de recopier la classe comme a dit Eryah.

                          Perso c’est pour ca que j’utilise

                          extends Entity implements IProjectile
                          

                          Et mon arc marche parfaitement , la le seul truc qui change c’est lorsque tu tire il “consomme” la lance c’est comme si l’arc tirait l’arc ^^

                          Oui ce gif est drôle.

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

                            Bon, le code fonctionne très bien pour l’instant, j’ai bien mis “extends Entity implements IProjectile” et ça fonctionne.
                            Reste plus qu’à faire le rendu et c’est bon, merci 😄

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

                              @‘QuantumSheep’:

                              Bon, le code fonctionne très bien pour l’instant, j’ai bien mis “extends Entity implements IProjectile” et ça fonctionne.
                              Reste plus qu’à faire le rendu et c’est bon, merci 😄

                              Nice content pour toi ! 😄

                              Oui ce gif est drôle.

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

                                IProjectile sert juste si tu veux utiliser ton projectile avec un Dispenser. Balise résolu ?

                                Site web contenant mes scripts : http://SCAREXgaming.github.io

                                Pas de demandes de support par MP ni par skype SVP.
                                Je n'accepte sur skype que l…

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

                                  Eh bien non, j’ai un soucis 😄
                                  La lance s’envoie bien mais consomme des flèches au lieu d’elle même et si en survival j’ai pas de flèche, il en génère…

                                  Help me 😢

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

                                    @‘QuantumSheep’:

                                    Eh bien non, j’ai un soucis  😄
                                    La lance s’envoie bien mais consomme des flèches au lieu d’elle même et si en survival j’ai pas de flèche, il en génère…

                                    Help me  😢

                                    Ton code final serait utile ^^

                                    Oui ce gif est drôle.

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

                                      Je suis sur ma tablette mais voilà mon github avec les derniers codes rajoutés : https://github.com/QuantumSheep/ArkCraft

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

                                        Dsl double post 😕

                                        Voilà mes class :

                                        Main class:

                                        package com.quantumsheep.arkcraft;
                                        
                                        import java.awt.Color;
                                        
                                        import org.apache.logging.log4j.LogManager;
                                        import org.apache.logging.log4j.Logger;
                                        
                                        import com.quantumsheep.arkcraft.entity.EntityGiantSpider;
                                        import com.quantumsheep.arkcraft.entity.EntitySpear;
                                        import com.quantumsheep.arkcraft.lib.CommonProxy;
                                        import com.quantumsheep.arkcraft.lib.EntityEventHandler;
                                        import com.quantumsheep.arkcraft.lib.References;
                                        import com.quantumsheep.arkcraft.weapons.WeaponSpear;
                                        
                                        import cpw.mods.fml.common.Mod;
                                        import cpw.mods.fml.common.Mod.EventHandler;
                                        import cpw.mods.fml.common.Mod.Instance;
                                        import cpw.mods.fml.common.SidedProxy;
                                        import cpw.mods.fml.common.event.FMLInitializationEvent;
                                        import cpw.mods.fml.common.event.FMLPostInitializationEvent;
                                        import cpw.mods.fml.common.event.FMLPreInitializationEvent;
                                        import cpw.mods.fml.common.registry.EntityRegistry;
                                        import cpw.mods.fml.common.registry.GameRegistry;
                                        import cpw.mods.fml.common.registry.LanguageRegistry;
                                        import net.minecraft.creativetab.CreativeTabs;
                                        import net.minecraft.entity.Entity;
                                        import net.minecraft.item.Item;
                                        import net.minecraft.item.Item.ToolMaterial;
                                        import net.minecraftforge.common.MinecraftForge;
                                        import net.minecraftforge.common.util.EnumHelper;
                                        
                                        @Mod(modid = References.MODID, name = "ArkCraft Mod", version = References.VERSION)
                                        
                                        public class ArkCraftMod {
                                        
                                        @Instance("arkcraft")
                                        public static ArkCraftMod instance;
                                        
                                        @SidedProxy(clientSide = References.Client, serverSide = References.Common)
                                        public static CommonProxy proxy;
                                        
                                        public static Item weaponSpear;
                                        
                                        public static final Logger LOGGER = LogManager.getLogger(References.NAME);
                                        
                                        @EventHandler
                                        public void preInit(FMLPreInitializationEvent event)
                                        {
                                        weaponSpear = new WeaponSpear().setUnlocalizedName("weaponSpear").setTextureName(References.MODID + ":itemtutoriel").setCreativeTab(CreativeTabs.tabMaterials);
                                        
                                        GameRegistry.registerItem(weaponSpear, "weapon_spear");
                                        }
                                        
                                        @EventHandler
                                        public void init(FMLInitializationEvent event)
                                        {
                                        EntityRegistry.registerGlobalEntityID(EntitySpear.class, "entitySpear", EntityRegistry.findGlobalUniqueEntityId(), new Color(0, 255, 0).getRGB(), new Color(255, 0, 0).getRGB());
                                        EntityRegistry.registerModEntity(EntitySpear.class, "entitySpear", 420, this.instance, 40, 1, true);
                                        
                                        EntityRegistry.registerGlobalEntityID(EntityGiantSpider.class, "giantSpider", EntityRegistry.findGlobalUniqueEntityId(), 0x7AE8FF, 0x47FFE2);
                                        
                                        MinecraftForge.EVENT_BUS.register(new EntityEventHandler());
                                        proxy.registerRender();
                                        }
                                        
                                        @EventHandler
                                        public void postInit(FMLPostInitializationEvent event)
                                        {
                                        
                                        }
                                        }
                                        

                                        La lance: ```java
                                        package com.quantumsheep.arkcraft.weapons;

                                        import com.quantumsheep.arkcraft.ArkCraftMod;
                                        import com.quantumsheep.arkcraft.entity.EntitySpear;

                                        import net.minecraft.creativetab.CreativeTabs;
                                        import net.minecraft.enchantment.Enchantment;
                                        import net.minecraft.enchantment.EnchantmentHelper;
                                        import net.minecraft.entity.player.EntityPlayer;
                                        import net.minecraft.entity.projectile.EntityArrow;
                                        import net.minecraft.entity.projectile.EntitySnowball;
                                        import net.minecraft.init.Items;
                                        import net.minecraft.item.EnumAction;
                                        import net.minecraft.item.Item;
                                        import net.minecraft.item.ItemStack;
                                        import net.minecraft.world.World;
                                        import net.minecraftforge.common.MinecraftForge;
                                        import net.minecraftforge.event.entity.player.ArrowLooseEvent;
                                        import net.minecraftforge.event.entity.player.ArrowNockEvent;

                                        public class WeaponSpear extends Item {

                                        public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
                                        {
                                        int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;

                                        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
                                        MinecraftForge.EVENT_BUS.post(event);
                                        if (event.isCanceled())
                                        {
                                        return;
                                        }
                                        j = event.charge;

                                        boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;

                                        if (flag || p_77615_3_.inventory.hasItem(ArkCraftMod.weaponSpear)) //Ici, change par le nom de ton item (Inutile dans le contexte, mais laise toujours )
                                        {
                                        float f = (float)j / 5.0F;
                                        f = (f * f + f * 2.0F) / 3.0F;

                                        if ((double)f < 0.1D)
                                        {
                                        return;
                                        }

                                        if (f > 1.0F)
                                        {
                                        f = 1.0F;
                                        }

                                        EntitySpear entityarrow = new EntitySpear(p_77615_2_, p_77615_3_, f * 2.0F); //Tu a juste a changer le nom de l’entity ici

                                        if (f == 1.0F)
                                        {
                                        entityarrow.setIsCritical(true);
                                        }

                                        p_77615_1_.damageItem(1, p_77615_3_);
                                        p_77615_2_.playSoundAtEntity(p_77615_3_, “random.bow”, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

                                        if (flag)
                                        {
                                        entityarrow.canBePickedUp = 2;
                                        }
                                        else
                                        {
                                        p_77615_3_.inventory.consumeInventoryItem(Items.arrow); //Ici, change aussi par ton item
                                        }

                                        if (!p_77615_2_.isRemote)
                                        {
                                        p_77615_2_.spawnEntityInWorld(entityarrow);
                                        }
                                        }
                                        }

                                        public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_)
                                        {
                                        return p_77654_1_;
                                        }

                                        public int getMaxItemUseDuration(ItemStack p_77626_1_)
                                        {
                                        return 72000;
                                        }

                                        public EnumAction getItemUseAction(ItemStack p_77661_1_)
                                        {
                                        return EnumAction.bow;
                                        }

                                        public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
                                        {
                                        ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
                                        MinecraftForge.EVENT_BUS.post(event);
                                        if (event.isCanceled())
                                        {
                                        return event.result;
                                        }

                                        if (p_77659_3_.capabilities.isCreativeMode || p_77659_3_.inventory.hasItem(ArkCraftMod.weaponSpear))
                                        {
                                        p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_));
                                        }

                                        return p_77659_1_;
                                        }
                                        }

                                        
                                        L'entité de la lance: ```java
                                        package com.quantumsheep.arkcraft.entity;
                                        
                                        import java.util.List;
                                        import java.util.List;
                                        
                                        import cpw.mods.fml.relauncher.Side;
                                        import cpw.mods.fml.relauncher.SideOnly;
                                        import net.minecraft.block.Block;
                                        import net.minecraft.block.material.Material;
                                        import net.minecraft.enchantment.EnchantmentHelper;
                                        import net.minecraft.entity.Entity;
                                        import net.minecraft.entity.EntityLivingBase;
                                        import net.minecraft.entity.IProjectile;
                                        import net.minecraft.entity.monster.EntityEnderman;
                                        import net.minecraft.entity.player.EntityPlayer;
                                        import net.minecraft.entity.player.EntityPlayerMP;
                                        import net.minecraft.init.Items;
                                        import net.minecraft.item.ItemStack;
                                        import net.minecraft.nbt.NBTTagCompound;
                                        import net.minecraft.network.play.server.S2BPacketChangeGameState;
                                        import net.minecraft.util.AxisAlignedBB;
                                        import net.minecraft.util.DamageSource;
                                        import net.minecraft.util.MathHelper;
                                        import net.minecraft.util.MovingObjectPosition;
                                        import net.minecraft.util.Vec3;
                                        import net.minecraft.world.World;
                                        
                                        public class EntitySpear extends Entity implements IProjectile
                                        {
                                        private int field_145791_d = -1;
                                        private int field_145792_e = -1;
                                        private int field_145789_f = -1;
                                        private Block field_145790_g;
                                        private int inData;
                                        private boolean inGround;
                                        /** 1 if the player can pick up the arrow */
                                        public int canBePickedUp;
                                        /** Seems to be some sort of timer for animating an arrow. */
                                        public int arrowShake;
                                        /** The owner of this arrow. */
                                        public Entity shootingEntity;
                                        private int ticksInGround;
                                        private int ticksInAir;
                                        private double damage = 2.0D;
                                        /** The amount of knockback an arrow applies when it hits a mob. */
                                        private int knockbackStrength;
                                        private static final String __OBFID = "CL_00001715";
                                        
                                        public EntitySpear(World p_i1753_1_)
                                        {
                                        super(p_i1753_1_);
                                        this.renderDistanceWeight = 10.0D;
                                        this.setSize(0.5F, 0.5F);
                                        }
                                        
                                        public EntitySpear(World p_i1754_1_, double p_i1754_2_, double p_i1754_4_, double p_i1754_6_)
                                        {
                                        super(p_i1754_1_);
                                        this.renderDistanceWeight = 10.0D;
                                        this.setSize(0.5F, 0.5F);
                                        this.setPosition(p_i1754_2_, p_i1754_4_, p_i1754_6_);
                                        this.yOffset = 0.0F;
                                        }
                                        
                                        public EntitySpear(World p_i1755_1_, EntityLivingBase p_i1755_2_, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_)
                                        {
                                        super(p_i1755_1_);
                                        this.renderDistanceWeight = 10.0D;
                                        this.shootingEntity = p_i1755_2_;
                                        
                                        if (p_i1755_2_ instanceof EntityPlayer)
                                        {
                                        this.canBePickedUp = 1;
                                        }
                                        
                                        this.posY = p_i1755_2_.posY + (double)p_i1755_2_.getEyeHeight() - 0.10000000149011612D;
                                        double d0 = p_i1755_3_.posX - p_i1755_2_.posX;
                                        double d1 = p_i1755_3_.boundingBox.minY + (double)(p_i1755_3_.height / 3.0F) - this.posY;
                                        double d2 = p_i1755_3_.posZ - p_i1755_2_.posZ;
                                        double d3 = (double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
                                        
                                        if (d3 >= 1.0E-7D)
                                        {
                                        float f2 = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
                                        float f3 = (float)(-(Math.atan2(d1, d3) * 180.0D / Math.PI));
                                        double d4 = d0 / d3;
                                        double d5 = d2 / d3;
                                        this.setLocationAndAngles(p_i1755_2_.posX + d4, this.posY, p_i1755_2_.posZ + d5, f2, f3);
                                        this.yOffset = 0.0F;
                                        float f4 = (float)d3 * 0.2F;
                                        this.setThrowableHeading(d0, d1 + (double)f4, d2, p_i1755_4_, p_i1755_5_);
                                        }
                                        }
                                        
                                        public EntitySpear(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_)
                                        {
                                        super(p_i1756_1_);
                                        this.renderDistanceWeight = 10.0D;
                                        this.shootingEntity = p_i1756_2_;
                                        
                                        if (p_i1756_2_ instanceof EntityPlayer)
                                        {
                                        this.canBePickedUp = 1;
                                        }
                                        
                                        this.setSize(0.5F, 0.5F);
                                        this.setLocationAndAngles(p_i1756_2_.posX, p_i1756_2_.posY + (double)p_i1756_2_.getEyeHeight(), p_i1756_2_.posZ, p_i1756_2_.rotationYaw, p_i1756_2_.rotationPitch);
                                        this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                                        this.posY -= 0.10000000149011612D;
                                        this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
                                        this.setPosition(this.posX, this.posY, this.posZ);
                                        this.yOffset = 0.0F;
                                        this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                                        this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI));
                                        this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI));
                                        this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5F, 1.0F);
                                        }
                                        
                                        protected void entityInit()
                                        {
                                        this.dataWatcher.addObject(16, Byte.valueOf((byte)0));
                                        }
                                        
                                        /**
                                        * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
                                        */
                                        public void setThrowableHeading(double p_70186_1_, double p_70186_3_, double p_70186_5_, float p_70186_7_, float p_70186_8_)
                                        {
                                        float f2 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_3_ * p_70186_3_ + p_70186_5_ * p_70186_5_);
                                        p_70186_1_ /= (double)f2;
                                        p_70186_3_ /= (double)f2;
                                        p_70186_5_ /= (double)f2;
                                        p_70186_1_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                                        p_70186_3_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                                        p_70186_5_ += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double)p_70186_8_;
                                        p_70186_1_ *= (double)p_70186_7_;
                                        p_70186_3_ *= (double)p_70186_7_;
                                        p_70186_5_ *= (double)p_70186_7_;
                                        this.motionX = p_70186_1_;
                                        this.motionY = p_70186_3_;
                                        this.motionZ = p_70186_5_;
                                        float f3 = MathHelper.sqrt_double(p_70186_1_ * p_70186_1_ + p_70186_5_ * p_70186_5_);
                                        this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70186_1_, p_70186_5_) * 180.0D / Math.PI);
                                        this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70186_3_, (double)f3) * 180.0D / Math.PI);
                                        this.ticksInGround = 0;
                                        }
                                        
                                        /**
                                        * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX,
                                        * posY, posZ, yaw, pitch
                                        */
                                        @SideOnly(Side.CLIENT)
                                        public void setPositionAndRotation2(double p_70056_1_, double p_70056_3_, double p_70056_5_, float p_70056_7_, float p_70056_8_, int p_70056_9_)
                                        {
                                        this.setPosition(p_70056_1_, p_70056_3_, p_70056_5_);
                                        this.setRotation(p_70056_7_, p_70056_8_);
                                        }
                                        
                                        /**
                                        * Sets the velocity to the args. Args: x, y, z
                                        */
                                        @SideOnly(Side.CLIENT)
                                        public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_)
                                        {
                                        this.motionX = p_70016_1_;
                                        this.motionY = p_70016_3_;
                                        this.motionZ = p_70016_5_;
                                        
                                        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                                        {
                                        float f = MathHelper.sqrt_double(p_70016_1_ * p_70016_1_ + p_70016_5_ * p_70016_5_);
                                        this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(p_70016_1_, p_70016_5_) * 180.0D / Math.PI);
                                        this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(p_70016_3_, (double)f) * 180.0D / Math.PI);
                                        this.prevRotationPitch = this.rotationPitch;
                                        this.prevRotationYaw = this.rotationYaw;
                                        this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
                                        this.ticksInGround = 0;
                                        }
                                        }
                                        
                                        /**
                                        * Called to update the entity's position/logic.
                                        */
                                        public void onUpdate()
                                        {
                                        super.onUpdate();
                                        
                                        if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
                                        {
                                        float f = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                                        this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
                                        this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f) * 180.0D / Math.PI);
                                        }
                                        
                                        Block block = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        
                                        if (block.getMaterial() != Material.air)
                                        {
                                        block.setBlockBoundsBasedOnState(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        AxisAlignedBB axisalignedbb = block.getCollisionBoundingBoxFromPool(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        
                                        if (axisalignedbb != null && axisalignedbb.isVecInside(Vec3.createVectorHelper(this.posX, this.posY, this.posZ)))
                                        {
                                        this.inGround = true;
                                        }
                                        }
                                        
                                        if (this.arrowShake > 0)
                                        {
                                        –this.arrowShake;
                                        }
                                        
                                        if (this.inGround)
                                        {
                                        int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        
                                        if (block == this.field_145790_g && j == this.inData)
                                        {
                                        ++this.ticksInGround;
                                        
                                        if (this.ticksInGround == 1200)
                                        {
                                        this.setDead();
                                        }
                                        }
                                        else
                                        {
                                        this.inGround = false;
                                        this.motionX *= (double)(this.rand.nextFloat() * 0.2F);
                                        this.motionY *= (double)(this.rand.nextFloat() * 0.2F);
                                        this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);
                                        this.ticksInGround = 0;
                                        this.ticksInAir = 0;
                                        }
                                        }
                                        else
                                        {
                                        ++this.ticksInAir;
                                        Vec3 vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                                        Vec3 vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
                                        MovingObjectPosition movingobjectposition = this.worldObj.func_147447_a(vec31, vec3, false, true, false);
                                        vec31 = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
                                        vec3 = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
                                        
                                        if (movingobjectposition != null)
                                        {
                                        vec3 = Vec3.createVectorHelper(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);
                                        }
                                        
                                        Entity entity = null;
                                        List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
                                        double d0 = 0.0D;
                                        int i;
                                        float f1;
                                        
                                        for (i = 0; i < list.size(); ++i)
                                        {
                                        Entity entity1 = (Entity)list.get(i);
                                        
                                        if (entity1.canBeCollidedWith() && (entity1 != this.shootingEntity || this.ticksInAir >= 5))
                                        {
                                        f1 = 0.3F;
                                        AxisAlignedBB axisalignedbb1 = entity1.boundingBox.expand((double)f1, (double)f1, (double)f1);
                                        MovingObjectPosition movingobjectposition1 = axisalignedbb1.calculateIntercept(vec31, vec3);
                                        
                                        if (movingobjectposition1 != null)
                                        {
                                        double d1 = vec31.distanceTo(movingobjectposition1.hitVec);
                                        
                                        if (d1 < d0 || d0 == 0.0D)
                                        {
                                        entity = entity1;
                                        d0 = d1;
                                        }
                                        }
                                        }
                                        }
                                        
                                        if (entity != null)
                                        {
                                        movingobjectposition = new MovingObjectPosition(entity);
                                        }
                                        
                                        if (movingobjectposition != null && movingobjectposition.entityHit != null && movingobjectposition.entityHit instanceof EntityPlayer)
                                        {
                                        EntityPlayer entityplayer = (EntityPlayer)movingobjectposition.entityHit;
                                        
                                        if (entityplayer.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer))
                                        {
                                        movingobjectposition = null;
                                        }
                                        }
                                        
                                        float f2;
                                        float f4;
                                        
                                        if (movingobjectposition != null)
                                        {
                                        if (movingobjectposition.entityHit != null)
                                        {
                                        f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                        int k = MathHelper.ceiling_double_int((double)f2 * this.damage);
                                        
                                        if (this.getIsCritical())
                                        {
                                        k += this.rand.nextInt(k / 2 + 2);
                                        }
                                        
                                        DamageSource damagesource = null;
                                        
                                        if (this.shootingEntity == null)
                                        {
                                        damagesource = DamageSource.causeThrownDamage(this, this);
                                        }
                                        else
                                        {
                                        damagesource = DamageSource.causeThrownDamage(this, this.shootingEntity);
                                        }
                                        
                                        if (this.isBurning() && !(movingobjectposition.entityHit instanceof EntityEnderman))
                                        {
                                        movingobjectposition.entityHit.setFire(5);
                                        }
                                        
                                        if (movingobjectposition.entityHit.attackEntityFrom(damagesource, (float)k))
                                        {
                                        if (movingobjectposition.entityHit instanceof EntityLivingBase)
                                        {
                                        EntityLivingBase entitylivingbase = (EntityLivingBase)movingobjectposition.entityHit;
                                        
                                        if (!this.worldObj.isRemote)
                                        {
                                        entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1);
                                        }
                                        
                                        if (this.knockbackStrength > 0)
                                        {
                                        f4 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                                        
                                        if (f4 > 0.0F)
                                        {
                                        movingobjectposition.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f4);
                                        }
                                        }
                                        
                                        if (this.shootingEntity != null && this.shootingEntity instanceof EntityLivingBase)
                                        {
                                        EnchantmentHelper.func_151384_a(entitylivingbase, this.shootingEntity);
                                        EnchantmentHelper.func_151385_b((EntityLivingBase)this.shootingEntity, entitylivingbase);
                                        }
                                        
                                        if (this.shootingEntity != null && movingobjectposition.entityHit != this.shootingEntity && movingobjectposition.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP)
                                        {
                                        ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(6, 0.0F));
                                        }
                                        }
                                        
                                        this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                                        
                                        if (!(movingobjectposition.entityHit instanceof EntityEnderman))
                                        {
                                        this.setDead();
                                        }
                                        }
                                        else
                                        {
                                        this.motionX *= -0.10000000149011612D;
                                        this.motionY *= -0.10000000149011612D;
                                        this.motionZ *= -0.10000000149011612D;
                                        this.rotationYaw += 180.0F;
                                        this.prevRotationYaw += 180.0F;
                                        this.ticksInAir = 0;
                                        }
                                        }
                                        else
                                        {
                                        this.field_145791_d = movingobjectposition.blockX;
                                        this.field_145792_e = movingobjectposition.blockY;
                                        this.field_145789_f = movingobjectposition.blockZ;
                                        this.field_145790_g = this.worldObj.getBlock(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        this.inData = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f);
                                        this.motionX = (double)((float)(movingobjectposition.hitVec.xCoord - this.posX));
                                        this.motionY = (double)((float)(movingobjectposition.hitVec.yCoord - this.posY));
                                        this.motionZ = (double)((float)(movingobjectposition.hitVec.zCoord - this.posZ));
                                        f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ);
                                        this.posX -= this.motionX / (double)f2 * 0.05000000074505806D;
                                        this.posY -= this.motionY / (double)f2 * 0.05000000074505806D;
                                        this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D;
                                        this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F));
                                        this.inGround = true;
                                        this.arrowShake = 7;
                                        this.setIsCritical(false);
                                        
                                        if (this.field_145790_g.getMaterial() != Material.air)
                                        {
                                        this.field_145790_g.onEntityCollidedWithBlock(this.worldObj, this.field_145791_d, this.field_145792_e, this.field_145789_f, this);
                                        }
                                        }
                                        }
                                        
                                        if (this.getIsCritical())
                                        {
                                        for (i = 0; i < 4; ++i)
                                        {
                                        this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)i / 4.0D, this.posY + this.motionY * (double)i / 4.0D, this.posZ + this.motionZ * (double)i / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ);
                                        }
                                        }
                                        
                                        this.posX += this.motionX;
                                        this.posY += this.motionY;
                                        this.posZ += this.motionZ;
                                        f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
                                        this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
                                        
                                        for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)f2) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
                                        {
                                        ;
                                        }
                                        
                                        while (this.rotationPitch - this.prevRotationPitch >= 180.0F)
                                        {
                                        this.prevRotationPitch += 360.0F;
                                        }
                                        
                                        while (this.rotationYaw - this.prevRotationYaw < -180.0F)
                                        {
                                        this.prevRotationYaw -= 360.0F;
                                        }
                                        
                                        while (this.rotationYaw - this.prevRotationYaw >= 180.0F)
                                        {
                                        this.prevRotationYaw += 360.0F;
                                        }
                                        
                                        this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
                                        this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
                                        float f3 = 0.99F;
                                        f1 = 0.05F;
                                        
                                        if (this.isInWater())
                                        {
                                        for (int l = 0; l < 4; ++l)
                                        {
                                        f4 = 0.25F;
                                        this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)f4, this.posY - this.motionY * (double)f4, this.posZ - this.motionZ * (double)f4, this.motionX, this.motionY, this.motionZ);
                                        }
                                        
                                        f3 = 0.8F;
                                        }
                                        
                                        if (this.isWet())
                                        {
                                        this.extinguish();
                                        }
                                        
                                        this.motionX *= (double)f3;
                                        this.motionY *= (double)f3;
                                        this.motionZ *= (double)f3;
                                        this.motionY -= (double)f1;
                                        this.setPosition(this.posX, this.posY, this.posZ);
                                        this.func_145775_I();
                                        }
                                        }
                                        
                                        /**
                                        * (abstract) Protected helper method to write subclass entity data to NBT.
                                        */
                                        public void writeEntityToNBT(NBTTagCompound p_70014_1_)
                                        {
                                        p_70014_1_.setShort("xTile", (short)this.field_145791_d);
                                        p_70014_1_.setShort("yTile", (short)this.field_145792_e);
                                        p_70014_1_.setShort("zTile", (short)this.field_145789_f);
                                        p_70014_1_.setShort("life", (short)this.ticksInGround);
                                        p_70014_1_.setByte("inTile", (byte)Block.getIdFromBlock(this.field_145790_g));
                                        p_70014_1_.setByte("inData", (byte)this.inData);
                                        p_70014_1_.setByte("shake", (byte)this.arrowShake);
                                        p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0));
                                        p_70014_1_.setByte("pickup", (byte)this.canBePickedUp);
                                        p_70014_1_.setDouble("damage", this.damage);
                                        }
                                        
                                        /**
                                        * (abstract) Protected helper method to read subclass entity data from NBT.
                                        */
                                        public void readEntityFromNBT(NBTTagCompound p_70037_1_)
                                        {
                                        this.field_145791_d = p_70037_1_.getShort("xTile");
                                        this.field_145792_e = p_70037_1_.getShort("yTile");
                                        this.field_145789_f = p_70037_1_.getShort("zTile");
                                        this.ticksInGround = p_70037_1_.getShort("life");
                                        this.field_145790_g = Block.getBlockById(p_70037_1_.getByte("inTile") & 255);
                                        this.inData = p_70037_1_.getByte("inData") & 255;
                                        this.arrowShake = p_70037_1_.getByte("shake") & 255;
                                        this.inGround = p_70037_1_.getByte("inGround") == 1;
                                        
                                        if (p_70037_1_.hasKey("damage", 99))
                                        {
                                        this.damage = p_70037_1_.getDouble("damage");
                                        }
                                        
                                        if (p_70037_1_.hasKey("pickup", 99))
                                        {
                                        this.canBePickedUp = p_70037_1_.getByte("pickup");
                                        }
                                        else if (p_70037_1_.hasKey("player", 99))
                                        {
                                        this.canBePickedUp = p_70037_1_.getBoolean("player") ? 1 : 0;
                                        }
                                        }
                                        
                                        /**
                                        * Called by a player entity when they collide with an entity
                                        */
                                        public void onCollideWithPlayer(EntityPlayer p_70100_1_)
                                        {
                                        if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0)
                                        {
                                        boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
                                        
                                        if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(Items.arrow, 1)))
                                        {
                                        flag = false;
                                        }
                                        
                                        if (flag)
                                        {
                                        this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
                                        p_70100_1_.onItemPickup(this, 1);
                                        this.setDead();
                                        }
                                        }
                                        }
                                        
                                        /**
                                        * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
                                        * prevent them from trampling crops
                                        */
                                        protected boolean canTriggerWalking()
                                        {
                                        return false;
                                        }
                                        
                                        @SideOnly(Side.CLIENT)
                                        public float getShadowSize()
                                        {
                                        return 0.0F;
                                        }
                                        
                                        public void setDamage(double p_70239_1_)
                                        {
                                        this.damage = p_70239_1_;
                                        }
                                        
                                        public double getDamage()
                                        {
                                        return this.damage;
                                        }
                                        
                                        /**
                                        * Sets the amount of knockback the arrow applies when it hits a mob.
                                        */
                                        public void setKnockbackStrength(int p_70240_1_)
                                        {
                                        this.knockbackStrength = p_70240_1_;
                                        }
                                        
                                        /**
                                        * If returns false, the item will not inflict any damage against entities.
                                        */
                                        public boolean canAttackWithItem()
                                        {
                                        return false;
                                        }
                                        
                                        /**
                                        * Whether the arrow has a stream of critical hit particles flying behind it.
                                        */
                                        public void setIsCritical(boolean p_70243_1_)
                                        {
                                        byte b0 = this.dataWatcher.getWatchableObjectByte(16);
                                        
                                        if (p_70243_1_)
                                        {
                                        this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 | 1)));
                                        }
                                        else
                                        {
                                        this.dataWatcher.updateObject(16, Byte.valueOf((byte)(b0 & -2)));
                                        }
                                        }
                                        
                                        /**
                                        * Whether the arrow has a stream of critical hit particles flying behind it.
                                        */
                                        public boolean getIsCritical()
                                        {
                                        byte b0 = this.dataWatcher.getWatchableObjectByte(16);
                                        return (b0 & 1) != 0;
                                        }
                                        }
                                        
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                          Remplaces ta fonction onPlayerStoppedUsing par celle ci :

                                             public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int useTime)
                                              {
                                                   int j = this.getMaxItemUseDuration(stack) - useTime;
                                                   float f = (float)j / 5.0F;
                                                   f = (f * f + f * 2.0F) / 3.0F;
                                          
                                                   if ((double)f < 0.1D)
                                                   {
                                                       return;
                                                   }
                                          
                                                   if (f > 1.0F)
                                                   {
                                                       f = 1.0F;
                                                   }
                                          
                                                   EntitySpear entityarrow = new EntitySpear(world, player, f * 2.0F);
                                          
                                                   if (f == 1.0F)
                                                   {
                                                       entityarrow.setIsCritical(true);
                                                   }
                                          
                                                   world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
                                          
                                                   player.setCurrentItemOrArmor(0, null);
                                                   player.inventory.markDirty();
                                          
                                                   if (!world.isRemote)
                                                   {
                                                       world.spawnEntityInWorld(entityarrow);
                                                   }
                                              }
                                          
                                          1 réponse Dernière réponse Répondre Citer 0
                                          • QuantumSheep
                                            QuantumSheep dernière édition par

                                            Merci, ça fonctionne parfaitement 🙂
                                            Maintenant j’ai un problèmes x) Comment je rajoute un model à l’entitée qui est lancé ? (Model déjà exporté)

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB