aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNassim Jahnke <[email protected]>2024-12-05 10:27:55 +0100
committerNassim Jahnke <[email protected]>2024-12-05 10:27:55 +0100
commitf4817c90130aae971830820e1b518567f22b723c (patch)
treef7307115a18e41a0decc4315dab4e08ffdd505ef
parent4758f1202f701bdba5d77f84552372b710f69f65 (diff)
downloadPaper-f4817c90130aae971830820e1b518567f22b723c.tar.gz
Paper-f4817c90130aae971830820e1b518567f22b723c.zip
Finish PlayerPickItemEvent
-rw-r--r--patches/api/Add-PlayerPickItemEvent.patch14
-rw-r--r--patches/server/Add-PlayerPickItemEvent.patch12
2 files changed, 16 insertions, 10 deletions
diff --git a/patches/api/Add-PlayerPickItemEvent.patch b/patches/api/Add-PlayerPickItemEvent.patch
index 893aad1821..f516720cec 100644
--- a/patches/api/Add-PlayerPickItemEvent.patch
+++ b/patches/api/Add-PlayerPickItemEvent.patch
@@ -67,20 +67,24 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+
+ /**
+ * 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 and should be spawned in if in creative mode.
+ *
-+ * @return player inventory slot (0-35 inclusive)
++ * @return player inventory slot (0-35 inclusive, or {@code -1} not taken from the inventory)
+ */
-+ public @Range(from = 0, to = 35) int getSourceSlot() {
++ 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)
++ * @param sourceSlot player inventory slot (0-35 inclusive, or {@code -1} not taken from the inventory)
+ */
-+ public void setSourceSlot(final @Range(from = 0, to = 35) int sourceSlot) {
-+ Preconditions.checkArgument(sourceSlot >= 0 && sourceSlot <= 35, "Source slot must be in range of the player's inventory slot");
++ 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");
+ this.sourceSlot = sourceSlot;
+ }
+
diff --git a/patches/server/Add-PlayerPickItemEvent.patch b/patches/server/Add-PlayerPickItemEvent.patch
index c13e60ced6..5aaa2ea84b 100644
--- a/patches/server/Add-PlayerPickItemEvent.patch
+++ b/patches/server/Add-PlayerPickItemEvent.patch
@@ -20,19 +20,21 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ if (!event.callEvent()) {
+ return;
+ }
-+ // Paper end - Add PlayerPickItemEvent
++ i = event.getSourceSlot();
if (i != -1) {
- if (Inventory.isHotbarSlot(i)) {
+- if (Inventory.isHotbarSlot(i)) {
- playerinventory.selected = i;
-+ playerinventory.selected = event.getTargetSlot(); // Paper - Add target slot
++ if (Inventory.isHotbarSlot(i) && Inventory.isHotbarSlot(event.getTargetSlot())) {
++ playerinventory.selected = event.getTargetSlot();
} else {
- playerinventory.pickSlot(i);
-+ playerinventory.pickSlot(i, event.getTargetSlot()); // Paper - Add target slot
++ playerinventory.pickSlot(i, event.getTargetSlot());
}
} else if (this.player.hasInfiniteMaterials()) {
- playerinventory.addAndPickItem(stack);
-+ playerinventory.addAndPickItem(stack, event.getTargetSlot()); // Paper - Add target slot
++ playerinventory.addAndPickItem(stack, event.getTargetSlot());
++ // Paper end - Add PlayerPickItemEvent
}
this.player.connection.send(new ClientboundSetHeldSlotPacket(playerinventory.selected));