diff --git a/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch b/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch index 2dc88ed77..aa47f3240 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch +++ b/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch @@ -16,6 +16,15 @@ } protected void func_70088_a() { +@@ -188,7 +188,7 @@ + + private boolean func_70821_d(PlayerEntity p_70821_1_) { + ItemStack itemstack = p_70821_1_.field_71071_by.field_70460_b.get(3); +- if (itemstack.func_77973_b() == Blocks.field_196625_cS.func_199767_j()) { ++ if (itemstack.isEnderMask(p_70821_1_, this)) { + return false; + } else { + Vector3d vector3d = p_70821_1_.func_70676_i(1.0F).func_72432_b(); @@ -267,7 +267,9 @@ boolean flag = blockstate.func_185904_a().func_76230_c(); boolean flag1 = blockstate.func_204520_s().func_206884_a(FluidTags.field_206959_a); diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java index 63ee37e0d..16696f4e1 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Multimap; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.client.renderer.entity.model.BipedModel; import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; import net.minecraft.entity.Entity; @@ -36,6 +37,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.Attribute; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.item.ItemEntity; +import net.minecraft.entity.monster.EndermanEntity; import net.minecraft.entity.monster.piglin.PiglinTasks; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ArmorItem; @@ -814,4 +816,18 @@ public interface IForgeItem default int damageItem(ItemStack stack, int amount, T entity, Consumer onBroken) { return amount; } + + /** + * Whether this Item can be used to hide player head for enderman. + * + * @param stack the ItemStack + * @param player The player watching the enderman + * @param endermanEntity The enderman that the player look + * @return true if this Item can be used to hide player head for enderman + */ + default boolean isEnderMask(ItemStack stack, PlayerEntity player, EndermanEntity endermanEntity) + { + return stack.getItem() == Blocks.CARVED_PUMPKIN.asItem(); + } + } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java index fa670e098..9d475c88c 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java @@ -23,6 +23,7 @@ import java.util.Set; import javax.annotation.Nullable; +import net.minecraft.entity.monster.EndermanEntity; import net.minecraft.util.CachedBlockInfo; import net.minecraft.block.BlockState; import net.minecraft.enchantment.Enchantment; @@ -473,4 +474,16 @@ public interface IForgeItemStack extends ICapabilitySerializable { return getStack().getItem().makesPiglinsNeutral(getStack(), wearer); } + + /** + * Whether this Item can be used to hide player head for enderman. + * + * @param player The player watching the enderman + * @param endermanEntity The enderman that the player look + * @return true if this Item can be used. + */ + default boolean isEnderMask(PlayerEntity player, EndermanEntity endermanEntity) + { + return getStack().getItem().isEnderMask(getStack(), player, endermanEntity); + } } diff --git a/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java b/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java new file mode 100644 index 000000000..618ef48b6 --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java @@ -0,0 +1,36 @@ +package net.minecraftforge.debug.item; + +import net.minecraft.entity.monster.EndermanEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.*; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + +@Mod(EnderMaskTest.MODID) +public class EnderMaskTest +{ + public static final String MODID = "ender_mask_test"; + public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); + + public static RegistryObject ender_mask = ITEMS.register("ender_mask", () -> + new ArmorItem(ArmorMaterial.LEATHER, EquipmentSlotType.HEAD, (new Item.Properties().group(ItemGroup.MISC))) + { + @Override + public boolean isEnderMask(ItemStack stack, PlayerEntity player, EndermanEntity endermanEntity) + { + return player.experienceLevel > 10; + } + } + ); + + public EnderMaskTest() + { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + ITEMS.register(modEventBus); + } +} diff --git a/src/test/resources/META-INF/mods.toml b/src/test/resources/META-INF/mods.toml index e6b720cd4..b65f3fdba 100644 --- a/src/test/resources/META-INF/mods.toml +++ b/src/test/resources/META-INF/mods.toml @@ -67,4 +67,6 @@ loaderVersion="[28,)" [[mods]] modId="deferred_registry_test" [[mods]] - modId="create_entity_classification_test" \ No newline at end of file + modId="create_entity_classification_test" +[[mods]] + modId="ender_mask_test" \ No newline at end of file