Jump to content

[1.2.5](Forge 3.4.9.171) Entity Invisible in SMP


jezkyl33

Recommended Posts

Hi, i'm a french noob in modding!

I make my first mod with gun and ammos, and everything works in clientside.

But when I rightclick on my gun my Entity is invisible in serverside.

I know then I forgot a lot of things but what?

I show you:

 

ClientSide

 

mod_Gun

 

package net.minecraft.src.gun;

import net.minecraft.src.Block;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.ModLoader;

import net.minecraft.src.forge.*;

import java.util.Map;

 

 

public class mod_Gun extends NetworkMod

{

public static String textureSprite1 = "/gui/mods/items2.png";

    public static final Item Weapon = (new ItemWeapon(2051)).setItemName("Weapon").setIconIndex(144);

    public static final Item Ammo = (new ItemAmmo(2052)).setItemName("Ammo").setIconIndex(145);

 

public void load()

    {

ModLoader.addName(Weapon, "Weapon");

ModLoader.addName(Ammo, "Ammo");

MinecraftForgeClient.preloadTexture(textureSprite1);

ModLoader.addRecipe(new ItemStack (Weapon, 1), new Object[]{

" # "," # ","# #", Character.valueOf('#'), Block.dirt});

ModLoader.registerEntityID(EntityAmmo.class, "Ammo", ModLoader.getUniqueEntityId());

ModLoader.addRecipe(new ItemStack (Ammo, 5), new Object[]{

"###","###"," # ", Character.valueOf('#'), Block.sand});

}

 

public void addRenderer(Map map)

    {

        map.put(EntityAmmo.class, new RenderAmmo(Ammo.iconIndex));

       

    }

 

 

    public String getVersion()

    {

          return "gun mod V 1.0.0";

    }

public boolean clientSideRequired()

    {

        return false;

    }

 

    public boolean serverSideRequired()

    {

        return false;

    }

}

 

 

 

ItemWeapon

 

package net.minecraft.src.gun;

import java.util.ArrayList;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.World;

 

public class ItemWeapon extends Item

{

        public ItemWeapon(int i)

       

        {

                super(i);

                maxStackSize = 64;           

                this.setTextureFile(mod_Gun.textureSprite1);

                           

        }

        public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)

        {

            if(entityplayer.inventory.consumeInventoryItem(mod_Gun.Ammo.shiftedIndex))

            {

            if(!world.isRemote)

                {

                    world.joinEntityInSurroundings(new EntityAmmo(world, entityplayer));

                }

            }

            return itemstack;

        }

                public void addCreativeItems(ArrayList itemList)

                {

                itemList.add(new ItemStack(this));

                }

}

 

 

 

 

ItemAmmo

 

package net.minecraft.src.gun;

import java.util.ArrayList;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.World;

 

public class ItemAmmo extends Item

{

        public ItemAmmo(int i)

       

       

        {

                super(i);

        maxStackSize = 64;}

               

             

                {

                         

             

                this.setTextureFile(mod_Gun.textureSprite1);

               

        }

                public void addCreativeItems(ArrayList itemList)

                {

                itemList.add(new ItemStack(this));

                }

}

 

 

 

 

EntityAmmo

 

package net.minecraft.src.gun;

import java.util.List;

import java.util.Random;

import net.minecraft.src.AxisAlignedBB;

import net.minecraft.src.DamageSource;

import net.minecraft.src.Entity;

import net.minecraft.src.EntityLiving;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.EntityThrowable;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.MathHelper;

import net.minecraft.src.MovingObjectPosition;

import net.minecraft.src.NBTTagCompound;

import net.minecraft.src.Vec3D;

import net.minecraft.src.World;

 

public class EntityAmmo extends EntityThrowable

{

 

    public EntityAmmo(World par2World)

    {

        super(par2World);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        setSize(0.25F, 0.25F);

    }

 

    protected void entityInit()

    {

    }

 

    public boolean isInRangeToRenderDist(double d)

    {

        double d1 = boundingBox.getAverageEdgeLength() * 4D;

        d1 *= 64D;

        return d < d1 * d1;

    }

 

