diff --git a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch index b6d10bf364..3dfe65e823 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch @@ -21,7 +21,7 @@ boolean m_32534_(Player p_32535_) { ItemStack itemstack = p_32535_.m_150109_().f_35975_.get(3); - if (itemstack.m_150930_(Blocks.f_50143_.m_5456_())) { -+ if (itemstack.isEnderMask(p_32535_, this)) { ++ if (net.minecraftforge.common.ForgeHooks.shouldSuppressEnderManAnger(this, p_32535_, itemstack)) { return false; } else { Vec3 vec3 = p_32535_.m_20252_(1.0F).m_82541_(); diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 059ebded34..d955c50e7f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.Map.Entry; import java.util.Optional; @@ -57,6 +56,7 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.DefaultAttributes; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.item.*; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeType; @@ -133,6 +133,7 @@ import net.minecraftforge.event.entity.EntityAttributeModificationEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityTravelToDimensionEvent; import net.minecraftforge.event.entity.item.ItemTossEvent; +import net.minecraftforge.event.entity.living.EnderManAngerEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDamageEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; @@ -1479,4 +1480,9 @@ public class ForgeHooks } } + public static boolean shouldSuppressEnderManAnger(EnderMan enderMan, Player player, ItemStack mask) + { + return mask.isEnderMask(player, enderMan) || MinecraftForge.EVENT_BUS.post(new EnderManAngerEvent(enderMan, player)); + } + } diff --git a/src/main/java/net/minecraftforge/event/entity/living/EnderManAngerEvent.java b/src/main/java/net/minecraftforge/event/entity/living/EnderManAngerEvent.java new file mode 100644 index 0000000000..df2e63432b --- /dev/null +++ b/src/main/java/net/minecraftforge/event/entity/living/EnderManAngerEvent.java @@ -0,0 +1,45 @@ +/* + * Minecraft Forge - Forge Development LLC + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.minecraftforge.event.entity.living; + +import net.minecraft.world.entity.monster.EnderMan; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.eventbus.api.Cancelable; + +/** + * This event is fired on the forge bus before an Enderman detects that a player is looking at them. + * It will not be fired if the detection is already prevented by {@link IForgeItem#isEnderMask} + *
+ * This event is {@link Cancelable}. + * If this event is canceled, the Enderman will not target the player. + *
+ * This event does not have a {@link Result}. + */ +@Cancelable +public class EnderManAngerEvent extends LivingEvent +{ + private final Player player; + + public EnderManAngerEvent(EnderMan enderman, Player player) + { + super(enderman); + this.player = player; + } + + /** + * The player that is being checked. + */ + public Player getPlayer() + { + return player; + } + + @Override + public EnderMan getEntity() + { + return (EnderMan) super.getEntity(); + } +}