/// <summary> /// Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons /// use this to react to sunlight and start to burn. /// </summary> public override void OnLivingUpdate() { if (WorldObj.IsDaytime() && !WorldObj.IsRemote) { float f = GetBrightness(1.0F); if (f > 0.5F && WorldObj.CanBlockSeeTheSky(MathHelper2.Floor_double(PosX), MathHelper2.Floor_double(PosY), MathHelper2.Floor_double(PosZ)) && Rand.NextFloat() * 30F < (f - 0.4F) * 2.0F) { SetFire(8); } } base.OnLivingUpdate(); }
/// <summary> /// Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons /// use this to react to sunlight and start to burn. /// </summary> public override void OnLivingUpdate() { if (IsWet()) { AttackEntityFrom(DamageSource.Drown, 1); } IsAttacking = EntityToAttack != null; MoveSpeed = EntityToAttack == null ? 0.3F : 6.5F; if (!WorldObj.IsRemote) { if (GetCarried() == 0) { if (Rand.Next(20) == 0) { int i = MathHelper2.Floor_double((PosX - 2D) + Rand.NextDouble() * 4D); int l = MathHelper2.Floor_double(PosY + Rand.NextDouble() * 3D); int j1 = MathHelper2.Floor_double((PosZ - 2D) + Rand.NextDouble() * 4D); int l1 = WorldObj.GetBlockId(i, l, j1); if (CanCarryBlocks[l1]) { SetCarried(WorldObj.GetBlockId(i, l, j1)); SetCarryingData(WorldObj.GetBlockMetadata(i, l, j1)); WorldObj.SetBlockWithNotify(i, l, j1, 0); } } } else if (Rand.Next(2000) == 0) { int j = MathHelper2.Floor_double((PosX - 1.0D) + Rand.NextDouble() * 2D); int i1 = MathHelper2.Floor_double(PosY + Rand.NextDouble() * 2D); int k1 = MathHelper2.Floor_double((PosZ - 1.0D) + Rand.NextDouble() * 2D); int i2 = WorldObj.GetBlockId(j, i1, k1); int j2 = WorldObj.GetBlockId(j, i1 - 1, k1); if (i2 == 0 && j2 > 0 && Block.BlocksList[j2].RenderAsNormalBlock()) { WorldObj.SetBlockAndMetadataWithNotify(j, i1, k1, GetCarried(), GetCarryingData()); SetCarried(0); } } } for (int k = 0; k < 2; k++) { WorldObj.SpawnParticle("portal", PosX + (Rand.NextDouble() - 0.5D) * (double)Width, (PosY + Rand.NextDouble() * (double)Height) - 0.25D, PosZ + (Rand.NextDouble() - 0.5D) * (double)Width, (Rand.NextDouble() - 0.5D) * 2D, -Rand.NextDouble(), (Rand.NextDouble() - 0.5D) * 2D); } if (WorldObj.IsDaytime() && !WorldObj.IsRemote) { float f = GetBrightness(1.0F); if (f > 0.5F && WorldObj.CanBlockSeeTheSky(MathHelper2.Floor_double(PosX), MathHelper2.Floor_double(PosY), MathHelper2.Floor_double(PosZ)) && Rand.NextFloat() * 30F < (f - 0.4F) * 2.0F) { EntityToAttack = null; TeleportRandomly(); } } if (IsWet()) { EntityToAttack = null; TeleportRandomly(); } IsJumping = false; if (EntityToAttack != null) { FaceEntity(EntityToAttack, 100F, 100F); } if (!WorldObj.IsRemote && IsEntityAlive()) { if (EntityToAttack != null) { if ((EntityToAttack is EntityPlayer) && ShouldAttackPlayer((EntityPlayer)EntityToAttack)) { MoveStrafing = MoveForward = 0.0F; MoveSpeed = 0.0F; if (EntityToAttack.GetDistanceSqToEntity(this) < 16D) { TeleportRandomly(); } TeleportDelay = 0; } else if (EntityToAttack.GetDistanceSqToEntity(this) > 256D && TeleportDelay++ >= 30 && TeleportToEntity(EntityToAttack)) { TeleportDelay = 0; } } else { TeleportDelay = 0; } } base.OnLivingUpdate(); }