    public EntityAmmo(World world, EntityLiving entityliving)

    {

        super(world);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        shootingEntity = entityliving;

        setSize(0.25F, 0.25F);

        setLocationAndAngles(entityliving.posX, entityliving.posY + (double)entityliving.getEyeHeight(), entityliving.posZ, entityliving.rotationYaw, entityliving.rotationPitch);

        posX -= MathHelper.cos((rotationYaw / 180F) * 3.141593F) * 0.16F;

        posY -= 0.10000000149011612D;

        posZ -= MathHelper.sin((rotationYaw / 180F) * 3.141593F) * 0.16F;

        setPosition(posX, posY, posZ);

        yOffset = 0.0F;

        float f = 0.4F;

        motionX = -MathHelper.sin((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F) * f;

        motionZ = MathHelper.cos((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F) * f;

        motionY = -MathHelper.sin((rotationPitch / 180F) * 3.141593F) * f;

        setAmmoHeading(motionX, motionY, motionZ, 1.5F, 1.0F);

    }

 

    public EntityAmmo(World world, double d, double d1, double d2)

    {

        super(world);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        ticksInGroundAmmo = 0;

        setSize(0.25F, 0.25F);

        setPosition(d, d1, d2);

        yOffset = 0.0F;

    }

 

    public void setAmmoHeading(double d, double d1, double d2, float f,

            float f1)

    {

        float f2 = MathHelper.sqrt_double(d * d + d1 * d1 + d2 * d2);

        d /= f2;

        d1 /= f2;

        d2 /= f2;

        d += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d1 += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d2 += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d *= f;

        d1 *= f;

        d2 *= f;

        motionX = d;

        motionY = d1;

        motionZ = d2;

        float f3 = MathHelper.sqrt_double(d * d + d2 * d2);

        prevRotationYaw = rotationYaw = (float)((Math.atan2(d, d2) * 180D) / 3.1415927410125732D);

        prevRotationPitch = rotationPitch = (float)((Math.atan2(d1, f3) * 180D) / 3.1415927410125732D);

        ticksInGroundAmmo = 0;

    }

 

    public void setVelocity(double d, double d1, double d2)

    {

        motionX = d;

        motionY = d1;

        motionZ = d2;

        if(prevRotationPitch == 0.0F && prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(d * d + d2 * d2);

            prevRotationYaw = rotationYaw = (float)((Math.atan2(d, d2) * 180D) / 3.1415927410125732D);

            prevRotationPitch = rotationPitch = (float)((Math.atan2(d1, f) * 180D) / 3.1415927410125732D);

        }

    }

 

    public void onUpdate()

    {

        lastTickPosX = posX;

        lastTickPosY = posY;

        lastTickPosZ = posZ;

        super.onUpdate();

        if(shakeAmmo > 0)

        {

            shakeAmmo--;

        }

        if(inGroundAmmo)

        {

            int i = worldObj.getBlockId(xTileAmmo, yTileAmmo, zTileAmmo);

            if(i != inTileAmmo)

            {

                inGroundAmmo = false;

                motionX *= rand.nextFloat() * 0.2F;

                motionY *= rand.nextFloat() * 0.2F;

                motionZ *= rand.nextFloat() * 0.2F;

                ticksInGroundAmmo = 0;

                ticksInAirAmmo = 0;

            } else

            {

                ticksInGroundAmmo++;

                if(ticksInGroundAmmo == 1200)

                {

                    setDead();

                }

                return;

            }

        } else

        {

            ticksInAirAmmo++;

        }

        Vec3D vec3d = Vec3D.createVector(posX, posY, posZ);

        Vec3D vec3d1 = Vec3D.createVector(posX + motionX, posY + motionY, posZ + motionZ);

        MovingObjectPosition movingobjectposition = worldObj.rayTraceBlocks(vec3d, vec3d1);

        vec3d = Vec3D.createVector(posX, posY, posZ);

        vec3d1 = Vec3D.createVector(posX + motionX, posY + motionY, posZ + motionZ);

        if(movingobjectposition != null)

        {

            vec3d1 = Vec3D.createVector(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);

        }

        if(!worldObj.isRemote)

        {

            Entity entity = null;

            List list = worldObj.getEntitiesWithinAABBExcludingEntity(this, boundingBox.addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D));

            double d = 0.0D;

            for(int l = 0; l < list.size(); l++)

            {

                Entity entity1 = (Entity)list.get(l);

                if(!entity1.canBeCollidedWith() || entity1 == shootingEntity && ticksInAirAmmo < 5)

                {

                    continue;

                }

                float f4 = 0.3F;

                AxisAlignedBB axisalignedbb = entity1.boundingBox.expand(f4, f4, f4);

                MovingObjectPosition movingobjectposition1 = axisalignedbb.calculateIntercept(vec3d, vec3d1);

                if(movingobjectposition1 == null)

                {

                    continue;

                }

                double d1 = vec3d.distanceTo(movingobjectposition1.hitVec);

                if(d1 < d || d == 0.0D)

                {

                    entity = entity1;

                    d = d1;

                }

            }

 

            if(entity != null)

            {

                movingobjectposition = new MovingObjectPosition(entity);

            }

        }

        if(movingobjectposition != null)

        {

            if(movingobjectposition.entityHit != null)

            {

                if(!movingobjectposition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, shootingEntity), 4));

            }

 

            setDead();

        }

