You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.7 KiB
Java
92 lines
3.7 KiB
Java
package com.zivilon.cinder_loe.entity;
|
|
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
|
|
|
import lotr.common.LOTRLevelData;
|
|
import lotr.common.LOTRMod;
|
|
import lotr.common.entity.npc.LOTREntityNPC;
|
|
import lotr.common.entity.animal.LOTREntityHorse;
|
|
import lotr.common.entity.projectile.LOTREntityGandalfFireball;
|
|
import lotr.common.fac.LOTRFaction;
|
|
import lotr.common.network.LOTRPacketHandler;
|
|
import lotr.common.network.LOTRPacketWeaponFX;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLiving;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.SharedMonsterAttributes;
|
|
import net.minecraft.entity.ai.attributes.IAttributeInstance;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.projectile.EntityThrowable;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class SarumanWhiteFireball extends LOTREntityGandalfFireball {
|
|
public SarumanWhiteFireball(World world) {
|
|
super(world);
|
|
}
|
|
|
|
public SarumanWhiteFireball(World world, EntityLivingBase entityliving) {
|
|
super(world, entityliving);
|
|
}
|
|
|
|
public SarumanWhiteFireball(World world, double d, double d1, double d2) {
|
|
super(world, d, d1, d2);
|
|
}
|
|
|
|
protected void onImpact(MovingObjectPosition m) {
|
|
if (!this.worldObj.isRemote)
|
|
if (m.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
|
|
explode((Entity)null);
|
|
} else if (m.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
|
|
Entity entity = m.entityHit;
|
|
if (isEntityVulnerable(entity))
|
|
explode(entity);
|
|
}
|
|
}
|
|
|
|
private void explode(Entity target) {
|
|
if (this.worldObj.isRemote)
|
|
return;
|
|
this.worldObj.playSoundAtEntity((Entity)this, "lotr:item.gandalfFireball", 4.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
|
|
LOTRPacketWeaponFX packet = new LOTRPacketWeaponFX(LOTRPacketWeaponFX.Type.MACE_SAURON, (Entity)this);
|
|
LOTRPacketHandler.networkWrapper.sendToAllAround((IMessage)packet, LOTRPacketHandler.nearEntity((Entity)this, 64.0D));
|
|
if (target != null && isEntityVulnerable(target))
|
|
target.attackEntityFrom(DamageSource.causeMobDamage(getThrower()), 10.0F);
|
|
List<EntityLivingBase> entities = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(6.0D, 6.0D, 6.0D));
|
|
if (!entities.isEmpty())
|
|
for (int i = 0; i < entities.size(); i++) {
|
|
EntityLivingBase entity = entities.get(i);
|
|
if (entity != target && isEntityVulnerable((Entity)entity)) {
|
|
float damage = 10.0F - getDistanceToEntity((Entity)entity) * 0.5F;
|
|
if (damage > 0.0F)
|
|
entity.attackEntityFrom(DamageSource.causeMobDamage(getThrower()), damage);
|
|
}
|
|
}
|
|
setDead();
|
|
}
|
|
|
|
private boolean isEntityVulnerable(Entity entity) {
|
|
if (entity == getThrower())
|
|
return false;
|
|
if (!(entity instanceof EntityLivingBase))
|
|
return false;
|
|
if (entity instanceof EntityPlayer)
|
|
return (LOTRLevelData.getData((EntityPlayer)entity).getAlignment(LOTRFaction.HIGH_ELF) < 0.0F);
|
|
return !LOTRFaction.HIGH_ELF.isGoodRelation(LOTRMod.getNPCFaction(entity));
|
|
}
|
|
|
|
protected float func_70182_d() {
|
|
return 1.5F;
|
|
}
|
|
|
|
protected float getGravityVelocity() {
|
|
return 0.0F;
|
|
}
|
|
} |