From d792d50f92fd3455eeb00e99a2a6dd2eadd074d0 Mon Sep 17 00:00:00 2001 From: Electroblob <35599699+Electroblob77@users.noreply.github.com> Date: Fri, 23 Feb 2018 12:37:14 +0000 Subject: [PATCH] Fix various problems caused by armour stands being a subclass of EntityLivingBase --- .../client/WizardryClientEventHandler.java | 5 +++-- .../java/electroblob/wizardry/item/ItemWand.java | 2 +- src/main/java/electroblob/wizardry/spell/Arc.java | 2 +- .../electroblob/wizardry/spell/ArcaneJammer.java | 3 +-- .../java/electroblob/wizardry/spell/Banish.java | 4 ++-- .../java/electroblob/wizardry/spell/Bubble.java | 3 +-- .../electroblob/wizardry/spell/ChainLightning.java | 7 ++++++- .../wizardry/spell/CurseOfSoulbinding.java | 2 +- .../electroblob/wizardry/spell/Entrapment.java | 3 +-- .../java/electroblob/wizardry/spell/Firestorm.java | 4 ++-- .../java/electroblob/wizardry/spell/FlameRay.java | 4 ++-- .../java/electroblob/wizardry/spell/Freeze.java | 3 +-- .../java/electroblob/wizardry/spell/FrostRay.java | 3 +-- .../java/electroblob/wizardry/spell/HealAlly.java | 2 +- .../java/electroblob/wizardry/spell/Ignite.java | 4 ++-- .../java/electroblob/wizardry/spell/LifeDrain.java | 3 +-- .../electroblob/wizardry/spell/LightningRay.java | 3 +-- .../electroblob/wizardry/spell/LightningWeb.java | 3 +-- .../electroblob/wizardry/spell/Metamorphosis.java | 3 +-- .../electroblob/wizardry/spell/MindControl.java | 4 +++- .../java/electroblob/wizardry/spell/MindTrick.java | 2 +- .../java/electroblob/wizardry/spell/Poison.java | 3 +-- .../java/electroblob/wizardry/spell/Slime.java | 2 +- .../java/electroblob/wizardry/spell/Whirlwind.java | 1 + .../java/electroblob/wizardry/spell/Wither.java | 3 +-- .../wizardry/util/WizardryUtilities.java | 14 ++++++++++++++ 26 files changed, 52 insertions(+), 40 deletions(-) diff --git a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java index 182d2636..e97f585d 100644 --- a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java +++ b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java @@ -24,6 +24,7 @@ import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -219,7 +220,7 @@ public final class WizardryClientEventHandler { } // Target selection pointer - if(mc.player.isSneaking() && wand.getItem() instanceof ItemWand && rayTrace != null && rayTrace.entityHit instanceof EntityLivingBase + if(mc.player.isSneaking() && wand.getItem() instanceof ItemWand && rayTrace != null && !(event.getEntity() instanceof EntityArmorStand) && rayTrace.entityHit == event.getEntity() && properties != null && properties.selectedMinion != null){ Tessellator tessellator = Tessellator.getInstance(); @@ -302,7 +303,7 @@ public final class WizardryClientEventHandler { } // Sixth sense - if(mc.player.isPotionActive(WizardryPotions.sixth_sense) && event.getEntity() != mc.player + if(mc.player.isPotionActive(WizardryPotions.sixth_sense) && !(event.getEntity() instanceof EntityArmorStand) && event.getEntity() != mc.player && mc.player.getActivePotionEffect(WizardryPotions.sixth_sense) != null && event.getEntity().getDistanceToEntity(mc.player) < 20 * (1 + mc.player.getActivePotionEffect(WizardryPotions.sixth_sense).getAmplifier() * Constants.RANGE_INCREASE_PER_LEVEL)){ diff --git a/src/main/java/electroblob/wizardry/item/ItemWand.java b/src/main/java/electroblob/wizardry/item/ItemWand.java index 985d257a..4b291963 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWand.java +++ b/src/main/java/electroblob/wizardry/item/ItemWand.java @@ -413,7 +413,7 @@ public class ItemWand extends Item { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, player, 16); - if(rayTrace != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase entity = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Arc.java b/src/main/java/electroblob/wizardry/spell/Arc.java index de264c95..d2065b15 100644 --- a/src/main/java/electroblob/wizardry/spell/Arc.java +++ b/src/main/java/electroblob/wizardry/spell/Arc.java @@ -37,7 +37,7 @@ public class Arc extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 8 * modifiers.get(WizardryItems.range_upgrade), 4.0f); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ Entity target = rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/ArcaneJammer.java b/src/main/java/electroblob/wizardry/spell/ArcaneJammer.java index a3db23ae..de71e777 100644 --- a/src/main/java/electroblob/wizardry/spell/ArcaneJammer.java +++ b/src/main/java/electroblob/wizardry/spell/ArcaneJammer.java @@ -40,8 +40,7 @@ public class ArcaneJammer extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase entity = (EntityLivingBase)rayTrace.entityHit; if(entity instanceof EntityWizard) caster.addStat(WizardryAchievements.jam_wizard); diff --git a/src/main/java/electroblob/wizardry/spell/Banish.java b/src/main/java/electroblob/wizardry/spell/Banish.java index 00280af3..126d33ff 100644 --- a/src/main/java/electroblob/wizardry/spell/Banish.java +++ b/src/main/java/electroblob/wizardry/spell/Banish.java @@ -35,8 +35,8 @@ public class Banish extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + // Left as EntityLivingBase, since it's reasonable to teleport armour stands around. + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && rayTrace.entityHit instanceof EntityLivingBase){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Bubble.java b/src/main/java/electroblob/wizardry/spell/Bubble.java index 2b3fff4c..7e838f4b 100644 --- a/src/main/java/electroblob/wizardry/spell/Bubble.java +++ b/src/main/java/electroblob/wizardry/spell/Bubble.java @@ -37,8 +37,7 @@ public class Bubble extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase entity = (EntityLivingBase)rayTrace.entityHit; if(!world.isRemote){ entity.attackEntityFrom(MagicDamage.causeDirectMagicDamage(caster, DamageType.MAGIC), diff --git a/src/main/java/electroblob/wizardry/spell/ChainLightning.java b/src/main/java/electroblob/wizardry/spell/ChainLightning.java index a80dab10..fcaea29f 100644 --- a/src/main/java/electroblob/wizardry/spell/ChainLightning.java +++ b/src/main/java/electroblob/wizardry/spell/ChainLightning.java @@ -16,6 +16,7 @@ import electroblob.wizardry.util.WizardryParticleType; import electroblob.wizardry.util.WizardryUtilities; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.util.EnumHand; @@ -43,7 +44,7 @@ public class ChainLightning extends Spell { // Anything can be attacked with the initial arc, because the player has control over where it goes. If they // hit a minion or an ally, it's their problem! - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ Entity target = rayTrace.entityHit; @@ -79,6 +80,8 @@ public class ChainLightning extends Spell { List secondaryTargets = WizardryUtilities.getEntitiesWithinRadius(seekerRange, target.posX, target.posY + target.height / 2, target.posZ, world); + + secondaryTargets.removeIf(e -> e instanceof EntityArmorStand); for(int i = 0; i < Math.min(secondaryTargets.size(), 5); i++){ @@ -122,6 +125,8 @@ public class ChainLightning extends Spell { List tertiaryTargets = WizardryUtilities.getEntitiesWithinRadius(seekerRange, secondaryTarget.posX, secondaryTarget.posY + secondaryTarget.height / 2, secondaryTarget.posZ, world); + + tertiaryTargets.removeIf(e -> e instanceof EntityArmorStand); for(int j = 0; j < Math.min(tertiaryTargets.size(), 2); j++){ diff --git a/src/main/java/electroblob/wizardry/spell/CurseOfSoulbinding.java b/src/main/java/electroblob/wizardry/spell/CurseOfSoulbinding.java index ea20c059..e2494bce 100644 --- a/src/main/java/electroblob/wizardry/spell/CurseOfSoulbinding.java +++ b/src/main/java/electroblob/wizardry/spell/CurseOfSoulbinding.java @@ -39,7 +39,7 @@ public class CurseOfSoulbinding extends Spell { 10 * modifiers.get(WizardryItems.range_upgrade)); if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase && WizardData.get(caster) != null){ + && WizardryUtilities.isLiving(rayTrace.entityHit) && WizardData.get(caster) != null){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; if(!WizardData.get(caster).soulbind(target)) return false; } diff --git a/src/main/java/electroblob/wizardry/spell/Entrapment.java b/src/main/java/electroblob/wizardry/spell/Entrapment.java index 5569ccd3..0f5e11a9 100644 --- a/src/main/java/electroblob/wizardry/spell/Entrapment.java +++ b/src/main/java/electroblob/wizardry/spell/Entrapment.java @@ -36,8 +36,7 @@ public class Entrapment extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase entity = (EntityLivingBase)rayTrace.entityHit; if(!world.isRemote){ entity.attackEntityFrom(MagicDamage.causeDirectMagicDamage(caster, DamageType.MAGIC), diff --git a/src/main/java/electroblob/wizardry/spell/Firestorm.java b/src/main/java/electroblob/wizardry/spell/Firestorm.java index fdb6a686..4717aab2 100644 --- a/src/main/java/electroblob/wizardry/spell/Firestorm.java +++ b/src/main/java/electroblob/wizardry/spell/Firestorm.java @@ -37,8 +37,8 @@ public class Firestorm extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + // Fire can damage armour stands. + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && rayTrace.entityHit instanceof EntityLivingBase){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/FlameRay.java b/src/main/java/electroblob/wizardry/spell/FlameRay.java index 5fbad7dc..f2384b74 100644 --- a/src/main/java/electroblob/wizardry/spell/FlameRay.java +++ b/src/main/java/electroblob/wizardry/spell/FlameRay.java @@ -36,8 +36,8 @@ public class FlameRay extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + // Fire can damage armour stands + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && rayTrace.entityHit instanceof EntityLivingBase){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Freeze.java b/src/main/java/electroblob/wizardry/spell/Freeze.java index 67335b87..500d5c79 100644 --- a/src/main/java/electroblob/wizardry/spell/Freeze.java +++ b/src/main/java/electroblob/wizardry/spell/Freeze.java @@ -42,8 +42,7 @@ public class Freeze extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/FrostRay.java b/src/main/java/electroblob/wizardry/spell/FrostRay.java index b41cf4ac..b7b3d942 100644 --- a/src/main/java/electroblob/wizardry/spell/FrostRay.java +++ b/src/main/java/electroblob/wizardry/spell/FrostRay.java @@ -39,8 +39,7 @@ public class FrostRay extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/HealAlly.java b/src/main/java/electroblob/wizardry/spell/HealAlly.java index cb4c13c9..9f824bfb 100644 --- a/src/main/java/electroblob/wizardry/spell/HealAlly.java +++ b/src/main/java/electroblob/wizardry/spell/HealAlly.java @@ -28,7 +28,7 @@ public class HealAlly extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade), 8.0f); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; if(target.getHealth() < target.getMaxHealth()){ target.heal((int)(5 * modifiers.get(SpellModifiers.DAMAGE))); diff --git a/src/main/java/electroblob/wizardry/spell/Ignite.java b/src/main/java/electroblob/wizardry/spell/Ignite.java index 4919a001..bb5f8705 100644 --- a/src/main/java/electroblob/wizardry/spell/Ignite.java +++ b/src/main/java/electroblob/wizardry/spell/Ignite.java @@ -35,8 +35,8 @@ public class Ignite extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + // Fire can damage armour stands + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && rayTrace.entityHit instanceof EntityLivingBase){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/LifeDrain.java b/src/main/java/electroblob/wizardry/spell/LifeDrain.java index d9119f95..818cc010 100644 --- a/src/main/java/electroblob/wizardry/spell/LifeDrain.java +++ b/src/main/java/electroblob/wizardry/spell/LifeDrain.java @@ -34,8 +34,7 @@ public class LifeDrain extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/LightningRay.java b/src/main/java/electroblob/wizardry/spell/LightningRay.java index ad767f02..ced7a07c 100644 --- a/src/main/java/electroblob/wizardry/spell/LightningRay.java +++ b/src/main/java/electroblob/wizardry/spell/LightningRay.java @@ -34,8 +34,7 @@ public class LightningRay extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade), 2.0f); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ Entity target = rayTrace.entityHit; if(!world.isRemote){ // This statement means the arc only spawns every other tick. diff --git a/src/main/java/electroblob/wizardry/spell/LightningWeb.java b/src/main/java/electroblob/wizardry/spell/LightningWeb.java index 1c024e9d..3a86a31f 100644 --- a/src/main/java/electroblob/wizardry/spell/LightningWeb.java +++ b/src/main/java/electroblob/wizardry/spell/LightningWeb.java @@ -35,8 +35,7 @@ public class LightningWeb extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade), 2.0f); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ Entity target = rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Metamorphosis.java b/src/main/java/electroblob/wizardry/spell/Metamorphosis.java index 074f6e8a..dc366994 100644 --- a/src/main/java/electroblob/wizardry/spell/Metamorphosis.java +++ b/src/main/java/electroblob/wizardry/spell/Metamorphosis.java @@ -11,7 +11,6 @@ import electroblob.wizardry.util.WizardryParticleType; import electroblob.wizardry.util.WizardryUtilities; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityCaveSpider; import net.minecraft.entity.monster.EntityMagmaCube; import net.minecraft.entity.monster.EntityPigZombie; @@ -45,7 +44,7 @@ public class Metamorphosis extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ Entity entityHit = rayTrace.entityHit; double xPos = entityHit.posX; diff --git a/src/main/java/electroblob/wizardry/spell/MindControl.java b/src/main/java/electroblob/wizardry/spell/MindControl.java index b3c9c9aa..75bd8139 100644 --- a/src/main/java/electroblob/wizardry/spell/MindControl.java +++ b/src/main/java/electroblob/wizardry/spell/MindControl.java @@ -18,6 +18,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.INpc; import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.nbt.NBTTagCompound; @@ -50,7 +51,7 @@ public class MindControl extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 8 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; @@ -165,6 +166,7 @@ public class MindControl extends Spell { target.posX, target.posY, target.posZ, world); possibleTargets.remove(target); + possibleTargets.removeIf(e -> e instanceof EntityArmorStand); EntityLivingBase newAITarget = null; diff --git a/src/main/java/electroblob/wizardry/spell/MindTrick.java b/src/main/java/electroblob/wizardry/spell/MindTrick.java index 5c7641ea..0fb465b4 100644 --- a/src/main/java/electroblob/wizardry/spell/MindTrick.java +++ b/src/main/java/electroblob/wizardry/spell/MindTrick.java @@ -37,7 +37,7 @@ public class MindTrick extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 8 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Poison.java b/src/main/java/electroblob/wizardry/spell/Poison.java index a16308fd..e804876f 100644 --- a/src/main/java/electroblob/wizardry/spell/Poison.java +++ b/src/main/java/electroblob/wizardry/spell/Poison.java @@ -37,8 +37,7 @@ public class Poison extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; // Has no effect on undead or spiders. if(MagicDamage.isEntityImmune(DamageType.POISON, target)){ diff --git a/src/main/java/electroblob/wizardry/spell/Slime.java b/src/main/java/electroblob/wizardry/spell/Slime.java index 801db4f4..64347beb 100644 --- a/src/main/java/electroblob/wizardry/spell/Slime.java +++ b/src/main/java/electroblob/wizardry/spell/Slime.java @@ -39,7 +39,7 @@ public class Slime extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 8 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.entityHit != null && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.entityHit != null && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Whirlwind.java b/src/main/java/electroblob/wizardry/spell/Whirlwind.java index 3a1b3741..f264447a 100644 --- a/src/main/java/electroblob/wizardry/spell/Whirlwind.java +++ b/src/main/java/electroblob/wizardry/spell/Whirlwind.java @@ -30,6 +30,7 @@ public class Whirlwind extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); + // Left as EntityLivingBase because why not be able to move armour stands around? if(rayTrace != null && rayTrace.entityHit instanceof EntityLivingBase){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/spell/Wither.java b/src/main/java/electroblob/wizardry/spell/Wither.java index 18a36f7c..039514b6 100644 --- a/src/main/java/electroblob/wizardry/spell/Wither.java +++ b/src/main/java/electroblob/wizardry/spell/Wither.java @@ -37,8 +37,7 @@ public class Wither extends Spell { RayTraceResult rayTrace = WizardryUtilities.standardEntityRayTrace(world, caster, 10 * modifiers.get(WizardryItems.range_upgrade)); - if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY - && rayTrace.entityHit instanceof EntityLivingBase){ + if(rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.ENTITY && WizardryUtilities.isLiving(rayTrace.entityHit)){ EntityLivingBase target = (EntityLivingBase)rayTrace.entityHit; diff --git a/src/main/java/electroblob/wizardry/util/WizardryUtilities.java b/src/main/java/electroblob/wizardry/util/WizardryUtilities.java index c0526b15..1b0a3484 100644 --- a/src/main/java/electroblob/wizardry/util/WizardryUtilities.java +++ b/src/main/java/electroblob/wizardry/util/WizardryUtilities.java @@ -30,6 +30,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; @@ -485,6 +486,19 @@ public final class WizardryUtilities { public static boolean isPlayerOp(EntityPlayer player, MinecraftServer server){ return server.getPlayerList().getOppedPlayers().getEntry(player.getGameProfile()) != null; } + + /** + * Returns true if the given entity is an EntityLivingBase and not an armour stand; makes the code a bit neater. + * This was added because armour stands are a subclass of EntityLivingBase, but shouldn't necessarily be treated + * as living entities - this depends on the situation. The given entity can safely be cast to EntityLivingBase + * if this method returns true. + */ + // In my opinion, it's a bad design choice to have armour stands extend EntityLivingBase directly - it would be + // better to make a parent class which is extended by both armour stands and EntityLivingBase and contains only + // the code required by both. + public static boolean isLiving(Entity entity){ + return entity instanceof EntityLivingBase && !(entity instanceof EntityArmorStand); + } /** * Turns the given creeper into a charged creeper. In 1.10, this requires reflection since the DataManager keys are