| package com.legacy.aether.entities.hostile; |
| |
| import net.minecraft.entity.EntityFlying; |
| import net.minecraft.entity.ai.EntityAILookIdle; |
| import net.minecraft.entity.ai.EntityAIWatchClosest; |
| import net.minecraft.entity.monster.IMob; |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.item.Item; |
| import net.minecraft.util.MathHelper; |
| import net.minecraft.world.EnumDifficulty; |
| import net.minecraft.world.World; |
| |
| import com.legacy.aether.blocks.BlocksAether; |
| import com.legacy.aether.entities.ai.EntityAIUpdateState; |
| import com.legacy.aether.entities.ai.zephyr.ZephyrAIShootTarget; |
| import com.legacy.aether.entities.ai.zephyr.ZephyrAITravelCourse; |
| |
| public class EntityZephyr extends EntityFlying implements IMob { |
| |
| public ZephyrAIShootTarget shootingAI; |
| |
| public int courseCooldown; |
| |
| public double waypointX, waypointY, waypointZ; |
| |
| public EntityZephyr(World world) { |
| super(world); |
| |
| this.setSize(4F, 4F); |
| |
| this.tasks.addTask(1, this.shootingAI = new ZephyrAIShootTarget(this)); |
| this.tasks.addTask(0, new EntityAIUpdateState(this)); |
| this.tasks.addTask(2, new ZephyrAITravelCourse(this)); |
| this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); |
| this.tasks.addTask(6, new EntityAILookIdle(this)); |
| } |
| |
| @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.rand.nextInt(85) == 0 && 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 onEntityUpdate() { |
| super.onEntityUpdate(); |
| |
| if (this.worldObj.isRemote) { |
| this.shootingAI.updateTask(); |
| } |
| |
| if (this.posY < -2D || this.posY > 255D) { |
| this.despawnEntity(); |
| } |
| |
| if (this.getAttackTarget() != null && this.getAttackTarget().isDead) { |
| this.setAttackTarget(null); |
| } |
| |
| if (!this.worldObj.isRemote && this.worldObj.difficultySetting == EnumDifficulty.PEACEFUL) { |
| this.setDead(); |
| } |
| } |
| |
| @Override |
| protected void updateEntityActionState() { |
| super.updateEntityActionState(); |
| } |
| |
| @Override |
| protected String getLivingSound() { |
| return "aether_legacy:aemob.zephyr.call"; |
| } |
| |
| @Override |
| protected String getHurtSound() { |
| return "aether_legacy:aemob.zephyr.call"; |
| } |
| |
| @Override |
| protected String getDeathSound() { |
| return null; |
| } |
| |
| @Override |
| protected void dropFewItems(boolean var1, int var2) { |
| this.dropItem(Item.getItemFromBlock(BlocksAether.aercloud), 1); |
| } |
| |
| @Override |
| public boolean canDespawn() { |
| return true; |
| } |
| |
| @Override |
| protected float getSoundVolume() { |
| return 1F; |
| } |
| |
| } |