From 920a4398e1e27bf0251ecef464d1f382a8e6eb6c Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Mon, 21 May 2018 13:51:39 -0700 Subject: [PATCH] Safely handle cancelled inventory open events on vaults by checking if inventory is null AFTER it's opened. Resolves #354 --- .../playervaults/vaultmanagement/VaultManager.java | 1 - .../playervaults/vaultmanagement/VaultOperations.java | 11 +++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 64d4981..db5efd9 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -78,7 +78,6 @@ public class VaultManager { inv = i; } } - PlayerVaults.getInstance().getOpenInventories().put(info.toString(), inv); return inv; } diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index 5f3c4f2..5e4894e 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -140,7 +140,18 @@ public class VaultOperations { PlayerVaults.debug(String.format("Failed to open null vault %d for %s. This is weird.", number, player.getName())); return false; } + player.openInventory(inv); + + // Check if the inventory was actually opened + if (player.getOpenInventory().getTopInventory() == null) { + PlayerVaults.debug(String.format("Cancelled opening vault %s for %s from an outside source.", arg, player.getName())); + return false; // inventory open event was cancelled. + } + + VaultViewInfo info = new VaultViewInfo(player.getUniqueId(), number); + PlayerVaults.getInstance().getOpenInventories().put(info.toString(), inv); + player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_VAULT.toString().replace("%v", arg)); return true; } else {