Have custom large fireballs deal magic damage to ghasts in order to get around vanilla's hardcoded instanceof check, fixes #443
This commit is contained in:
@@ -4,9 +4,14 @@ import electroblob.wizardry.Wizardry;
|
|||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.EntityUtils;
|
import electroblob.wizardry.util.EntityUtils;
|
||||||
|
import electroblob.wizardry.util.MagicDamage;
|
||||||
|
import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.monster.EntityGhast;
|
||||||
import net.minecraft.entity.projectile.EntityLargeFireball;
|
import net.minecraft.entity.projectile.EntityLargeFireball;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||||
@@ -47,6 +52,15 @@ public class EntityLargeMagicFireball extends EntityMagicFireball {
|
|||||||
return damage == -1 ? Spells.greater_fireball.getProperty(Spell.DAMAGE).floatValue() : damage;
|
return damage == -1 ? Spells.greater_fireball.getProperty(Spell.DAMAGE).floatValue() : damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected DamageSource getDamageSource(Entity entityHit){
|
||||||
|
if(entityHit instanceof EntityGhast){
|
||||||
|
return MagicDamage.causeIndirectMagicDamage(this, this.getThrower(), DamageType.MAGIC).setProjectile();
|
||||||
|
}else{
|
||||||
|
return super.getDamageSource(entityHit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onImpact(RayTraceResult rayTrace){
|
protected void onImpact(RayTraceResult rayTrace){
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import electroblob.wizardry.util.ParticleBuilder;
|
|||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.monster.EntityGhast;
|
||||||
import net.minecraft.entity.projectile.EntitySmallFireball;
|
import net.minecraft.entity.projectile.EntitySmallFireball;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
@@ -75,9 +76,9 @@ public class EntityMagicFireball extends EntityMagicProjectile {
|
|||||||
|
|
||||||
float damage = getDamage() * damageMultiplier;
|
float damage = getDamage() * damageMultiplier;
|
||||||
|
|
||||||
entityHit.attackEntityFrom(
|
DamageSource source = getDamageSource(entityHit);
|
||||||
MagicDamage.causeIndirectMagicDamage(this, this.getThrower(), DamageType.FIRE).setProjectile(),
|
|
||||||
damage);
|
entityHit.attackEntityFrom(source, damage);
|
||||||
|
|
||||||
if(!MagicDamage.isEntityImmune(DamageType.FIRE, entityHit) && getBurnDuration() > 0)
|
if(!MagicDamage.isEntityImmune(DamageType.FIRE, entityHit) && getBurnDuration() > 0)
|
||||||
entityHit.setFire(getBurnDuration());
|
entityHit.setFire(getBurnDuration());
|
||||||
@@ -99,6 +100,10 @@ public class EntityMagicFireball extends EntityMagicProjectile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected DamageSource getDamageSource(Entity entityHit){
|
||||||
|
return MagicDamage.causeIndirectMagicDamage(this, this.getThrower(), DamageType.FIRE).setProjectile();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate(){
|
public void onUpdate(){
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user