Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphidBehemoth.java
2024-02-01 21:37:57 +01:00

111 lines
3.1 KiB
Java

package com.hbm.entity.mob.glyphid;
import com.hbm.entity.effect.EntityMist;
import com.hbm.entity.projectile.EntityChemical;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class EntityGlyphidBehemoth extends EntityGlyphid {
public EntityGlyphidBehemoth(World world) {
super(world);
this.setSize(2.5F, 1.5F);
}
@Override
public ResourceLocation getSkin() {
return ResourceManager.glyphid_behemoth_tex;
}
@Override
public double getScale() {
return 1.5D;
}
@Override
protected void applyEntityAttributes() {
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(GlyphidStats.getStats().getBehemoth().health);
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(GlyphidStats.getStats().getBehemoth().speed);
this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(GlyphidStats.getStats().getBehemoth().damage);
}
@Override public int getDivisorPerArmorPoint() { return GlyphidStats.getStats().getBehemoth().divisor; }
@Override public float getDamageThreshold() { return GlyphidStats.getStats().getBehemoth().damageThreshold; }
public int timer = 120;
int breathTime = 0;
@Override
public void onUpdate(){
super.onUpdate();
Entity e = this.getEntityToAttack();
if (e == null) {
timer = 120;
breathTime = 0;
} else {
if (breathTime > 0) {
if(!isSwingInProgress){
this.swingItem();
}
acidAttack();
rotationYaw = prevRotationYaw;
breathTime--;
} else if (--timer <= 0) {
breathTime = 120;
timer = 120;
}
}
}
@Override
public void onDeath(DamageSource source) {
super.onDeath(source);
if (!worldObj.isRemote) {
EntityMist mist = new EntityMist(worldObj);
mist.setType(Fluids.ACID);
mist.setPosition(posX, posY, posZ);
mist.setArea(10, 4);
mist.setDuration(120);
worldObj.spawnEntityInWorld(mist);
}
}
public void acidAttack(){
if(!worldObj.isRemote && entityToAttack instanceof EntityLivingBase && this.getDistanceToEntity(entityToAttack) < 20) {
this.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 2 * 20, 6));
EntityChemical chem = new EntityChemical(worldObj, this);
chem.setFluid(Fluids.ACID);
worldObj.spawnEntityInWorld(chem);
}
}
@Override
protected void dropFewItems(boolean byPlayer, int looting) {
this.entityDropItem(new ItemStack(ModItems.glyphid_gland, 1, Fluids.SULFURIC_ACID.getID()), 1);
super.dropFewItems(byPlayer, looting);
}
@Override
public boolean isArmorBroken(float amount) {
// amount < 5 ? 5 : amount < 10 ? 3 : 2;
return this.rand.nextInt(100) <= Math.min(Math.pow(amount * 0.15, 2), 100);
}
@Override
public int swingDuration() {
return 100;
}
}