        posX += motionX;

        posY += motionY;

        posZ += motionZ;

        float f = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ);

        rotationYaw = (float)((Math.atan2(motionX, motionZ) * 180D) / 3.1415927410125732D);

        for(rotationPitch = (float)((Math.atan2(motionY, f) * 180D) / 3.1415927410125732D); rotationPitch - prevRotationPitch < -180F; prevRotationPitch -= 360F) { }

        for(; rotationPitch - prevRotationPitch >= 180F; prevRotationPitch += 360F) { }

        for(; rotationYaw - prevRotationYaw < -180F; prevRotationYaw -= 360F) { }

        for(; rotationYaw - prevRotationYaw >= 180F; prevRotationYaw += 360F) { }

        rotationPitch = prevRotationPitch + (rotationPitch - prevRotationPitch) * 0.2F;

        rotationYaw = prevRotationYaw + (rotationYaw - prevRotationYaw) * 0.2F;

        float f1 = 0.99F;

        float f2 = 0.03F;

        if(isInWater())

        {

            for(int k = 0; k < 4; k++)

            {

                float f3 = 0.25F;

                worldObj.spawnParticle("bubble", posX - motionX * (double)f3, posY - motionY * (double)f3, posZ - motionZ * (double)f3, motionX, motionY, motionZ);

            }

 

            f1 = 0.8F;

        }

        motionX *= f1;

        motionY *= f1;

        motionZ *= f1;

        motionY -= f2;

        setPosition(posX, posY, posZ);

    }

 

    public void writeEntityToNBT(NBTTagCompound nbttagcompound)

    {

        nbttagcompound.setShort("xTile", (short)xTileAmmo);

        nbttagcompound.setShort("yTile", (short)yTileAmmo);

        nbttagcompound.setShort("zTile", (short)zTileAmmo);

        nbttagcompound.setByte("inTile", (byte)inTileAmmo);

        nbttagcompound.setByte("shake", (byte)shakeAmmo);

        nbttagcompound.setByte("inGround", (byte)(inGroundAmmo ? 1 : 0));

    }

 

    public void readEntityFromNBT(NBTTagCompound nbttagcompound)

    {

        xTileAmmo = nbttagcompound.getShort("xTile");

        yTileAmmo = nbttagcompound.getShort("yTile");

        zTileAmmo = nbttagcompound.getShort("zTile");

        inTileAmmo = nbttagcompound.getByte("inTile") & 0xff;

        shakeAmmo = nbttagcompound.getByte("shake") & 0xff;

        inGroundAmmo = nbttagcompound.getByte("inGround") == 1;

    }

 

    public void onCollideWithPlayer(EntityPlayer entityplayer)

    {

        if(inGroundAmmo && shootingEntity == entityplayer && shakeAmmo <= 0 && entityplayer.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1)))

        {

            worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);

            entityplayer.onItemPickup(this, 1);

            setDead();

        }

    }

 

    public float getShadowSize()

    {

        return 0.0F;

    }

 

    private int xTileAmmo;

    private int yTileAmmo;

    private int zTileAmmo;

    private int inTileAmmo;

    private boolean inGroundAmmo;

    public int shakeAmmo;

    private EntityLiving shootingEntity;

    private int ticksInGroundAmmo;

    private int ticksInAirAmmo;

