| package com.legacy.aether.entities.util; |
| |
| import net.minecraft.enchantment.EnchantmentHelper; |
| import net.minecraft.entity.Entity; |
| import net.minecraft.entity.EntityCreature; |
| import net.minecraft.entity.EntityLivingBase; |
| import net.minecraft.entity.SharedMonsterAttributes; |
| import net.minecraft.entity.monster.IMob; |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.util.DamageSource; |
| import net.minecraft.util.MathHelper; |
| import net.minecraft.world.EnumDifficulty; |
| import net.minecraft.world.EnumSkyBlock; |
| import net.minecraft.world.World; |
| |
| public abstract class EntityBossMob extends EntityCreature implements IMob { |
| |
| public EntityBossMob(World world) { |
| super(world); |
| |
| this.experienceValue = 5; |
| } |
| |
| @Override |
| protected void applyEntityAttributes() { |
| super.applyEntityAttributes(); |
| this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage); |
| } |
| |
| @Override |
| public void onLivingUpdate() { |
| this.updateArmSwingProgress(); |
| float f = this.getBrightness(1.0F); |
| |
| if (f > 0.5F) { |
| this.entityAge += 2; |
| } |
| |
| super.onLivingUpdate(); |
| } |
| |
| @Override |
| public void onUpdate() { |
| super.onUpdate(); |
| } |
| |
| @Override |
| protected Entity findPlayerToAttack() { |
| EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); |
| return entityplayer != null && this.canEntityBeSeen(entityplayer) ? entityplayer : null; |
| } |
| |
| @Override |
| public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { |
| if (this.isEntityInvulnerable()) { |
| return false; |
| } else if (super.attackEntityFrom(p_70097_1_, p_70097_2_)) { |
| Entity entity = p_70097_1_.getEntity(); |
| |
| if (this.riddenByEntity != entity && this.ridingEntity != entity) { |
| if (entity != this) { |
| this.entityToAttack = entity; |
| } |
| |
| return true; |
| } else { |
| return true; |
| } |
| } else { |
| return false; |
| } |
| } |
| |
| @Override |
| public boolean attackEntityAsMob(Entity p_70652_1_) { |
| float f = (float) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); |
| int i = 0; |
| |
| if (p_70652_1_ instanceof EntityLivingBase) { |
| f += EnchantmentHelper.getEnchantmentModifierLiving(this, (EntityLivingBase) p_70652_1_); |
| i += EnchantmentHelper.getKnockbackModifier(this, (EntityLivingBase) p_70652_1_); |
| } |
| |
| boolean flag = p_70652_1_.attackEntityFrom(DamageSource.causeMobDamage(this), f); |
| |
| if (flag) { |
| if (i > 0) { |
| p_70652_1_.addVelocity((double) (-MathHelper.sin(this.rotationYaw * (float) Math.PI / 180.0F) * (float) i * 0.5F), 0.1D, (double) (MathHelper.cos(this.rotationYaw * (float) Math.PI / 180.0F) * (float) i * 0.5F)); |
| this.motionX *= 0.6D; |
| this.motionZ *= 0.6D; |
| } |
| |
| int j = EnchantmentHelper.getFireAspectModifier(this); |
| |
| if (j > 0) { |
| p_70652_1_.setFire(j * 4); |
| } |
| |
| if (p_70652_1_ instanceof EntityLivingBase) { |
| EnchantmentHelper.func_151384_a((EntityLivingBase) p_70652_1_, this); |
| } |
| |
| EnchantmentHelper.func_151385_b(this, p_70652_1_); |
| } |
| |
| return flag; |
| } |
| |
| @Override |
| protected void attackEntity(Entity p_70785_1_, float p_70785_2_) { |
| if (this.attackTime <= 0 && p_70785_2_ < 2.0F && p_70785_1_.boundingBox.maxY > this.boundingBox.minY && p_70785_1_.boundingBox.minY < this.boundingBox.maxY) { |
| this.attackTime = 20; |
| this.attackEntityAsMob(p_70785_1_); |
| } |
| } |
| |
| @Override |
| public float getBlockPathWeight(int p_70783_1_, int p_70783_2_, int p_70783_3_) { |
| return 0.5F - this.worldObj.getLightBrightness(p_70783_1_, p_70783_2_, p_70783_3_); |
| } |
| |
| protected boolean isValidLightLevel() { |
| int i = MathHelper.floor_double(this.posX); |
| int j = MathHelper.floor_double(this.boundingBox.minY); |
| int k = MathHelper.floor_double(this.posZ); |
| |
| if (this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, i, j, k) > this.rand.nextInt(32)) { |
| return false; |
| } else { |
| int l = this.worldObj.getBlockLightValue(i, j, k); |
| |
| if (this.worldObj.isThundering()) { |
| int i1 = this.worldObj.skylightSubtracted; |
| this.worldObj.skylightSubtracted = 10; |
| l = this.worldObj.getBlockLightValue(i, j, k); |
| this.worldObj.skylightSubtracted = i1; |
| } |
| |
| return l <= this.rand.nextInt(8); |
| } |
| } |
| |
| public boolean willDespawnPeacefully() { |
| return false; |
| } |
| |
| @Override |
| public boolean getCanSpawnHere() { |
| return this.isValidLightLevel() && super.getCanSpawnHere(); |
| } |
| |
| @Override |
| protected boolean func_146066_aG() { |
| return true; |
| } |
| |
| @Override |
| protected String func_146067_o(int p_146067_1_) { |
| return p_146067_1_ > 4 ? "game.hostile.hurt.fall.big" : "game.hostile.hurt.fall.small"; |
| } |
| |
| @Override |
| protected String getSwimSound() { |
| return "game.hostile.swim"; |
| } |
| |
| @Override |
| protected String getSplashSound() { |
| return "game.hostile.swim.splash"; |
| } |
| |
| @Override |
| protected String getHurtSound() { |
| return "game.hostile.hurt"; |
| } |
| |
| @Override |
| protected String getDeathSound() { |
| return "game.hostile.die"; |
| } |
| |
| } |