From 7ee4a44c75eb4e9eee31d981daf3a899a28827bf Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 3 Jun 2024 12:33:53 -0700 Subject: [PATCH] Fire EntityInteractSpecific on server side. Closes #9984 --- .../network/ServerGamePacketListenerImpl.java.patch | 9 +++++++++ src/main/java/net/minecraftforge/common/ForgeHooks.java | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 0a8cef6694..b5c6af5259 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -37,6 +37,15 @@ PlayerChatMessage playerchatmessage1 = playerchatmessage.withUnsignedContent(component).filter(p_296589_.mask()); this.broadcastChatMessage(playerchatmessage1); }); +@@ -1516,7 +_,7 @@ + + @Override + public void onInteraction(InteractionHand p_143682_, Vec3 p_143683_) { +- this.performInteraction(p_143682_, (p_143686_, p_143687_, p_143688_) -> p_143687_.interactAt(p_143686_, p_143683_, p_143688_)); ++ this.performInteraction(p_143682_, (p_143686_, p_143687_, p_143688_) -> net.minecraftforge.common.ForgeHooks.onInteractEntityAt(p_143687_, p_143686_, p_143683_, p_143688_)); + } + + @Override @@ -1797,6 +_,7 @@ @Override diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 7be934c8a4..6886364f4f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -255,6 +255,13 @@ public final class ForgeHooks { return (MinecraftForge.EVENT_BUS.post(event) ? 0 : event.getAmount()); } + public static InteractionResult onInteractEntityAt(Entity entity, Player player, Vec3 vec3d, InteractionHand hand) { + var ret = ForgeEventFactory.onEntityInteractSpecific(player, entity, hand, vec3d); + if (ret.isCanceled()) + return ret.getCancellationResult(); + return entity.interactAt(player, vec3d, hand); + } + public static int getLootingLevel(Entity target, @Nullable Entity killer, @Nullable DamageSource cause) { int looting = 0; if (killer instanceof LivingEntity living)