@Override

protected void onImpact(MovingObjectPosition var1) {

// TODO Auto-generated method stub

 

}

}

 

 

 

 

RenderAmmo

 

package net.minecraft.src.gun;

import net.minecraft.src.Entity;

import net.minecraft.src.Render;

import net.minecraft.src.Tessellator;

import org.lwjgl.opengl.GL11;

 

public class RenderAmmo extends Render

{

 

       

    public RenderAmmo(int i)

        {

            itemIconIndex = i;

        }

 

       

 

public void doRender(Entity entity, double d, double d1, double d2,

                float f, float f1)

        {

            GL11.glPushMatrix();

            GL11.glTranslatef((float)d, (float)d1, (float)d2);

            GL11.glEnable(32826 /*GL_RESCALE_NORMAL_EXT*/);

            GL11.glScalef(0.5F, 0.5F, 0.5F);

            loadTexture("/gui/mods/items2.png");

            Tessellator tessellator = Tessellator.instance;

            float f2 = (float)((itemIconIndex % 16) * 16 + 0) / 256F;

            float f3 = (float)((itemIconIndex % 16) * 16 + 16) / 256F;

            float f4 = (float)((itemIconIndex / 16) * 16 + 0) / 256F;

            float f5 = (float)((itemIconIndex / 16) * 16 + 16) / 256F;

            float f6 = 1.0F;

            float f7 = 0.5F;

            float f8 = 0.25F;

            GL11.glRotatef(180F - renderManager.playerViewY, 0.0F, 1.0F, 0.0F);

            GL11.glRotatef(-renderManager.playerViewX, 1.0F, 0.0F, 0.0F);

            tessellator.startDrawingQuads();

            tessellator.setNormal(0.0F, 1.0F, 0.0F);

            tessellator.addVertexWithUV(0.0F - f7, 0.0F - f8, 0.0D, f2, f5);

            tessellator.addVertexWithUV(f6 - f7, 0.0F - f8, 0.0D, f3, f5);

            tessellator.addVertexWithUV(f6 - f7, 1.0F - f8, 0.0D, f3, f4);

            tessellator.addVertexWithUV(0.0F - f7, 1.0F - f8, 0.0D, f2, f4);

            tessellator.draw();

            GL11.glDisable(32826 /*GL_RESCALE_NORMAL_EXT*/);

            GL11.glPopMatrix();

        }

 

        private int itemIconIndex;

    }

 

 

 

ServerSide

 

mod_Gun

 

package net.minecraft.src.gun;

import net.minecraft.src.Block;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.ModLoader;

import net.minecraft.src.forge.*;

import java.util.Map;

 

 

public class mod_Gun extends NetworkMod

{

public static String textureSprite1 = "/gui/mods/items2.png";

    public static final Item Weapon = (new ItemWeapon(2051)).setItemName("Weapon").setIconIndex(144);

    public static final Item Ammo = (new ItemAmmo(2052)).setItemName("Ammo").setIconIndex(145);

   

   

public void load()

    {

ModLoader.addName(Weapon, "Weapon");

ModLoader.addName(Ammo, "Ammo");

MinecraftForgeClient.preloadTexture(textureSprite1);

ModLoader.addRecipe(new ItemStack (Weapon, 1), new Object[]{

" # "," # ","# #", Character.valueOf('#'), Block.dirt});

ModLoader.registerEntityID(EntityAmmo.class, "Ammo", ModLoader.getUniqueEntityId());

ModLoader.addRecipe(new ItemStack (Ammo, 5), new Object[]{

"###","###"," # ", Character.valueOf('#'), Block.sand});

}

 

 

 

