package com.gildedgames.the_aether.entities.passive; import com.gildedgames.the_aether.entities.ai.aerwhale.AerwhaleAITravelCourse; import com.gildedgames.the_aether.entities.ai.aerwhale.AerwhaleAIUnstuck; import net.minecraft.entity.EntityFlying; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.monster.IMob; import net.minecraft.init.Blocks; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.util.Vec3; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import com.gildedgames.the_aether.blocks.BlocksAether; public class EntityAerwhale extends EntityFlying { private double motionYaw; private double motionPitch; public double aerwhaleRotationYaw; public double aerwhaleRotationPitch; public EntityAerwhale(World world) { super(world); this.setSize(3F, 3F); this.isImmuneToFire = true; this.ignoreFrustumCheck = true; this.rotationYaw = 360F * this.getRNG().nextFloat(); this.rotationPitch = 90F * this.getRNG().nextFloat() - 45F; this.tasks.addTask(1, new AerwhaleAIUnstuck(this)); this.tasks.addTask(5, new AerwhaleAITravelCourse(this)); } @Override protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1.0D); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D); } @Override protected boolean isAIEnabled() { return true; } @Override public boolean getCanSpawnHere() { int i = MathHelper.floor_double(this.posX); int j = MathHelper.floor_double(this.boundingBox.minY); int k = MathHelper.floor_double(this.posZ); return this.worldObj.getBlock(i, j - 1, k) == BlocksAether.aether_grass && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.isAnyLiquid(this.boundingBox) && this.worldObj.getBlockLightValue(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY), MathHelper.floor_double(this.posZ)) > 8 && super.getCanSpawnHere(); } @Override public int getMaxSpawnedInChunk() { return 1; } @Override public void onUpdate() { super.onUpdate(); this.extinguish(); if (this.posY < -64.0D) { this.setDead(); } this.aerwhaleRotationYaw = this.rotationYaw; this.aerwhaleRotationPitch = this.rotationPitch; } @Override public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) { this.stepHeight = 0.5F; this.jumpMovementFactor = 0.02F; super.moveEntityWithHeading(p_70612_1_, p_70612_2_); } @Override public String getLivingSound() { return "aether_legacy:aemob.aerwhale.call"; } @Override protected String getHurtSound() { return "aether_legacy:aemob.aerwhale.death"; } @Override protected String getDeathSound() { return "aether_legacy:aemob.aerwhale.death"; } @Override public boolean canDespawn() { return true; } }