Fixed IncompatibleClassChangeError on inventory transactions (fixes #571)

This commit is contained in:
Intelli 2024-06-24 17:02:01 -06:00
parent 40e7f04774
commit ce8c194e0d
2 changed files with 16 additions and 15 deletions

View file

@ -80,7 +80,7 @@ public final class CraftItemListener extends Queue implements Listener {
return; return;
} }
Inventory bottomInventory = event.getView().getBottomInventory(); Inventory bottomInventory = player.getInventory();
if (bottomInventory.getType() != InventoryType.PLAYER) { if (bottomInventory.getType() != InventoryType.PLAYER) {
return; return;
} }

View file

@ -22,7 +22,6 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.inventory.BlockInventoryHolder; import org.bukkit.inventory.BlockInventoryHolder;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import net.coreprotect.CoreProtect; import net.coreprotect.CoreProtect;
@ -250,9 +249,14 @@ public final class InventoryChangeListener extends Queue implements Listener {
if (inventoryAction != InventoryAction.MOVE_TO_OTHER_INVENTORY && inventoryAction != InventoryAction.COLLECT_TO_CURSOR && inventoryAction != InventoryAction.UNKNOWN) { if (inventoryAction != InventoryAction.MOVE_TO_OTHER_INVENTORY && inventoryAction != InventoryAction.COLLECT_TO_CURSOR && inventoryAction != InventoryAction.UNKNOWN) {
// Perform this check to prevent triggering onInventoryInteractAsync when a user is just clicking items in their own inventory // Perform this check to prevent triggering onInventoryInteractAsync when a user is just clicking items in their own inventory
Inventory inventory = null; Inventory inventory = null;
try {
try { try {
inventory = event.getView().getInventory(event.getRawSlot()); inventory = event.getView().getInventory(event.getRawSlot());
} }
catch (IncompatibleClassChangeError e) {
inventory = event.getClickedInventory();
}
}
catch (Exception e) { catch (Exception e) {
return; return;
} }
@ -288,19 +292,16 @@ public final class InventoryChangeListener extends Queue implements Listener {
protected void onInventoryDragEvent(InventoryDragEvent event) { protected void onInventoryDragEvent(InventoryDragEvent event) {
boolean movedItem = false; boolean movedItem = false;
boolean enderChest = false; boolean enderChest = false;
InventoryView inventoryView = event.getView();
for (Integer slot : event.getRawSlots()) { Inventory inventory = event.getInventory();
Inventory inventory = inventoryView.getInventory(slot); if (inventory == null || inventory.equals(event.getWhoClicked().getInventory())) {
if (inventory == null) { return;
continue;
} }
InventoryHolder inventoryHolder = inventory.getHolder(); InventoryHolder inventoryHolder = inventory.getHolder();
enderChest = inventory.equals(event.getWhoClicked().getEnderChest()); enderChest = inventory.equals(event.getWhoClicked().getEnderChest());
if ((inventoryHolder != null && (inventoryHolder instanceof BlockInventoryHolder || inventoryHolder instanceof DoubleChest)) || enderChest) { if ((inventoryHolder != null && (inventoryHolder instanceof BlockInventoryHolder || inventoryHolder instanceof DoubleChest)) || enderChest) {
movedItem = true; movedItem = true;
break;
}
} }
if (!movedItem) { if (!movedItem) {