Posted September 15, 201213 yr 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 Thx for reading and sorry for my english!
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.