Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 11:00:06 +01:00
d219fd642f
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 6bff9d09 #508: Add PlayerBucketFishEvent CraftBukkit Changes: a8d7c94a5 SPIGOT-6434: Smithing Table and Anvil inventories .getType() returns CRAFTING c5494d195 #683: Add PlayerBucketFishEvent
60 Zeilen
3.9 KiB
Diff
60 Zeilen
3.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Matthew Miller <mnmiller1@me.com>
|
|
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/PlayerInteractManager.java b/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
|
index d0a4b5cc21d40f17ed85cc174797e2705d7a0dc3..4203081692d2e4c43abc47aeb85f42b09acb7eee 100644
|
|
--- a/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
|
+++ b/src/main/java/net/minecraft/server/level/PlayerInteractManager.java
|
|
@@ -495,7 +495,7 @@ public class PlayerInteractManager {
|
|
cancelledBlock = true;
|
|
}
|
|
|
|
- PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityplayer, Action.RIGHT_CLICK_BLOCK, blockposition, movingobjectpositionblock.getDirection(), itemstack, cancelledBlock, enumhand);
|
|
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityplayer, Action.RIGHT_CLICK_BLOCK, blockposition, movingobjectpositionblock.getDirection(), itemstack, cancelledBlock, enumhand, movingobjectpositionblock.getPos()); // Paper
|
|
firedInteract = true;
|
|
interactResult = event.useItemInHand() == Event.Result.DENY;
|
|
interactPosition = blockposition.immutableCopy();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index b7287868c26bc023c423b8ecbdf28ea99b3d1716..08b3adcd1ab8c8872a40b2faecc95471c3236292 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -69,7 +69,9 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParameters;
|
|
import net.minecraft.world.phys.MovingObjectPosition;
|
|
import net.minecraft.world.phys.MovingObjectPositionBlock;
|
|
import net.minecraft.world.phys.MovingObjectPositionEntity;
|
|
+import net.minecraft.world.phys.Vec3D;
|
|
import org.bukkit.Bukkit;
|
|
+import org.bukkit.Location; // Paper
|
|
import org.bukkit.Material;
|
|
import org.bukkit.NamespacedKey;
|
|
import org.bukkit.Server;
|
|
@@ -483,7 +485,13 @@ public class CraftEventFactory {
|
|
return callPlayerInteractEvent(who, action, position, direction, itemstack, false, hand);
|
|
}
|
|
|
|
+ // Paper start - Add interactionPoint
|
|
public static PlayerInteractEvent callPlayerInteractEvent(EntityHuman who, Action action, BlockPosition position, EnumDirection direction, ItemStack itemstack, boolean cancelledBlock, EnumHand hand) {
|
|
+ return callPlayerInteractEvent(who, action, position, direction, itemstack, cancelledBlock, hand, null);
|
|
+ }
|
|
+
|
|
+ public static PlayerInteractEvent callPlayerInteractEvent(EntityHuman who, Action action, BlockPosition position, EnumDirection direction, ItemStack itemstack, boolean cancelledBlock, EnumHand hand, Vec3D hitVec) {
|
|
+ // Paper end
|
|
Player player = (who == null) ? null : (Player) who.getBukkitEntity();
|
|
CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack);
|
|
|
|
@@ -509,7 +517,10 @@ public class CraftEventFactory {
|
|
itemInHand = null;
|
|
}
|
|
|
|
- PlayerInteractEvent event = new PlayerInteractEvent(player, action, itemInHand, blockClicked, blockFace, (hand == null) ? null : ((hand == EnumHand.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 == EnumHand.OFF_HAND) ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND), interactionPoint);
|
|
+ // Paper end
|
|
if (cancelledBlock) {
|
|
event.setUseInteractedBlock(Event.Result.DENY);
|
|
}
|