The Valkyrie Queen no longer despawns in peaceful mode.
This commit is contained in:
parent
f61abd8e62
commit
3f22424f77
|
@ -2,6 +2,7 @@ package com.legacy.aether.entities.bosses.valkyrie_queen;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.legacy.aether.entities.util.EntityBossMob;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
@ -41,7 +42,7 @@ import cpw.mods.fml.common.FMLCommonHandler;
|
|||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class EntityValkyrieQueen extends EntityAetherMob implements IAetherBoss {
|
||||
public class EntityValkyrieQueen extends EntityBossMob implements IAetherBoss {
|
||||
|
||||
private EntityAIAttackContinuously enhancedCombat = new EntityAIAttackContinuously(this, 0.65D);
|
||||
|
||||
|
|
182
src/main/java/com/legacy/aether/entities/util/EntityBossMob.java
Normal file
182
src/main/java/com/legacy/aether/entities/util/EntityBossMob.java
Normal file
|
@ -0,0 +1,182 @@
|
|||
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";
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue