Add EnderManAngerEvent to make it possible to prevent endermen getting angry at a player based on more then their helmet. (#8406)

This commit is contained in:
Minecraftschurli authored and GitHub committed 2022-04-08 10:14:50 -07:00
1 parent 796cb29904
commit 1e6845669c
3 files changed
+53 -2

No files matched your search

@@ -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_();
@@ -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));
}
}
@@ -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}
* <p>
* This event is {@link Cancelable}.
* If this event is canceled, the Enderman will not target the player.
* <p>
* 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();
}
}