diff --git a/src/main/java/com/drtshock/playervaults/Listeners.java b/src/main/java/com/drtshock/playervaults/Listeners.java index d3909a0..72a3e94 100644 --- a/src/main/java/com/drtshock/playervaults/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/Listeners.java @@ -48,11 +48,14 @@ public class Listeners implements Listener { public void saveVault(Player p) { if(PlayerVaults.IN_VAULT.containsKey(p.getName())) { Inventory inv = p.getOpenInventory().getTopInventory(); - VaultViewInfo info = PlayerVaults.IN_VAULT.get(p.getName()); - try { - vm.saveVault(inv, info.getHolder(), info.getNumber()); - } catch(IOException e) { - e.printStackTrace(); + if(inv.getViewers().size() == 1) { + VaultViewInfo info = PlayerVaults.IN_VAULT.get(p.getName()); + try { + vm.saveVault(inv, info.getHolder(), info.getNumber()); + } catch(IOException e) { + e.printStackTrace(); + } + PlayerVaults.OPENINVENTORIES.remove(info.toString()); } PlayerVaults.IN_VAULT.remove(p.getName()); } diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index d10c330..6a0e723 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -10,6 +10,7 @@ import java.util.logging.Logger; import net.milkbowl.vault.economy.Economy; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.Inventory; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; @@ -31,6 +32,7 @@ public class PlayerVaults extends JavaPlugin { Commands commands; public static HashMap SET_SIGN = new HashMap(); public static HashMap IN_VAULT = new HashMap(); + public static HashMap OPENINVENTORIES = new HashMap(); public static Economy ECON = null; public static boolean DROP_ON_DEATH = false; public static int INVENTORIES_TO_DROP = 0; diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java b/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java index 456e851..3425e74 100644 --- a/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java +++ b/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java @@ -17,5 +17,9 @@ public class VaultViewInfo { public int getNumber() { return this.i; } + + public String toString() { + return this.s + " " + this.i; + } } diff --git a/src/main/java/com/drtshock/playervaults/util/VaultManager.java b/src/main/java/com/drtshock/playervaults/util/VaultManager.java index d523914..5a57f47 100644 --- a/src/main/java/com/drtshock/playervaults/util/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/util/VaultManager.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import com.drtshock.playervaults.PlayerVaults; +import com.drtshock.playervaults.commands.VaultViewInfo; public class VaultManager { @@ -51,23 +52,29 @@ public class VaultManager { * TODO: Check to see if the path exists before we get it! */ public void loadVault(Player player, String holder, int number) { + VaultViewInfo info = new VaultViewInfo(holder, number); Inventory inv = null; - YamlConfiguration playerFile = playerVaultFile(holder); - if(playerFile.getConfigurationSection("vault" + number) == null) { - inv = Bukkit.createInventory(player, 54, ChatColor.DARK_RED + "Vault #" + String.valueOf(number)); - } - else { - List data = new ArrayList(); - for(int x = 0; x < 54; x++) { - String line = playerFile.getString("vault" + number + "." + x); - if(line != null) { - data.add(line); - } - else { - data.add("null"); - } + if(PlayerVaults.OPENINVENTORIES.containsKey(info.toString())) { + inv = PlayerVaults.OPENINVENTORIES.get(info.toString()); + } else { + YamlConfiguration playerFile = playerVaultFile(holder); + if(playerFile.getConfigurationSection("vault" + number) == null) { + inv = Bukkit.createInventory(player, 54, ChatColor.DARK_RED + "Vault #" + String.valueOf(number)); } - inv = Serialization.toInventory(data, number); + else { + List data = new ArrayList(); + for(int x = 0; x < 54; x++) { + String line = playerFile.getString("vault" + number + "." + x); + if(line != null) { + data.add(line); + } + else { + data.add("null"); + } + } + inv = Serialization.toInventory(data, number); + } + PlayerVaults.OPENINVENTORIES.put(info.toString(), inv); } player.openInventory(inv); }