This commit is contained in:
Pedro 2024-04-29 16:38:37 +08:00 committed by GitHub
commit f6bd9169d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,50 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Doc <nachito94@msn.com>
Date: Sun, 9 Oct 2022 11:58:38 -0300
Subject: [PATCH] Support for results of ItemStacks in CraftItemEvent
diff --git a/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java b/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java
index cab13877fb38c361f18ce9a433e98fea689c9722..87351dd3a122c5af7b85a48497eeadcebf88b8d1 100644
--- a/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java
+++ b/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java
@@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class CraftItemEvent extends InventoryClickEvent {
private Recipe recipe;
+ private java.util.Collection<org.bukkit.inventory.ItemStack> itemResults; // Paper
public CraftItemEvent(@NotNull Recipe recipe, @NotNull InventoryView what, @NotNull SlotType type, int slot, @NotNull ClickType click, @NotNull InventoryAction action) {
super(what, type, slot, click, action);
@@ -22,6 +23,31 @@ public class CraftItemEvent extends InventoryClickEvent {
this.recipe = recipe;
}
+ // Paper start - add more data in CraftItemEvent
+ public CraftItemEvent(@NotNull Recipe recipe, @NotNull InventoryView what, @NotNull SlotType type, int slot, @NotNull ClickType click, @NotNull InventoryAction action, @NotNull java.util.List<org.bukkit.inventory.ItemStack> itemResults) {
+ super(what, type, slot, click, action);
+ this.recipe = recipe;
+ this.itemResults = java.util.Collections.unmodifiableList(itemResults);
+ }
+
+ public CraftItemEvent(@NotNull Recipe recipe, @NotNull InventoryView what, @NotNull SlotType type, int slot, @NotNull ClickType click, @NotNull InventoryAction action, int key, @NotNull java.util.List<org.bukkit.inventory.ItemStack> itemResults) {
+ super(what, type, slot, click, action, key);
+ this.recipe = recipe;
+ this.itemResults = java.util.Collections.unmodifiableList(itemResults);
+ }
+
+ /**
+ * @return An unmodifiable list of items resulting from the craft.
+ */
+ @NotNull
+ public java.util.@org.jetbrains.annotations.Unmodifiable Collection<org.bukkit.inventory.ItemStack> getItemResults() {
+ if (this.itemResults == null) {
+ return java.util.Collections.singletonList(recipe.getResult());
+ }
+ return this.itemResults;
+ }
+ // Paper end
+
/**
* @return A copy of the current recipe on the crafting matrix.
*/

View File

@ -0,0 +1,46 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Doc <nachito94@msn.com>
Date: Sun, 9 Oct 2022 12:00:56 -0300
Subject: [PATCH] Support for results of ItemStacks in CraftItemEvent
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 63c9040ed2349eec500ba6e9090440347c514a3b..807aa6bccbfa62e84202ba12b1c5ffd58c79e862 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3280,12 +3280,32 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
org.bukkit.inventory.Inventory top = inventory.getTopInventory();
if (packet.getSlotNum() == 0 && top instanceof CraftingInventory) {
org.bukkit.inventory.Recipe recipe = ((CraftingInventory) top).getRecipe();
- if (recipe != null) {
+ // Paper start - add more data to CraftItemEvent
+ org.bukkit.inventory.ItemStack baseResult = (((CraftingInventory) top).getResult() == null) ? null : ((CraftingInventory) top).getResult().clone();
+ if (recipe != null && baseResult != null) {
+ List<org.bukkit.inventory.ItemStack> results = new java.util.ArrayList<>();
+ int itemResultCount = baseResult.getAmount();
+ if (packet.getClickType() == net.minecraft.world.inventory.ClickType.QUICK_MOVE && action == InventoryAction.MOVE_TO_OTHER_INVENTORY) {
+ for (itemstack = this.player.containerMenu.quickMoveStack(this.player, packet.getSlotNum()); !itemstack.isEmpty() && ItemStack.isSame(this.player.containerMenu.slots.get(packet.getSlotNum()).getItem(), itemstack); itemstack = this.player.containerMenu.quickMoveStack(player, packet.getSlotNum())) {
+ if (this.player.containerMenu.slots.get(packet.getSlotNum()).mayPickup(this.player) && (this.player.getInventory().getSlotWithRemainingSpace(this.player.containerMenu.slots.get(packet.getSlotNum()).getItem()) != -1 || this.player.getInventory().getFreeSlot() != -1)) {
+ itemResultCount += itemstack.getCount();
+ }
+ }
+ }
+ int remainResults = itemResultCount;
+ while(remainResults > 0) {
+ int resultAmount = Math.min(baseResult.getMaxStackSize(), remainResults);
+ remainResults -= resultAmount;
+ org.bukkit.inventory.ItemStack result = baseResult.clone();
+ result.setAmount(resultAmount);
+ results.add(result);
+ }
if (click == ClickType.NUMBER_KEY) {
- event = new CraftItemEvent(recipe, inventory, type, packet.getSlotNum(), click, action, packet.getButtonNum());
+ event = new CraftItemEvent(recipe, inventory, type, packet.getSlotNum(), click, action, packet.getButtonNum(), results);
} else {
- event = new CraftItemEvent(recipe, inventory, type, packet.getSlotNum(), click, action);
+ event = new CraftItemEvent(recipe, inventory, type, packet.getSlotNum(), click, action, results);
}
+ // Paper end
}
}