Fix Inventory never being null when clicking inside an inventory (when the click happens on a player inventory slot)

This commit is contained in:
TheMode 2021-04-08 17:47:44 +02:00
parent 25176e9b9d
commit c2f302ad0e

View File

@ -397,7 +397,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
final int clickSlot = isInWindow ? slot : PlayerInventoryUtils.convertSlot(slot, offset); final int clickSlot = isInWindow ? slot : PlayerInventoryUtils.convertSlot(slot, offset);
final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot); final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot);
final InventoryClickResult clickResult = clickProcessor.leftClick(this, player, slot, clicked, cursor); final InventoryClickResult clickResult = clickProcessor.leftClick(isInWindow ? this : null, player, slot, clicked, cursor);
if (clickResult.doRefresh()) { if (clickResult.doRefresh()) {
updateFromClick(clickResult, player); updateFromClick(clickResult, player);
@ -411,7 +411,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
setCursorPlayerItem(player, clickResult.getCursor()); setCursorPlayerItem(player, clickResult.getCursor());
if (!clickResult.isCancel()) if (!clickResult.isCancel())
callClickEvent(player, this, slot, ClickType.LEFT_CLICK, clicked, cursor); callClickEvent(player, isInWindow ? this : null, slot, ClickType.LEFT_CLICK, clicked, cursor);
return !clickResult.isCancel(); return !clickResult.isCancel();
} }
@ -424,7 +424,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
final int clickSlot = isInWindow ? slot : PlayerInventoryUtils.convertSlot(slot, offset); final int clickSlot = isInWindow ? slot : PlayerInventoryUtils.convertSlot(slot, offset);
final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot); final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot);
final InventoryClickResult clickResult = clickProcessor.rightClick(this, player, slot, clicked, cursor); final InventoryClickResult clickResult = clickProcessor.rightClick(isInWindow ? this : null, player, slot, clicked, cursor);
if (clickResult.doRefresh()) { if (clickResult.doRefresh()) {
updateFromClick(clickResult, player); updateFromClick(clickResult, player);
@ -438,7 +438,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
setCursorPlayerItem(player, clickResult.getCursor()); setCursorPlayerItem(player, clickResult.getCursor());
if (!clickResult.isCancel()) if (!clickResult.isCancel())
callClickEvent(player, this, slot, ClickType.RIGHT_CLICK, clicked, cursor); callClickEvent(player, isInWindow ? this : null, slot, ClickType.RIGHT_CLICK, clicked, cursor);
return !clickResult.isCancel(); return !clickResult.isCancel();
} }
@ -470,7 +470,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
} }
})); }));
} else { } else {
clickResult = clickProcessor.shiftClick(this, player, slot, clicked, cursor, clickResult = clickProcessor.shiftClick(null, player, slot, clicked, cursor,
// Window loop // Window loop
new InventoryClickLoopHandler(0, getSize(), 1, new InventoryClickLoopHandler(0, getSize(), 1,
i -> i, i -> i,
@ -508,7 +508,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot); final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot);
final ItemStack heldItem = playerInventory.getItemStack(key); final ItemStack heldItem = playerInventory.getItemStack(key);
final InventoryClickResult clickResult = clickProcessor.changeHeld(this, player, slot, key, clicked, heldItem); final InventoryClickResult clickResult = clickProcessor.changeHeld(isInWindow ? this : null, player, slot, key, clicked, heldItem);
if (clickResult.doRefresh()) { if (clickResult.doRefresh()) {
updateFromClick(clickResult, player); updateFromClick(clickResult, player);
@ -522,7 +522,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
playerInventory.setItemStack(key, clickResult.getCursor()); playerInventory.setItemStack(key, clickResult.getCursor());
if (!clickResult.isCancel()) if (!clickResult.isCancel())
callClickEvent(player, this, slot, ClickType.CHANGE_HELD, clicked, getCursorItem(player)); callClickEvent(player, isInWindow ? this : null, slot, ClickType.CHANGE_HELD, clicked, getCursorItem(player));
// Weird synchronization issue when omitted // Weird synchronization issue when omitted
updateFromClick(clickResult, player); updateFromClick(clickResult, player);
@ -546,7 +546,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
ItemStack.getAirItem() : (isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot)); ItemStack.getAirItem() : (isInWindow ? getItemStack(slot) : playerInventory.getItemStack(clickSlot));
final ItemStack cursor = getCursorItem(player); final ItemStack cursor = getCursorItem(player);
final InventoryClickResult clickResult = clickProcessor.drop(this, player, final InventoryClickResult clickResult = clickProcessor.drop(isInWindow ? this : null, player,
mode, slot, button, clicked, cursor); mode, slot, button, clicked, cursor);
if (clickResult.doRefresh()) { if (clickResult.doRefresh()) {
@ -577,7 +577,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
ItemStack.getAirItem(); ItemStack.getAirItem();
final ItemStack cursor = getCursorItem(player); final ItemStack cursor = getCursorItem(player);
final InventoryClickResult clickResult = clickProcessor.dragging(this, player, final InventoryClickResult clickResult = clickProcessor.dragging(isInWindow ? this : null, player,
slot, button, slot, button,
clicked, cursor, clicked, cursor,
@ -609,8 +609,9 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
public boolean doubleClick(@NotNull Player player, int slot) { public boolean doubleClick(@NotNull Player player, int slot) {
final PlayerInventory playerInventory = player.getInventory(); final PlayerInventory playerInventory = player.getInventory();
final ItemStack cursor = getCursorItem(player); final ItemStack cursor = getCursorItem(player);
final boolean isInWindow = isClickInWindow(slot);
final InventoryClickResult clickResult = clickProcessor.doubleClick(this, player, slot, cursor, final InventoryClickResult clickResult = clickProcessor.doubleClick(isInWindow ? this : null, player, slot, cursor,
// Start by looping through the opened inventory // Start by looping through the opened inventory
new InventoryClickLoopHandler(0, getSize(), 1, new InventoryClickLoopHandler(0, getSize(), 1,
i -> i, i -> i,