2021-06-11 12:02:28 +00:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2021-09-20 09:30:04 +00:00
|
|
|
From: Madeline Miller <mnmiller1@me.com>
|
2021-06-11 12:02:28 +00:00
|
|
|
Date: Mon, 4 Jan 2021 16:40:27 +1000
|
|
|
|
Subject: [PATCH] Implement API to expose exact interaction point
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
2022-06-08 07:30:41 +00:00
|
|
|
index 32c78828b0c85949832dc25843c881b8eecc63d6..06e7a8b8227260c002a88119544b99a11eec8a09 100644
|
2021-06-11 12:02:28 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
2022-06-08 07:30:41 +00:00
|
|
|
@@ -507,7 +507,7 @@ public class ServerPlayerGameMode {
|
2021-06-11 12:02:28 +00:00
|
|
|
cancelledBlock = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
- PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(player, Action.RIGHT_CLICK_BLOCK, blockposition, hitResult.getDirection(), stack, cancelledBlock, hand);
|
|
|
|
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(player, Action.RIGHT_CLICK_BLOCK, blockposition, hitResult.getDirection(), stack, cancelledBlock, hand, hitResult.getLocation()); // Paper
|
2021-06-14 19:17:47 +00:00
|
|
|
this.firedInteract = true;
|
|
|
|
this.interactResult = event.useItemInHand() == Event.Result.DENY;
|
|
|
|
this.interactPosition = blockposition.immutable();
|
2021-06-11 12:02:28 +00:00
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
2022-06-10 14:11:41 +00:00
|
|
|
index f89228c0c38c4acc299248e7d9639442eedca08b..a45ed570a7bf1becbc91c97c3890e99c0e5ebc0c 100644
|
2021-06-11 12:02:28 +00:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
2021-09-01 12:03:36 +00:00
|
|
|
@@ -56,7 +56,9 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
|
2021-06-11 12:02:28 +00:00
|
|
|
import net.minecraft.world.phys.BlockHitResult;
|
|
|
|
import net.minecraft.world.phys.EntityHitResult;
|
|
|
|
import net.minecraft.world.phys.HitResult;
|
|
|
|
+import net.minecraft.world.phys.Vec3;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
+import org.bukkit.Location; // Paper
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.NamespacedKey;
|
|
|
|
import org.bukkit.Server;
|
2022-02-12 13:20:33 +00:00
|
|
|
@@ -483,7 +485,13 @@ public class CraftEventFactory {
|
2021-06-14 19:17:47 +00:00
|
|
|
return CraftEventFactory.callPlayerInteractEvent(who, action, position, direction, itemstack, false, hand);
|
2021-06-11 12:02:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start - Add interactionPoint
|
|
|
|
public static PlayerInteractEvent callPlayerInteractEvent(net.minecraft.world.entity.player.Player who, Action action, BlockPos position, Direction direction, ItemStack itemstack, boolean cancelledBlock, InteractionHand hand) {
|
|
|
|
+ return callPlayerInteractEvent(who, action, position, direction, itemstack, cancelledBlock, hand, null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static PlayerInteractEvent callPlayerInteractEvent(net.minecraft.world.entity.player.Player who, Action action, BlockPos position, Direction direction, ItemStack itemstack, boolean cancelledBlock, InteractionHand hand, Vec3 hitVec) {
|
|
|
|
+ // Paper end
|
|
|
|
Player player = (who == null) ? null : (Player) who.getBukkitEntity();
|
|
|
|
CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack);
|
|
|
|
|
2022-02-12 13:20:33 +00:00
|
|
|
@@ -509,7 +517,10 @@ public class CraftEventFactory {
|
2021-06-11 12:02:28 +00:00
|
|
|
itemInHand = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
- PlayerInteractEvent event = new PlayerInteractEvent(player, action, itemInHand, blockClicked, blockFace, (hand == null) ? null : ((hand == InteractionHand.OFF_HAND) ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND));
|
|
|
|
+ // Paper start
|
|
|
|
+ Location interactionPoint = hitVec == null ? null : new Location(craftWorld, hitVec.x, hitVec.y, hitVec.z);
|
|
|
|
+ PlayerInteractEvent event = new PlayerInteractEvent(player, action, itemInHand, blockClicked, blockFace, (hand == null) ? null : ((hand == InteractionHand.OFF_HAND) ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND), interactionPoint);
|
|
|
|
+ // Paper end
|
|
|
|
if (cancelledBlock) {
|
|
|
|
event.setUseInteractedBlock(Event.Result.DENY);
|
|
|
|
}
|