    public String getVersion()

    {

          return "gun mod V 1.0.0";

    }

public boolean clientSideRequired()

    {

        return false;

    }

 

    public boolean serverSideRequired()

    {

        return false;

    }

}

 

 

 

ItemWeapon

 

package net.minecraft.src.gun;

import java.util.ArrayList;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.EntitySnowball;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.World;

 

public class ItemWeapon extends Item

{

        public ItemWeapon(int j)

       

        {

                super(j);

                maxStackSize = 64;           

                this.setTextureFile(mod_Gun.textureSprite1);

                           

        }

        public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)

        {

            if (!par3EntityPlayer.capabilities.isCreativeMode)

            {

                --par1ItemStack.stackSize;

            }

 

            par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));

 

            if (!par2World.isRemote)

            {

                par2World.spawnEntityInWorld(new EntityAmmo(par2World, par3EntityPlayer));

            }

 

            return par1ItemStack;

        }

   

       

                public void addCreativeItems(ArrayList itemList)

                {

                itemList.add(new ItemStack(this));

                }

}

 

 

 

 

ItemAmmo

 

package net.minecraft.src.gun;

import java.util.ArrayList;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.World;

 

public class ItemAmmo extends Item

{

        public ItemAmmo(int i)

       

       

        {

                super(i);

        maxStackSize = 64;

        }

               

             

                {

                         

             

                this.setTextureFile(mod_Gun.textureSprite1);

               

        }

                public void addCreativeItems(ArrayList itemList)

                {

                itemList.add(new ItemStack(this));

                }

}

 

 

 

 

EntityAmmo

 

package net.minecraft.src.gun;

import java.util.List;

import java.util.Random;

import net.minecraft.src.AxisAlignedBB;

import net.minecraft.src.DamageSource;

import net.minecraft.src.Entity;

import net.minecraft.src.EntityLiving;

import net.minecraft.src.EntityPlayer;

import net.minecraft.src.EntityThrowable;

import net.minecraft.src.Item;

import net.minecraft.src.ItemStack;

import net.minecraft.src.MathHelper;

import net.minecraft.src.MovingObjectPosition;

import net.minecraft.src.NBTTagCompound;

import net.minecraft.src.Vec3D;

import net.minecraft.src.World;

 

public class EntityAmmo extends EntityThrowable

{

 

    public EntityAmmo(World par2World)

    {

        super(par2World);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        setSize(0.25F, 0.25F);

    }

 

    protected void entityInit()

    {

    }

 

    public boolean isInRangeToRenderDist(double d)

    {

        double d1 = boundingBox.getAverageEdgeLength() * 4D;

        d1 *= 64D;

        return d < d1 * d1;

    }

 

    public EntityAmmo(World world, EntityLiving entityliving)

