Merge pull request #270 from BentoBoxWorld/fix-outside-closing-inventory

Fixed clicking outside of inventory closing even vanilla inventories
This commit is contained in:
Florian CUNY 2018-09-08 19:55:03 +02:00 committed by GitHub
commit 13bc945b40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 25 deletions

View File

@ -24,18 +24,19 @@ public class PanelListenerManager implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onInventoryClick(InventoryClickEvent event) { public void onInventoryClick(InventoryClickEvent event) {
// Close inventory if clicked outside and if setting is true
if (BentoBox.getInstance().getSettings().isClosePanelOnClickOutside() && event.getSlotType().equals(SlotType.OUTSIDE)) {
event.getWhoClicked().closeInventory();
return;
}
User user = User.getInstance(event.getWhoClicked()); // The player that clicked the item User user = User.getInstance(event.getWhoClicked()); // The player that clicked the item
Inventory inventory = event.getInventory(); // The inventory that was Inventory inventory = event.getInventory(); // The inventory that was clicked on
// Open the inventory panel that this player has open (they can only ever have one) // Open the inventory panel that this player has open (they can only ever have one)
if (openPanels.containsKey(user.getUniqueId())) { if (openPanels.containsKey(user.getUniqueId())) {
// Check the name of the panel // Check the name of the panel
if (inventory.getName().equals(openPanels.get(user.getUniqueId()).getInventory().getName())) { if (inventory.getName().equals(openPanels.get(user.getUniqueId()).getInventory().getName())) {
// Cancel the event. If they don't want it to be canceled then the click handler(s) should uncancel it // Close inventory if clicked outside and if setting is true
if (BentoBox.getInstance().getSettings().isClosePanelOnClickOutside() && event.getSlotType().equals(SlotType.OUTSIDE)) {
event.getWhoClicked().closeInventory();
return;
}
// Cancel the event. If they don't want it to be cancelled then the click handler(s) should uncancel it
event.setCancelled(true); event.setCancelled(true);
// Get the panel itself // Get the panel itself
Panel panel = openPanels.get(user.getUniqueId()); Panel panel = openPanels.get(user.getUniqueId());
@ -67,9 +68,7 @@ public class PanelListenerManager implements Listener {
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void onLogOut(PlayerQuitEvent event) { public void onLogOut(PlayerQuitEvent event) {
if (openPanels.containsKey(event.getPlayer().getUniqueId())) { openPanels.remove(event.getPlayer().getUniqueId());
openPanels.remove(event.getPlayer().getUniqueId());
}
} }
/** /**

View File

@ -114,14 +114,26 @@ public class PanelListenerManagerTest {
// Clear the static panels // Clear the static panels
PanelListenerManager.getOpenPanels().clear(); PanelListenerManager.getOpenPanels().clear();
} }
/** /**
* Test method for {@link world.bentobox.bentobox.listeners.PanelListenerManager#onInventoryClick(org.bukkit.event.inventory.InventoryClickEvent)}. * Test method for {@link world.bentobox.bentobox.listeners.PanelListenerManager#onInventoryClick(org.bukkit.event.inventory.InventoryClickEvent)}.
*/ */
@Test @Test
public void testOnInventoryClickOutside() { public void testOnInventoryClickOutsideUnknownPanel() {
SlotType type = SlotType.OUTSIDE;
InventoryClickEvent e = new InventoryClickEvent(view, type, 0, click, inv);
plm.onInventoryClick(e);
Mockito.verify(player, Mockito.never()).closeInventory();
}
/**
* Test method for {@link world.bentobox.bentobox.listeners.PanelListenerManager#onInventoryClick(org.bukkit.event.inventory.InventoryClickEvent)}.
*/
@Test
public void testOnInventoryClickOutsideKnownPanel() {
// Put a panel in the list
PanelListenerManager.getOpenPanels().put(uuid, panel);
SlotType type = SlotType.OUTSIDE; SlotType type = SlotType.OUTSIDE;
InventoryClickEvent e = new InventoryClickEvent(view, type, 0, click, inv); InventoryClickEvent e = new InventoryClickEvent(view, type, 0, click, inv);
plm.onInventoryClick(e); plm.onInventoryClick(e);
@ -211,7 +223,7 @@ public class PanelListenerManagerTest {
*/ */
@Test @Test
public void testOnLogOut() { public void testOnLogOut() {
// Add a panel for player // Add a panel for player
PanelListenerManager.getOpenPanels().put(uuid, panel); PanelListenerManager.getOpenPanels().put(uuid, panel);
// Unknown player logs out // Unknown player logs out