The Valkyrie Queen no longer despawns in peaceful mode.

This commit is contained in:
bconlon 2020-07-05 23:47:33 -07:00
parent f61abd8e62
commit 3f22424f77
2 changed files with 184 additions and 1 deletions

View file

@ -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);

View 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";
}
}