Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class EntityGuardian extends EntityMob
- {
- private float field_175482_b;
- private float field_175484_c;
- private float field_175483_bk;
- private float field_175485_bl;
- private float field_175486_bm;
- private EntityLivingBase field_175478_bn;
- private int field_175479_bo;
- private boolean field_175480_bp;
- private EntityAIWander wander;
- private static final String __OBFID = "CL_00002213";
- public EntityGuardian(World worldIn)
- {
- super(worldIn);
- this.experienceValue = 10;
- this.setSize(0.85F, 0.85F);
- this.tasks.addTask(4, new EntityGuardian.AIGuardianAttack());
- EntityAIMoveTowardsRestriction entityaimovetowardsrestriction;
- this.tasks.addTask(5, entityaimovetowardsrestriction = new EntityAIMoveTowardsRestriction(this, 1.0D));
- this.tasks.addTask(7, this.wander = new EntityAIWander(this, 1.0D, 80));
- this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
- this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityGuardian.class, 12.0F, 0.01F));
- this.tasks.addTask(9, new EntityAILookIdle(this));
- this.wander.setMutexBits(3);
- entityaimovetowardsrestriction.setMutexBits(3);
- this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityLivingBase.class, 10, true, false, new EntityGuardian.GuardianTargetSelector()));
- this.moveHelper = new EntityGuardian.GuardianMoveHelper();
- this.field_175484_c = this.field_175482_b = this.rand.nextFloat();
- }
- protected void applyEntityAttributes()
- {
- super.applyEntityAttributes();
- this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6.0D);
- this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5D);
- this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(16.0D);
- this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D);
- }
- public void readEntityFromNBT(NBTTagCompound tagCompund)
- {
- super.readEntityFromNBT(tagCompund);
- this.func_175467_a(tagCompund.getBoolean("Elder"));
- }
- public void writeEntityToNBT(NBTTagCompound tagCompound)
- {
- super.writeEntityToNBT(tagCompound);
- tagCompound.setBoolean("Elder", this.isElder());
- }
- protected PathNavigate func_175447_b(World worldIn)
- {
- return new PathNavigateSwimmer(this, worldIn);
- }
- protected void entityInit()
- {
- super.entityInit();
- this.dataWatcher.addObject(16, Integer.valueOf(0));
- this.dataWatcher.addObject(17, Integer.valueOf(0));
- }
- private boolean func_175468_a(int p_175468_1_)
- {
- return (this.dataWatcher.getWatchableObjectInt(16) & p_175468_1_) != 0;
- }
- private void func_175473_a(int p_175473_1_, boolean p_175473_2_)
- {
- int j = this.dataWatcher.getWatchableObjectInt(16);
- if (p_175473_2_)
- {
- this.dataWatcher.updateObject(16, Integer.valueOf(j | p_175473_1_));
- }
- else
- {
- this.dataWatcher.updateObject(16, Integer.valueOf(j & ~p_175473_1_));
- }
- }
- public boolean func_175472_n()
- {
- return this.func_175468_a(2);
- }
- private void func_175476_l(boolean p_175476_1_)
- {
- this.func_175473_a(2, p_175476_1_);
- }
- public int func_175464_ck()
- {
- return this.isElder() ? 60 : 80;
- }
- public boolean isElder()
- {
- return this.func_175468_a(4);
- }
- public void func_175467_a(boolean p_175467_1_)
- {
- this.func_175473_a(4, p_175467_1_);
- if (p_175467_1_)
- {
- this.setSize(1.9975F, 1.9975F);
- this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896D);
- this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(8.0D);
- this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(80.0D);
- this.enablePersistence();
- this.wander.func_179479_b(400);
- }
- }
- @SideOnly(Side.CLIENT)
- public void func_175465_cm()
- {
- this.func_175467_a(true);
- this.field_175486_bm = this.field_175485_bl = 1.0F;
- }
- private void func_175463_b(int p_175463_1_)
- {
- this.dataWatcher.updateObject(17, Integer.valueOf(p_175463_1_));
- }
- public boolean func_175474_cn()
- {
- return this.dataWatcher.getWatchableObjectInt(17) != 0;
- }
- public EntityLivingBase getTargetedEntity()
- {
- if (!this.func_175474_cn())
- {
- return null;
- }
- else if (this.worldObj.isRemote)
- {
- if (this.field_175478_bn != null)
- {
- return this.field_175478_bn;
- }
- else
- {
- Entity entity = this.worldObj.getEntityByID(this.dataWatcher.getWatchableObjectInt(17));
- if (entity instanceof EntityLivingBase)
- {
- this.field_175478_bn = (EntityLivingBase)entity;
- return this.field_175478_bn;
- }
- else
- {
- return null;
- }
- }
- }
- else
- {
- return this.getAttackTarget();
- }
- }
- public void func_145781_i(int p_145781_1_)
- {
- super.func_145781_i(p_145781_1_);
- if (p_145781_1_ == 16)
- {
- if (this.isElder() && this.width < 1.0F)
- {
- this.setSize(1.9975F, 1.9975F);
- }
- }
- else if (p_145781_1_ == 17)
- {
- this.field_175479_bo = 0;
- this.field_175478_bn = null;
- }
- }
- public int getTalkInterval()
- {
- return 160;
- }
- protected String getLivingSound()
- {
- return !this.isInWater() ? "mob.guardian.land.idle" : (this.isElder() ? "mob.guardian.elder.idle" : "mob.guardian.idle");
- }
- protected String getHurtSound()
- {
- return !this.isInWater() ? "mob.guardian.land.hit" : (this.isElder() ? "mob.guardian.elder.hit" : "mob.guardian.hit");
- }
- protected String getDeathSound()
- {
- return !this.isInWater() ? "mob.guardian.land.death" : (this.isElder() ? "mob.guardian.elder.death" : "mob.guardian.death");
- }
- protected boolean canTriggerWalking()
- {
- return false;
- }
- public float getEyeHeight()
- {
- return this.height * 0.5F;
- }
- public float func_180484_a(BlockPos p_180484_1_)
- {
- return this.worldObj.getBlockState(p_180484_1_).getBlock().getMaterial() == Material.water ? 10.0F + this.worldObj.getLightBrightness(p_180484_1_) - 0.5F : super.func_180484_a(p_180484_1_);
- }
- public void onLivingUpdate()
- {
- if (this.worldObj.isRemote)
- {
- this.field_175484_c = this.field_175482_b;
- if (!this.isInWater())
- {
- this.field_175483_bk = 2.0F;
- if (this.motionY > 0.0D && this.field_175480_bp && !this.isSilent())
- {
- this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.guardian.flop", 1.0F, 1.0F, false);
- }
- this.field_175480_bp = this.motionY < 0.0D && this.worldObj.isBlockNormalCube((new BlockPos(this)).down(), false);
- }
- else if (this.func_175472_n())
- {
- if (this.field_175483_bk < 0.5F)
- {
- this.field_175483_bk = 4.0F;
- }
- else
- {
- this.field_175483_bk += (0.5F - this.field_175483_bk) * 0.1F;
- }
- }
- else
- {
- this.field_175483_bk += (0.125F - this.field_175483_bk) * 0.2F;
- }
- this.field_175482_b += this.field_175483_bk;
- this.field_175486_bm = this.field_175485_bl;
- if (!this.isInWater())
- {
- this.field_175485_bl = this.rand.nextFloat();
- }
- else if (this.func_175472_n())
- {
- this.field_175485_bl += (0.0F - this.field_175485_bl) * 0.25F;
- }
- else
- {
- this.field_175485_bl += (1.0F - this.field_175485_bl) * 0.06F;
- }
- if (this.func_175472_n() && this.isInWater())
- {
- Vec3 vec3 = this.getLook(0.0F);
- for (int i = 0; i < 2; ++i)
- {
- this.worldObj.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width - vec3.xCoord * 1.5D, this.posY + this.rand.nextDouble() * (double)this.height - vec3.yCoord * 1.5D, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width - vec3.zCoord * 1.5D, 0.0D, 0.0D, 0.0D, new int[0]);
- }
- }
- if (this.func_175474_cn())
- {
- if (this.field_175479_bo < this.func_175464_ck())
- {
- ++this.field_175479_bo;
- }
- EntityLivingBase entitylivingbase = this.getTargetedEntity();
- if (entitylivingbase != null)
- {
- this.getLookHelper().setLookPositionWithEntity(entitylivingbase, 90.0F, 90.0F);
- this.getLookHelper().onUpdateLook();
- double d5 = (double)this.func_175477_p(0.0F);
- double d0 = entitylivingbase.posX - this.posX;
- double d1 = entitylivingbase.posY + (double)(entitylivingbase.height * 0.5F) - (this.posY + (double)this.getEyeHeight());
- double d2 = entitylivingbase.posZ - this.posZ;
- double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
- d0 /= d3;
- d1 /= d3;
- d2 /= d3;
- double d4 = this.rand.nextDouble();
- while (d4 < d3)
- {
- d4 += 1.8D - d5 + this.rand.nextDouble() * (1.7D - d5);
- this.worldObj.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + d0 * d4, this.posY + d1 * d4 + (double)this.getEyeHeight(), this.posZ + d2 * d4, 0.0D, 0.0D, 0.0D, new int[0]);
- }
- }
- }
- }
- if (this.inWater)
- {
- this.setAir(300);
- }
- else if (this.onGround)
- {
- this.motionY += 0.5D;
- this.motionX += (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.4F);
- this.motionZ += (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.4F);
- this.rotationYaw = this.rand.nextFloat() * 360.0F;
- this.onGround = false;
- this.isAirBorne = true;
- }
- if (this.func_175474_cn())
- {
- this.rotationYaw = this.rotationYawHead;
- }
- super.onLivingUpdate();
- }
- @SideOnly(Side.CLIENT)
- public float func_175471_a(float p_175471_1_)
- {
- return this.field_175484_c + (this.field_175482_b - this.field_175484_c) * p_175471_1_;
- }
- @SideOnly(Side.CLIENT)
- public float func_175469_o(float p_175469_1_)
- {
- return this.field_175486_bm + (this.field_175485_bl - this.field_175486_bm) * p_175469_1_;
- }
- public float func_175477_p(float p_175477_1_)
- {
- return ((float)this.field_175479_bo + p_175477_1_) / (float)this.func_175464_ck();
- }
- protected void updateAITasks()
- {
- super.updateAITasks();
- if (this.isElder())
- {
- boolean flag = true;
- boolean flag1 = true;
- boolean flag2 = true;
- boolean flag3 = true;
- if ((this.ticksExisted + this.getEntityId()) % 1200 == 0)
- {
- Potion potion = Potion.digSlowdown;
- List list = this.worldObj.getPlayers(EntityPlayerMP.class, new Predicate()
- {
- private static final String __OBFID = "CL_00002212";
- public boolean func_179913_a(EntityPlayerMP p_179913_1_)
- {
- return EntityGuardian.this.getDistanceSqToEntity(p_179913_1_) < 2500.0D && p_179913_1_.theItemInWorldManager.func_180239_c();
- }
- public boolean apply(Object p_apply_1_)
- {
- return this.func_179913_a((EntityPlayerMP)p_apply_1_);
- }
- });
- Iterator iterator = list.iterator();
- while (iterator.hasNext())
- {
- EntityPlayerMP entityplayermp = (EntityPlayerMP)iterator.next();
- if (!entityplayermp.isPotionActive(potion) || entityplayermp.getActivePotionEffect(potion).getAmplifier() < 2 || entityplayermp.getActivePotionEffect(potion).getDuration() < 1200)
- {
- entityplayermp.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(10, 0.0F));
- entityplayermp.addPotionEffect(new PotionEffect(potion.id, 6000, 2));
- }
- }
- }
- if (!this.hasHome())
- {
- this.func_175449_a(new BlockPos(this), 16);
- }
- }
- }
- protected void dropFewItems(boolean p_70628_1_, int p_70628_2_)
- {
- int j = this.rand.nextInt(3) + this.rand.nextInt(p_70628_2_ + 1);
- if (j > 0)
- {
- this.entityDropItem(new ItemStack(Items.prismarine_shard, j, 0), 1.0F);
- }
- if (this.rand.nextInt(3 + p_70628_2_) > 1)
- {
- this.entityDropItem(new ItemStack(Items.fish, 1, ItemFishFood.FishType.COD.getMetadata()), 1.0F);
- }
- else if (this.rand.nextInt(3 + p_70628_2_) > 1)
- {
- this.entityDropItem(new ItemStack(Items.prismarine_crystals, 1, 0), 1.0F);
- }
- if (p_70628_1_ && this.isElder())
- {
- this.entityDropItem(new ItemStack(Blocks.sponge, 1, 1), 1.0F);
- }
- }
- protected void addRandomArmor()
- {
- ItemStack itemstack = ((WeightedRandomFishable)WeightedRandom.getRandomItem(this.rand, EntityFishHook.func_174855_j())).getItemStack(this.rand);
- this.entityDropItem(itemstack, 1.0F);
- }
- protected boolean isValidLightLevel()
- {
- return true;
- }
- public boolean handleLavaMovement()
- {
- return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty();
- }
- public boolean getCanSpawnHere()
- {
- return (this.rand.nextInt(20) == 0 || !this.worldObj.canBlockSeeSky(new BlockPos(this))) && super.getCanSpawnHere();
- }
- public boolean attackEntityFrom(DamageSource source, float amount)
- {
- if (!this.func_175472_n() && !source.isMagicDamage() && source.getSourceOfDamage() instanceof EntityLivingBase)
- {
- EntityLivingBase entitylivingbase = (EntityLivingBase)source.getSourceOfDamage();
- if (!source.isExplosion())
- {
- entitylivingbase.attackEntityFrom(DamageSource.causeThornsDamage(this), 2.0F);
- entitylivingbase.playSound("damage.thorns", 0.5F, 1.0F);
- }
- }
- this.wander.func_179480_f();
- return super.attackEntityFrom(source, amount);
- }
- public int getVerticalFaceSpeed()
- {
- return 180;
- }
- public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_)
- {
- if (this.isServerWorld())
- {
- if (this.isInWater())
- {
- this.moveFlying(p_70612_1_, p_70612_2_, 0.1F);
- this.moveEntity(this.motionX, this.motionY, this.motionZ);
- this.motionX *= 0.8999999761581421D;
- this.motionY *= 0.8999999761581421D;
- this.motionZ *= 0.8999999761581421D;
- if (!this.func_175472_n() && this.getAttackTarget() == null)
- {
- this.motionY -= 0.005D;
- }
- }
- else
- {
- super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
- }
- }
- else
- {
- super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
- }
- }
- class AIGuardianAttack extends EntityAIBase
- {
- private EntityGuardian field_179456_a = EntityGuardian.this;
- private int field_179455_b;
- private static final String __OBFID = "CL_00002211";
- public AIGuardianAttack()
- {
- this.setMutexBits(3);
- }
- public boolean shouldExecute()
- {
- EntityLivingBase entitylivingbase = this.field_179456_a.getAttackTarget();
- return entitylivingbase != null && entitylivingbase.isEntityAlive();
- }
- public boolean continueExecuting()
- {
- return super.continueExecuting() && (this.field_179456_a.isElder() || this.field_179456_a.getDistanceSqToEntity(this.field_179456_a.getAttackTarget()) > 9.0D);
- }
- public void startExecuting()
- {
- this.field_179455_b = -10;
- this.field_179456_a.getNavigator().clearPathEntity();
- this.field_179456_a.getLookHelper().setLookPositionWithEntity(this.field_179456_a.getAttackTarget(), 90.0F, 90.0F);
- this.field_179456_a.isAirBorne = true;
- }
- public void resetTask()
- {
- this.field_179456_a.func_175463_b(0);
- this.field_179456_a.setAttackTarget((EntityLivingBase)null);
- this.field_179456_a.wander.func_179480_f();
- }
- public void updateTask()
- {
- EntityLivingBase entitylivingbase = this.field_179456_a.getAttackTarget();
- this.field_179456_a.getNavigator().clearPathEntity();
- this.field_179456_a.getLookHelper().setLookPositionWithEntity(entitylivingbase, 90.0F, 90.0F);
- if (!this.field_179456_a.canEntityBeSeen(entitylivingbase))
- {
- this.field_179456_a.setAttackTarget((EntityLivingBase)null);
- }
- else
- {
- ++this.field_179455_b;
- if (this.field_179455_b == 0)
- {
- this.field_179456_a.func_175463_b(this.field_179456_a.getAttackTarget().getEntityId());
- this.field_179456_a.worldObj.setEntityState(this.field_179456_a, (byte)21);
- }
- else if (this.field_179455_b >= this.field_179456_a.func_175464_ck())
- {
- float f = 1.0F;
- if (this.field_179456_a.worldObj.getDifficulty() == EnumDifficulty.HARD)
- {
- f += 2.0F;
- }
- if (this.field_179456_a.isElder())
- {
- f += 2.0F;
- }
- entitylivingbase.attackEntityFrom(DamageSource.causeIndirectMagicDamage(this.field_179456_a, this.field_179456_a), f);
- entitylivingbase.attackEntityFrom(DamageSource.causeMobDamage(this.field_179456_a), (float)this.field_179456_a.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue());
- this.field_179456_a.setAttackTarget((EntityLivingBase)null);
- }
- else if (this.field_179455_b >= 60 && this.field_179455_b % 20 == 0)
- {
- ;
- }
- super.updateTask();
- }
- }
- }
- class GuardianMoveHelper extends EntityMoveHelper
- {
- private EntityGuardian field_179930_g = EntityGuardian.this;
- private static final String __OBFID = "CL_00002209";
- public GuardianMoveHelper()
- {
- super(EntityGuardian.this);
- }
- public void onUpdateMoveHelper()
- {
- if (this.update && !this.field_179930_g.getNavigator().noPath())
- {
- double d0 = this.posX - this.field_179930_g.posX;
- double d1 = this.posY - this.field_179930_g.posY;
- double d2 = this.posZ - this.field_179930_g.posZ;
- double d3 = d0 * d0 + d1 * d1 + d2 * d2;
- d3 = (double)MathHelper.sqrt_double(d3);
- d1 /= d3;
- float f = (float)(Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F;
- this.field_179930_g.rotationYaw = this.limitAngle(this.field_179930_g.rotationYaw, f, 30.0F);
- this.field_179930_g.renderYawOffset = this.field_179930_g.rotationYaw;
- float f1 = (float)(this.speed * this.field_179930_g.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue());
- this.field_179930_g.setAIMoveSpeed(this.field_179930_g.getAIMoveSpeed() + (f1 - this.field_179930_g.getAIMoveSpeed()) * 0.125F);
- double d4 = Math.sin((double)(this.field_179930_g.ticksExisted + this.field_179930_g.getEntityId()) * 0.5D) * 0.05D;
- double d5 = Math.cos((double)(this.field_179930_g.rotationYaw * (float)Math.PI / 180.0F));
- double d6 = Math.sin((double)(this.field_179930_g.rotationYaw * (float)Math.PI / 180.0F));
- this.field_179930_g.motionX += d4 * d5;
- this.field_179930_g.motionZ += d4 * d6;
- d4 = Math.sin((double)(this.field_179930_g.ticksExisted + this.field_179930_g.getEntityId()) * 0.75D) * 0.05D;
- this.field_179930_g.motionY += d4 * (d6 + d5) * 0.25D;
- this.field_179930_g.motionY += (double)this.field_179930_g.getAIMoveSpeed() * d1 * 0.1D;
- EntityLookHelper entitylookhelper = this.field_179930_g.getLookHelper();
- double d7 = this.field_179930_g.posX + d0 / d3 * 2.0D;
- double d8 = (double)this.field_179930_g.getEyeHeight() + this.field_179930_g.posY + d1 / d3 * 1.0D;
- double d9 = this.field_179930_g.posZ + d2 / d3 * 2.0D;
- double d10 = entitylookhelper.func_180423_e();
- double d11 = entitylookhelper.func_180422_f();
- double d12 = entitylookhelper.func_180421_g();
- if (!entitylookhelper.func_180424_b())
- {
- d10 = d7;
- d11 = d8;
- d12 = d9;
- }
- this.field_179930_g.getLookHelper().setLookPosition(d10 + (d7 - d10) * 0.125D, d11 + (d8 - d11) * 0.125D, d12 + (d9 - d12) * 0.125D, 10.0F, 40.0F);
- this.field_179930_g.func_175476_l(true);
- }
- else
- {
- this.field_179930_g.setAIMoveSpeed(0.0F);
- this.field_179930_g.func_175476_l(false);
- }
- }
- }
- class GuardianTargetSelector implements Predicate
- {
- private EntityGuardian field_179916_a = EntityGuardian.this;
- private static final String __OBFID = "CL_00002210";
- public boolean func_179915_a(EntityLivingBase p_179915_1_)
- {
- return (p_179915_1_ instanceof EntityPlayer || p_179915_1_ instanceof EntitySquid) && p_179915_1_.getDistanceSqToEntity(this.field_179916_a) > 9.0D;
- }
- public boolean apply(Object p_apply_1_)
- {
- return this.func_179915_a((EntityLivingBase)p_apply_1_);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement