Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.ChaoticSoul.MoreArmor.entity;
- import java.util.List;
- import java.util.UUID;
- import javax.annotation.Nullable;
- import net.minecraft.block.material.Material;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.IProjectile;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.util.DamageSource;
- import net.minecraft.util.EnumParticleTypes;
- import net.minecraft.util.math.AxisAlignedBB;
- import net.minecraft.util.math.MathHelper;
- import net.minecraft.util.math.RayTraceResult;
- import net.minecraft.util.math.Vec3d;
- import net.minecraft.world.World;
- import net.minecraftforge.fml.relauncher.Side;
- import net.minecraftforge.fml.relauncher.SideOnly;
- public class EntityVenom extends Entity implements IProjectile
- {
- public EntityCobra owner;
- private NBTTagCompound ownerNbt;
- public EntityVenom(World worldIn)
- {
- super(worldIn);
- }
- public EntityVenom(World worldIn, EntityCobra p_i47273_2_)
- {
- super(worldIn);
- this.owner = p_i47273_2_;
- this.setPosition(p_i47273_2_.posX - (double)(p_i47273_2_.width + 1.0F) * 0.5D * (double)MathHelper.sin(p_i47273_2_.renderYawOffset * 0.017453292F), p_i47273_2_.posY + (double)p_i47273_2_.getEyeHeight() - 0.10000000149011612D, p_i47273_2_.posZ + (double)(p_i47273_2_.width + 1.0F) * 0.5D * (double)MathHelper.cos(p_i47273_2_.renderYawOffset * 0.017453292F));
- this.setSize(0.25F, 0.25F);
- }
- @SideOnly(Side.CLIENT)
- public EntityVenom(World worldIn, double x, double y, double z, double p_i47274_8_, double p_i47274_10_, double p_i47274_12_)
- {
- super(worldIn);
- this.setPosition(x, y, z);
- for (int i = 0; i < 7; ++i)
- {
- double d0 = 0.4D + 0.1D * (double)i;
- worldIn.spawnParticle(EnumParticleTypes.SPIT, x, y, z, p_i47274_8_ * d0, p_i47274_10_, p_i47274_12_ * d0);
- }
- this.motionX = p_i47274_8_;
- this.motionY = p_i47274_10_;
- this.motionZ = p_i47274_12_;
- }
- /**
- * Called to update the entity's position/logic.
- */
- public void onUpdate()
- {
- super.onUpdate();
- if (this.ownerNbt != null)
- {
- this.restoreOwnerFromSave();
- }
- Vec3d vec3d = new Vec3d(this.posX, this.posY, this.posZ);
- Vec3d vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
- RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d, vec3d1);
- vec3d = new Vec3d(this.posX, this.posY, this.posZ);
- vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
- if (raytraceresult != null)
- {
- vec3d1 = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z);
- }
- Entity entity = this.getHitEntity(vec3d, vec3d1);
- if (entity != null)
- {
- raytraceresult = new RayTraceResult(entity);
- }
- if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult))
- {
- this.onHit(raytraceresult);
- }
- this.posX += this.motionX;
- this.posY += this.motionY;
- this.posZ += this.motionZ;
- float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
- this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI));
- for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / 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 f1 = 0.99F;
- float f2 = 0.06F;
- if (!this.world.isMaterialInBB(this.getEntityBoundingBox(), Material.AIR))
- {
- this.setDead();
- }
- else if (this.isInWater())
- {
- this.setDead();
- }
- else
- {
- this.motionX *= 0.9900000095367432D;
- this.motionY *= 0.9900000095367432D;
- this.motionZ *= 0.9900000095367432D;
- if (!this.hasNoGravity())
- {
- this.motionY -= 0.05999999865889549D;
- }
- this.setPosition(this.posX, this.posY, this.posZ);
- }
- }
- /**
- * Updates the entity motion clientside, called by packets from the server
- */
- @SideOnly(Side.CLIENT)
- public void setVelocity(double x, double y, double z)
- {
- this.motionX = x;
- this.motionY = y;
- this.motionZ = z;
- if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F)
- {
- float f = MathHelper.sqrt(x * x + z * z);
- this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI));
- this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI));
- this.prevRotationPitch = this.rotationPitch;
- this.prevRotationYaw = this.rotationYaw;
- this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch);
- }
- }
- @Nullable
- private Entity getHitEntity(Vec3d p_190538_1_, Vec3d p_190538_2_)
- {
- Entity entity = null;
- List<Entity> list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D));
- double d0 = 0.0D;
- for (Entity entity1 : list)
- {
- if (entity1 != this.owner)
- {
- AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D);
- RayTraceResult raytraceresult = axisalignedbb.calculateIntercept(p_190538_1_, p_190538_2_);
- if (raytraceresult != null)
- {
- double d1 = p_190538_1_.squareDistanceTo(raytraceresult.hitVec);
- if (d1 < d0 || d0 == 0.0D)
- {
- entity = entity1;
- d0 = d1;
- }
- }
- }
- }
- return entity;
- }
- /**
- * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
- */
- public void shoot(double x, double y, double z, float velocity, float inaccuracy)
- {
- float f = MathHelper.sqrt(x * x + y * y + z * z);
- x = x / (double)f;
- y = y / (double)f;
- z = z / (double)f;
- x = x + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy;
- y = y + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy;
- z = z + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy;
- x = x * (double)velocity;
- y = y * (double)velocity;
- z = z * (double)velocity;
- this.motionX = x;
- this.motionY = y;
- this.motionZ = z;
- float f1 = MathHelper.sqrt(x * x + z * z);
- this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI));
- this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * (180D / Math.PI));
- this.prevRotationYaw = this.rotationYaw;
- this.prevRotationPitch = this.rotationPitch;
- }
- public void onHit(RayTraceResult p_190536_1_)
- {
- if (p_190536_1_.entityHit != null && this.owner != null)
- {
- p_190536_1_.entityHit.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.owner).setProjectile(), 4.0F);
- }
- if (!this.world.isRemote)
- {
- this.setDead();
- }
- }
- protected void entityInit()
- {
- }
- /**
- * (abstract) Protected helper method to read subclass entity data from NBT.
- */
- protected void readEntityFromNBT(NBTTagCompound compound)
- {
- if (compound.hasKey("Owner", 10))
- {
- this.ownerNbt = compound.getCompoundTag("Owner");
- }
- }
- /**
- * (abstract) Protected helper method to write subclass entity data to NBT.
- */
- protected void writeEntityToNBT(NBTTagCompound compound)
- {
- if (this.owner != null)
- {
- NBTTagCompound nbttagcompound = new NBTTagCompound();
- UUID uuid = this.owner.getUniqueID();
- nbttagcompound.setUniqueId("OwnerUUID", uuid);
- compound.setTag("Owner", nbttagcompound);
- }
- }
- private void restoreOwnerFromSave()
- {
- if (this.ownerNbt != null && this.ownerNbt.hasUniqueId("OwnerUUID"))
- {
- UUID uuid = this.ownerNbt.getUniqueId("OwnerUUID");
- for (EntityCobra entitycobra : this.world.getEntitiesWithinAABB(EntityCobra.class, this.getEntityBoundingBox().grow(15.0D)))
- {
- if (entitycobra.getUniqueID().equals(uuid))
- {
- this.owner = entitycobra;
- break;
- }
- }
- }
- this.ownerNbt = null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement