Finish PlayerPickItemEvent

This commit is contained in:
Nassim Jahnke 2024-12-05 10:27:55 +01:00
parent 4758f1202f
commit f4817c9013
2 changed files with 16 additions and 10 deletions

View File

@ -67,20 +67,24 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ +
+ /** + /**
+ * Returns the slot in which the item that will be put into the players hotbar is located. + * 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; + return this.sourceSlot;
+ } + }
+ +
+ /** + /**
+ * Change the source slot from which the item that will be put in the players hotbar will be taken. + * 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) { + public void setSourceSlot(final @Range(from = -1, to = 35) int sourceSlot) {
+ Preconditions.checkArgument(sourceSlot >= 0 && sourceSlot <= 35, "Source slot must be in range of the player's inventory slot"); + Preconditions.checkArgument(sourceSlot >= -1 && sourceSlot <= 35, "Source slot must be in range of the player's inventory slot");
+ this.sourceSlot = sourceSlot; + this.sourceSlot = sourceSlot;
+ } + }
+ +

View File

@ -20,19 +20,21 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ if (!event.callEvent()) { + if (!event.callEvent()) {
+ return; + return;
+ } + }
+ // Paper end - Add PlayerPickItemEvent + i = event.getSourceSlot();
if (i != -1) { if (i != -1) {
if (Inventory.isHotbarSlot(i)) { - if (Inventory.isHotbarSlot(i)) {
- playerinventory.selected = 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 { } else {
- playerinventory.pickSlot(i); - playerinventory.pickSlot(i);
+ playerinventory.pickSlot(i, event.getTargetSlot()); // Paper - Add target slot + playerinventory.pickSlot(i, event.getTargetSlot());
} }
} else if (this.player.hasInfiniteMaterials()) { } else if (this.player.hasInfiniteMaterials()) {
- playerinventory.addAndPickItem(stack); - 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)); this.player.connection.send(new ClientboundSetHeldSlotPacket(playerinventory.selected));