    {

        super(world);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        shootingEntity = entityliving;

        setSize(0.25F, 0.25F);

        setLocationAndAngles(entityliving.posX, entityliving.posY + (double)entityliving.getEyeHeight(), entityliving.posZ, entityliving.rotationYaw, entityliving.rotationPitch);

        posX -= MathHelper.cos((rotationYaw / 180F) * 3.141593F) * 0.16F;

        posY -= 0.10000000149011612D;

        posZ -= MathHelper.sin((rotationYaw / 180F) * 3.141593F) * 0.16F;

        setPosition(posX, posY, posZ);

        yOffset = 0.0F;

        float f = 0.4F;

        motionX = -MathHelper.sin((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F) * f;

        motionZ = MathHelper.cos((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F) * f;

        motionY = -MathHelper.sin((rotationPitch / 180F) * 3.141593F) * f;

        setAmmoHeading(motionX, motionY, motionZ, 1.5F, 1.0F);

    }

 

    public EntityAmmo(World world, double d, double d1, double d2)

    {

        super(world);

        xTileAmmo = -1;

        yTileAmmo = -1;

        zTileAmmo = -1;

        inTileAmmo = 0;

        inGroundAmmo = false;

        shakeAmmo = 0;

        ticksInAirAmmo = 0;

        ticksInGroundAmmo = 0;

        setSize(0.25F, 0.25F);

        setPosition(d, d1, d2);

        yOffset = 0.0F;

    }

 

    public void setAmmoHeading(double d, double d1, double d2, float f,

            float f1)

    {

        float f2 = MathHelper.sqrt_double(d * d + d1 * d1 + d2 * d2);

        d /= f2;

        d1 /= f2;

        d2 /= f2;

        d += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d1 += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d2 += rand.nextGaussian() * 0.0074999998323619366D * (double)f1;

        d *= f;

        d1 *= f;

        d2 *= f;

        motionX = d;

        motionY = d1;

        motionZ = d2;

        float f3 = MathHelper.sqrt_double(d * d + d2 * d2);

        prevRotationYaw = rotationYaw = (float)((Math.atan2(d, d2) * 180D) / 3.1415927410125732D);

        prevRotationPitch = rotationPitch = (float)((Math.atan2(d1, f3) * 180D) / 3.1415927410125732D);

        ticksInGroundAmmo = 0;

    }

 

    public void setVelocity(double d, double d1, double d2)

    {

        motionX = d;

        motionY = d1;

        motionZ = d2;

        if(prevRotationPitch == 0.0F && prevRotationYaw == 0.0F)

        {

            float f = MathHelper.sqrt_double(d * d + d2 * d2);

            prevRotationYaw = rotationYaw = (float)((Math.atan2(d, d2) * 180D) / 3.1415927410125732D);

            prevRotationPitch = rotationPitch = (float)((Math.atan2(d1, f) * 180D) / 3.1415927410125732D);

        }

    }

 

    public void onUpdate()

    {

        lastTickPosX = posX;

        lastTickPosY = posY;

        lastTickPosZ = posZ;

        super.onUpdate();

        if(shakeAmmo > 0)

        {

            shakeAmmo--;

        }

        if(inGroundAmmo)

        {

            int i = worldObj.getBlockId(xTileAmmo, yTileAmmo, zTileAmmo);

            if(i != inTileAmmo)

            {

                inGroundAmmo = false;

                motionX *= rand.nextFloat() * 0.2F;

                motionY *= rand.nextFloat() * 0.2F;

                motionZ *= rand.nextFloat() * 0.2F;

                ticksInGroundAmmo = 0;

                ticksInAirAmmo = 0;

            } else

            {

                ticksInGroundAmmo++;

                if(ticksInGroundAmmo == 1200)

                {

                    setDead();

                }

                return;

            }

        } else

        {

            ticksInAirAmmo++;

        }

        Vec3D vec3d = Vec3D.createVector(posX, posY, posZ);

        Vec3D vec3d1 = Vec3D.createVector(posX + motionX, posY + motionY, posZ + motionZ);

        MovingObjectPosition movingobjectposition = worldObj.rayTraceBlocks(vec3d, vec3d1);

        vec3d = Vec3D.createVector(posX, posY, posZ);

        vec3d1 = Vec3D.createVector(posX + motionX, posY + motionY, posZ + motionZ);

        if(movingobjectposition != null)

        {

            vec3d1 = Vec3D.createVector(movingobjectposition.hitVec.xCoord, movingobjectposition.hitVec.yCoord, movingobjectposition.hitVec.zCoord);

        }

        if(!worldObj.isRemote)

        {

            Entity entity = null;

            List list = worldObj.getEntitiesWithinAABBExcludingEntity(this, boundingBox.addCoord(motionX, motionY, motionZ).expand(1.0D, 1.0D, 1.0D));

            double d = 0.0D;

            for(int l = 0; l < list.size(); l++)

            {

                Entity entity1 = (Entity)list.get(l);

                if(!entity1.canBeCollidedWith() || entity1 == shootingEntity && ticksInAirAmmo < 5)

                {

                    continue;

                }

                float f4 = 0.3F;

                AxisAlignedBB axisalignedbb = entity1.boundingBox.expand(f4, f4, f4);

                MovingObjectPosition movingobjectposition1 = axisalignedbb.calculateIntercept(vec3d, vec3d1);

                if(movingobjectposition1 == null)

                {

                    continue;

                }

                double d1 = vec3d.distanceTo(movingobjectposition1.hitVec);

                if(d1 < d || d == 0.0D)

                {

                    entity = entity1;

                    d = d1;

                }

            }

 

            if(entity != null)

            {

                movingobjectposition = new MovingObjectPosition(entity);

            }

        }

        if(movingobjectposition != null)

        {

            if(movingobjectposition.entityHit != null)

            {

                if(!movingobjectposition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, shootingEntity), 4));

            }

 

            setDead();

        }

        posX += motionX;

        posY += motionY;

        posZ += motionZ;

        float f = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ);

