mirror of
https://github.com/PaperMC/Paper.git
synced 2025-07-31 04:02:06 -07:00
Add PlayerPickBlockEvent and PlayerPickEntityEvent (#12425)
Extensions of the existing PlayerPickItemEvent that allow more fine grained access to relevant context, like the picked block or the entity.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package io.papermc.paper.event.player;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
/**
|
||||
* Event that is fired when a player uses the pick item functionality on a block
|
||||
* (middle-clicking a block to get the appropriate item).
|
||||
* After the handling of this event, the contents of the source and the target slot will be swapped,
|
||||
* and the currently selected hotbar slot of the player will be set to the target slot.
|
||||
*/
|
||||
@NullMarked
|
||||
public class PlayerPickBlockEvent extends PlayerPickItemEvent {
|
||||
private final Block block;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerPickBlockEvent(final Player player, final Block block, final boolean includeData, final int targetSlot, final int sourceSlot) {
|
||||
super(player, includeData, targetSlot, sourceSlot);
|
||||
this.block = block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the block associated with this event.
|
||||
*
|
||||
* @return the block involved in the event
|
||||
*/
|
||||
public Block getBlock() {
|
||||
return this.block;
|
||||
}
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
package io.papermc.paper.event.player;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
/**
|
||||
* Event that is fired when a player uses the pick item functionality on an entity
|
||||
* (middle-clicking an entity to get the appropriate item).
|
||||
* After the handling of this event, the contents of the source and the target slot will be swapped,
|
||||
* and the currently selected hotbar slot of the player will be set to the target slot.
|
||||
*/
|
||||
@NullMarked
|
||||
public class PlayerPickEntityEvent extends PlayerPickItemEvent {
|
||||
private final Entity entity;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerPickEntityEvent(final Player player, final Entity entity, final boolean includeData, final int targetSlot, final int sourceSlot) {
|
||||
super(player, includeData, targetSlot, sourceSlot);
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the entity associated with this event.
|
||||
*
|
||||
* @return the entity involved in the event
|
||||
*/
|
||||
public Entity getEntity() {
|
||||
return this.entity;
|
||||
}
|
||||
}
|
@@ -10,27 +10,44 @@ import org.jetbrains.annotations.Range;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
/**
|
||||
* Event that is fired when a player uses the pick item functionality (middle-clicking a block or entity to get the
|
||||
* appropriate item). After the handling of this event, the contents of the source and the target slot will be swapped
|
||||
* Event that is fired when a player uses the pick item functionality
|
||||
* (middle-clicking a {@link PlayerPickBlockEvent block}
|
||||
* or {@link PlayerPickEntityEvent entity} to get the appropriate item).
|
||||
* After the handling of this event, the contents of the source and the target slot will be swapped,
|
||||
* and the currently selected hotbar slot of the player will be set to the target slot.
|
||||
*
|
||||
* @see PlayerPickEntityEvent
|
||||
* @see PlayerPickBlockEvent
|
||||
*/
|
||||
@NullMarked
|
||||
public class PlayerPickItemEvent extends PlayerEvent implements Cancellable {
|
||||
public abstract class PlayerPickItemEvent extends PlayerEvent implements Cancellable {
|
||||
|
||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
|
||||
private final boolean includeData;
|
||||
|
||||
private int targetSlot;
|
||||
private int sourceSlot;
|
||||
|
||||
private boolean cancelled;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerPickItemEvent(final Player player, final int targetSlot, final int sourceSlot) {
|
||||
protected PlayerPickItemEvent(final Player player, final boolean includeData, final int targetSlot, final int sourceSlot) {
|
||||
super(player);
|
||||
this.includeData = includeData;
|
||||
this.targetSlot = targetSlot;
|
||||
this.sourceSlot = sourceSlot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the player wants block/entity data included.
|
||||
*
|
||||
* @return {@code true} if data is included, otherwise {@code false}.
|
||||
*/
|
||||
public boolean isIncludeData() {
|
||||
return includeData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slot the item that is being picked goes into.
|
||||
*
|
||||
|
Reference in New Issue
Block a user