mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 03:17:36 +01:00
Add PlayerPickItemEvent
This commit is contained in:
parent
59b3c1470e
commit
12f2768389
@ -0,0 +1,95 @@
|
||||
package io.papermc.paper.event.player;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.player.PlayerEvent;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
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
|
||||
* and the currently selected hotbar slot of the player will be set to the target slot.
|
||||
*/
|
||||
@NullMarked
|
||||
public class PlayerPickItemEvent extends PlayerEvent implements Cancellable {
|
||||
|
||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
|
||||
private int targetSlot;
|
||||
private int sourceSlot;
|
||||
|
||||
private boolean cancelled;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerPickItemEvent(final Player player, final int targetSlot, final int sourceSlot) {
|
||||
super(player);
|
||||
this.targetSlot = targetSlot;
|
||||
this.sourceSlot = sourceSlot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slot the item that is being picked goes into.
|
||||
*
|
||||
* @return hotbar slot (0-8 inclusive)
|
||||
*/
|
||||
public @Range(from = 0, to = 8) int getTargetSlot() {
|
||||
return this.targetSlot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the slot the item that is being picked goes into.
|
||||
*
|
||||
* @param targetSlot hotbar slot (0-8 inclusive)
|
||||
*/
|
||||
public void setTargetSlot(final @Range(from = 0, to = 8) int targetSlot) {
|
||||
Preconditions.checkArgument(targetSlot >= 0 && targetSlot <= 8, "Target slot must be in range 0 - 8 (inclusive)");
|
||||
this.targetSlot = targetSlot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slot in which the item that will be put into the players hotbar is located.
|
||||
* <p>
|
||||
* Returns {@code -1} if the item is not in the player's inventory.
|
||||
* If this is the case and the player is in creative mode, the item will be spawned in.
|
||||
*
|
||||
* @return player inventory slot (0-35 inclusive, or {@code -1} if not in the player inventory)
|
||||
*/
|
||||
public @Range(from = -1, to = 35) int getSourceSlot() {
|
||||
return this.sourceSlot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the source slot from which the item that will be put in the players hotbar will be taken.
|
||||
* <p>
|
||||
* If set to {@code -1} and the player is in creative mode, the item will be spawned in.
|
||||
*
|
||||
* @param sourceSlot player inventory slot (0-35 inclusive, or {@code -1} if not in the player inventory)
|
||||
*/
|
||||
public void setSourceSlot(final @Range(from = -1, to = 35) int sourceSlot) {
|
||||
Preconditions.checkArgument(sourceSlot >= -1 && sourceSlot <= 35, "Source slot must be in range of the player's inventory slot, or -1");
|
||||
this.sourceSlot = sourceSlot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return this.cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(final boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return HANDLER_LIST;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLER_LIST;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user