mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-20 07:34:48 +01:00
SPIGOT-7380: Add PlayerInteractEvent#getClickedPosition and ChiseledBookshelf#getSlot
By: Jishuna <joshl5324@gmail.com>
This commit is contained in:
parent
6b90c83282
commit
8f69d9dde3
2 changed files with 33 additions and 0 deletions
|
@ -2,6 +2,7 @@ package org.bukkit.block;
|
||||||
|
|
||||||
import org.bukkit.inventory.BlockInventoryHolder;
|
import org.bukkit.inventory.BlockInventoryHolder;
|
||||||
import org.bukkit.inventory.ChiseledBookshelfInventory;
|
import org.bukkit.inventory.ChiseledBookshelfInventory;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,4 +38,16 @@ public interface ChiseledBookshelf extends TileState, BlockInventoryHolder {
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
ChiseledBookshelfInventory getSnapshotInventory();
|
ChiseledBookshelfInventory getSnapshotInventory();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the appropriate slot based on a vector relative to this block.<br>
|
||||||
|
* Will return -1 if the given vector is not within the bounds of any slot.
|
||||||
|
* <p>
|
||||||
|
* The supplied vector should only contain components with values between 0.0
|
||||||
|
* and 1.0, inclusive.
|
||||||
|
*
|
||||||
|
* @param position a vector relative to this block
|
||||||
|
* @return the slot under the given vector or -1
|
||||||
|
*/
|
||||||
|
int getSlot(@NotNull Vector position);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.block.BlockCanBuildEvent;
|
import org.bukkit.event.block.BlockCanBuildEvent;
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@ -34,18 +35,24 @@ public class PlayerInteractEvent extends PlayerEvent implements Cancellable {
|
||||||
private Result useClickedBlock;
|
private Result useClickedBlock;
|
||||||
private Result useItemInHand;
|
private Result useItemInHand;
|
||||||
private EquipmentSlot hand;
|
private EquipmentSlot hand;
|
||||||
|
private Vector clickedPosistion;
|
||||||
|
|
||||||
public PlayerInteractEvent(@NotNull final Player who, @NotNull final Action action, @Nullable final ItemStack item, @Nullable final Block clickedBlock, @NotNull final BlockFace clickedFace) {
|
public PlayerInteractEvent(@NotNull final Player who, @NotNull final Action action, @Nullable final ItemStack item, @Nullable final Block clickedBlock, @NotNull final BlockFace clickedFace) {
|
||||||
this(who, action, item, clickedBlock, clickedFace, EquipmentSlot.HAND);
|
this(who, action, item, clickedBlock, clickedFace, EquipmentSlot.HAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerInteractEvent(@NotNull final Player who, @NotNull final Action action, @Nullable final ItemStack item, @Nullable final Block clickedBlock, @NotNull final BlockFace clickedFace, @Nullable final EquipmentSlot hand) {
|
public PlayerInteractEvent(@NotNull final Player who, @NotNull final Action action, @Nullable final ItemStack item, @Nullable final Block clickedBlock, @NotNull final BlockFace clickedFace, @Nullable final EquipmentSlot hand) {
|
||||||
|
this(who, action, item, clickedBlock, clickedFace, hand, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerInteractEvent(@NotNull final Player who, @NotNull final Action action, @Nullable final ItemStack item, @Nullable final Block clickedBlock, @NotNull final BlockFace clickedFace, @Nullable final EquipmentSlot hand, @Nullable final Vector clickedPosition) {
|
||||||
super(who);
|
super(who);
|
||||||
this.action = action;
|
this.action = action;
|
||||||
this.item = item;
|
this.item = item;
|
||||||
this.blockClicked = clickedBlock;
|
this.blockClicked = clickedBlock;
|
||||||
this.blockFace = clickedFace;
|
this.blockFace = clickedFace;
|
||||||
this.hand = hand;
|
this.hand = hand;
|
||||||
|
this.clickedPosistion = clickedPosition;
|
||||||
|
|
||||||
useItemInHand = Result.DEFAULT;
|
useItemInHand = Result.DEFAULT;
|
||||||
useClickedBlock = clickedBlock == null ? Result.DENY : Result.ALLOW;
|
useClickedBlock = clickedBlock == null ? Result.DENY : Result.ALLOW;
|
||||||
|
@ -221,6 +228,19 @@ public class PlayerInteractEvent extends PlayerEvent implements Cancellable {
|
||||||
return hand;
|
return hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the exact position on the block the player interacted with, this will
|
||||||
|
* be null outside of {@link Action#RIGHT_CLICK_BLOCK}.
|
||||||
|
* <p>
|
||||||
|
* All vector components are between 0.0 and 1.0 inclusive.
|
||||||
|
*
|
||||||
|
* @return the clicked position. May be null.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public Vector getClickedPosition() {
|
||||||
|
return clickedPosistion;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
|
|
Loading…
Reference in a new issue