        rotationYaw = (float)((Math.atan2(motionX, motionZ) * 180D) / 3.1415927410125732D);

        for(rotationPitch = (float)((Math.atan2(motionY, f) * 180D) / 3.1415927410125732D); rotationPitch - prevRotationPitch < -180F; prevRotationPitch -= 360F) { }

        for(; rotationPitch - prevRotationPitch >= 180F; prevRotationPitch += 360F) { }

        for(; rotationYaw - prevRotationYaw < -180F; prevRotationYaw -= 360F) { }

        for(; rotationYaw - prevRotationYaw >= 180F; prevRotationYaw += 360F) { }

        rotationPitch = prevRotationPitch + (rotationPitch - prevRotationPitch) * 0.2F;

        rotationYaw = prevRotationYaw + (rotationYaw - prevRotationYaw) * 0.2F;

        float f1 = 0.99F;

        float f2 = 0.03F;

        if(isInWater())

        {

            for(int k = 0; k < 4; k++)

            {

                float f3 = 0.25F;

                worldObj.spawnParticle("bubble", posX - motionX * (double)f3, posY - motionY * (double)f3, posZ - motionZ * (double)f3, motionX, motionY, motionZ);

            }

 

            f1 = 0.8F;

        }

        motionX *= f1;

        motionY *= f1;

        motionZ *= f1;

        motionY -= f2;

        setPosition(posX, posY, posZ);

    }

 

    public void writeEntityToNBT(NBTTagCompound nbttagcompound)

    {

        nbttagcompound.setShort("xTile", (short)xTileAmmo);

        nbttagcompound.setShort("yTile", (short)yTileAmmo);

        nbttagcompound.setShort("zTile", (short)zTileAmmo);

        nbttagcompound.setByte("inTile", (byte)inTileAmmo);

        nbttagcompound.setByte("shake", (byte)shakeAmmo);

        nbttagcompound.setByte("inGround", (byte)(inGroundAmmo ? 1 : 0));

    }

 

    public void readEntityFromNBT(NBTTagCompound nbttagcompound)

    {

        xTileAmmo = nbttagcompound.getShort("xTile");

        yTileAmmo = nbttagcompound.getShort("yTile");

        zTileAmmo = nbttagcompound.getShort("zTile");

        inTileAmmo = nbttagcompound.getByte("inTile") & 0xff;

        shakeAmmo = nbttagcompound.getByte("shake") & 0xff;

        inGroundAmmo = nbttagcompound.getByte("inGround") == 1;

    }

 

    public void onCollideWithPlayer(EntityPlayer entityplayer)

    {

        if(inGroundAmmo && shootingEntity == entityplayer && shakeAmmo <= 0 && entityplayer.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1)))

        {

            worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);

            entityplayer.onItemPickup(this, 1);

            setDead();

        }

    }

 

    public float getShadowSize()

    {

        return 0.0F;

    }

 

    private int xTileAmmo;

    private int yTileAmmo;

    private int zTileAmmo;

    private int inTileAmmo;

    private boolean inGroundAmmo;

    public int shakeAmmo;

    private EntityLiving shootingEntity;

    private int ticksInGroundAmmo;

    private int ticksInAirAmmo;

@Override

protected void onImpact(MovingObjectPosition var1) {

// TODO Auto-generated method stub

 

}

}

 

 

 

 

I know then I ask a lot but I'm searching for a week and it makes me  :-X

Thx for reading and sorry for my english!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.