From 969f0b96fdacd8e03c4b0aea6695ab5ec4c8d398 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sun, 17 Jan 2021 17:40:09 +0000 Subject: [PATCH] Have custom large fireballs deal magic damage to ghasts in order to get around vanilla's hardcoded instanceof check, fixes #443 --- .../projectile/EntityLargeMagicFireball.java | 14 ++++++++++++++ .../entity/projectile/EntityMagicFireball.java | 11 ++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityLargeMagicFireball.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityLargeMagicFireball.java index f34b6d57..3ab8f3d1 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntityLargeMagicFireball.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityLargeMagicFireball.java @@ -4,9 +4,14 @@ import electroblob.wizardry.Wizardry; import electroblob.wizardry.registry.Spells; import electroblob.wizardry.spell.Spell; import electroblob.wizardry.util.EntityUtils; +import electroblob.wizardry.util.MagicDamage; +import electroblob.wizardry.util.MagicDamage.DamageType; 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.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; 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; } + @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 protected void onImpact(RayTraceResult rayTrace){ diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicFireball.java b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicFireball.java index 28356618..0100f0b0 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicFireball.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntityMagicFireball.java @@ -10,6 +10,7 @@ import electroblob.wizardry.util.ParticleBuilder; import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityGhast; import net.minecraft.entity.projectile.EntitySmallFireball; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; @@ -75,9 +76,9 @@ public class EntityMagicFireball extends EntityMagicProjectile { float damage = getDamage() * damageMultiplier; - entityHit.attackEntityFrom( - MagicDamage.causeIndirectMagicDamage(this, this.getThrower(), DamageType.FIRE).setProjectile(), - damage); + DamageSource source = getDamageSource(entityHit); + + entityHit.attackEntityFrom(source, damage); if(!MagicDamage.isEntityImmune(DamageType.FIRE, entityHit) && getBurnDuration() > 0) 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 public void onUpdate(){