diff --git a/patches/minecraft/net/minecraft/client/entity/EntityOtherPlayerMP.java.patch b/patches/minecraft/net/minecraft/client/entity/EntityOtherPlayerMP.java.patch index 0447131640..2876e2214a 100644 --- a/patches/minecraft/net/minecraft/client/entity/EntityOtherPlayerMP.java.patch +++ b/patches/minecraft/net/minecraft/client/entity/EntityOtherPlayerMP.java.patch @@ -4,7 +4,7 @@ public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_) { -+ net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_); ++ net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, p_70097_1_, p_70097_2_); return true; } diff --git a/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch b/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch index eafdab10a9..58e3d59425 100644 --- a/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch +++ b/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch @@ -4,7 +4,7 @@ public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_) { -+ net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_); ++ net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, p_70097_1_, p_70097_2_); return false; } diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch index db69ae0200..395f839893 100644 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch @@ -202,7 +202,7 @@ public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_) { -+ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_)) return false; ++ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, p_70097_1_, p_70097_2_)) return false; if (this.func_180431_b(p_70097_1_)) { return false; diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 5301c48886..dce44e181a 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -567,6 +567,11 @@ public class ForgeHooks } public static boolean onLivingAttack(EntityLivingBase entity, DamageSource src, float amount) + { + return entity instanceof EntityPlayer || !MinecraftForge.EVENT_BUS.post(new LivingAttackEvent(entity, src, amount)); + } + + public static boolean onPlayerAttack(EntityLivingBase entity, DamageSource src, float amount) { return !MinecraftForge.EVENT_BUS.post(new LivingAttackEvent(entity, src, amount)); } diff --git a/src/test/java/net/minecraftforge/debug/LivingAttackEventTest.java b/src/test/java/net/minecraftforge/debug/LivingAttackEventTest.java new file mode 100644 index 0000000000..5481af29a0 --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/LivingAttackEventTest.java @@ -0,0 +1,33 @@ +package net.minecraftforge.debug; + +import net.minecraft.util.DamageSource; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Mod(modid = LivingAttackEventTest.MODID, name = LivingAttackEventTest.NAME, version = "1.0.0", acceptableRemoteVersions = "*") +public class LivingAttackEventTest +{ + + public static final String MODID = "livingattackeventtest"; + public static final String NAME = "LivingAttackEventTest"; + private static final Logger LOGGER = LogManager.getLogger(NAME); + + @EventBusSubscriber + public static class LivingAttackEventHandler + { + + @SubscribeEvent + public static void onLivingAttack(LivingAttackEvent event) + { + if (event.getSource() == DamageSource.ANVIL) + { + LOGGER.info("{} was hit by an anvil!", event.getEntityLiving().getName()); + } + } + } +} \ No newline at end of file