diff --git a/pom.xml b/pom.xml
index 117613b..c8eae8c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,8 +29,8 @@
maven-compiler-plugin
2.3.2
- 1.6
- 1.6
+ 1.7
+ 1.7
@@ -56,7 +56,7 @@
org.bukkit
bukkit
- 1.5.2-R0.1
+ LATEST
net.milkbowl.vault
diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java
new file mode 100644
index 0000000..01877d7
--- /dev/null
+++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java
@@ -0,0 +1,255 @@
+package com.drtshock.playervaults.vaultmanagement;
+
+import com.drtshock.playervaults.PlayerVaults;
+import com.drtshock.playervaults.util.Lang;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Class to handle vault operations with new UUIDs.
+ */
+public class UUIDVaultManager {
+
+ private static UUIDVaultManager instance;
+
+ public UUIDVaultManager() {
+ instance = this;
+ }
+
+ private final String directory = "plugins" + File.separator + "PlayerVaults" + File.separator + "vaults";
+
+ /**
+ * Saves the inventory to the specified player and vault number.
+ *
+ * @param inventory The inventory to be saved.
+ * @param player The player of whose file to save to.
+ * @param number The vault number.
+ *
+ * @throws java.io.IOException Uh oh!
+ */
+ public void saveVault(Inventory inventory, UUID player, int number) throws IOException {
+ int size = inventory.getSize();
+ YamlConfiguration yaml = getPlayerVaultFile(player);
+ if (size == 54) {
+ yaml.set("vault" + number, null);
+ } else {
+ for (int x = 0; x < size; x++) {
+ yaml.set("vault" + number + "." + x, null);
+ }
+ }
+ List list = Serialization.toString(inventory);
+ String[] ser = list.toArray(new String[list.size()]);
+ for (int x = 0; x < ser.length; x++) {
+ if (!ser[x].equalsIgnoreCase("null")) {
+ yaml.set("vault" + number + "." + x, ser[x]);
+ }
+ }
+ saveFile(player, yaml);
+ }
+
+ /**
+ * Load the player's vault and return it.
+ *
+ * @param player The holder of the vault.
+ * @param number The vault number.
+ */
+ public Inventory loadOwnVault(Player player, int number, int size) {
+ if (size % 9 != 0) {
+ size = 54;
+ }
+ VaultViewInfo info = new VaultViewInfo(player.getUniqueId().toString(), number);
+ Inventory inv = null;
+ if (PlayerVaults.OPENINVENTORIES.containsKey(info.toString())) {
+ inv = PlayerVaults.OPENINVENTORIES.get(info.toString());
+ } else {
+ YamlConfiguration playerFile = getPlayerVaultFile(player.getUniqueId());
+ if (playerFile.getConfigurationSection("vault" + number) == null) {
+ VaultHolder vaultHolder = new VaultHolder(number);
+ if (EconomyOperations.payToCreate(player)) {
+ inv = Bukkit.createInventory(vaultHolder, size, Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(number)).replace("%p", player.getName()));
+ vaultHolder.setInventory(inv);
+ } else {
+ player.sendMessage(Lang.TITLE.toString() + Lang.INSUFFICIENT_FUNDS.toString());
+ return null;
+ }
+ } else {
+ if (getInventory(playerFile, size, number) == null) {
+ return null;
+ } else {
+ inv = getInventory(playerFile, size, number);
+ }
+ }
+ PlayerVaults.OPENINVENTORIES.put(info.toString(), inv);
+ }
+ return inv;
+ }
+
+ /**
+ * Load the player's vault and return it.
+ *
+ * @param holder The holder of the vault.
+ * @param number The vault number.
+ */
+ public Inventory loadOtherVault(UUID holder, int number, int size) {
+ if (size % 9 != 0) {
+ size = 54;
+ }
+ VaultViewInfo info = new VaultViewInfo(holder.toString(), number);
+ Inventory inv = null;
+ if (PlayerVaults.OPENINVENTORIES.containsKey(info.toString())) {
+ inv = PlayerVaults.OPENINVENTORIES.get(info.toString());
+ } else {
+ YamlConfiguration playerFile = getPlayerVaultFile(holder);
+ if (playerFile.getConfigurationSection("vault" + number) == null) {
+ return null;
+ } else {
+ if (getInventory(playerFile, size, number) == null) {
+ return null;
+ } else {
+ inv = getInventory(playerFile, size, number);
+ }
+ }
+ PlayerVaults.OPENINVENTORIES.put(info.toString(), inv);
+ }
+ return inv;
+ }
+
+ /**
+ * Get an inventory from file. Returns null if the inventory doesn't exist. SHOULD ONLY BE USED INTERNALLY
+ *
+ * @param playerFile the YamlConfiguration file.
+ * @param size the size of the vault.
+ * @param number the vault number.
+ *
+ * @return inventory if exists, otherwise null.
+ */
+ private Inventory getInventory(YamlConfiguration playerFile, int size, int number) {
+ List data = new ArrayList<>();
+ for (int x = 0; x < size; x++) {
+ String line = playerFile.getString("vault" + number + "." + x);
+ if (line != null) {
+ data.add(line);
+ } else {
+ data.add("null");
+ }
+ }
+ return Serialization.toInventory(data, number, size);
+ }
+
+ /**
+ * Gets an inventory without storing references to it. Used for dropping a players inventories on death.
+ *
+ * @param holder The holder of the vault.
+ * @param number The vault number.
+ *
+ * @return The inventory of the specified holder and vault number.
+ */
+ public Inventory getVault(UUID holder, int number) {
+ YamlConfiguration playerFile = getPlayerVaultFile(holder);
+ List data = playerFile.getStringList("vault" + number);
+ OfflinePlayer player = Bukkit.getPlayer(holder);
+ if (player == null) return null;
+ if (data == null) {
+ VaultHolder vaultHolder = new VaultHolder(number);
+ Inventory inv = Bukkit.createInventory(vaultHolder, VaultOperations.getMaxVaultSize(player), Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(number)).replace("%p", player.getName()));
+ vaultHolder.setInventory(inv);
+ return inv;
+ } else {
+ Inventory inv = Serialization.toInventory(data, number, VaultOperations.getMaxVaultSize(player));
+ return inv;
+ }
+ }
+
+ public boolean vaultExists(UUID holder, int number) {
+ YamlConfiguration playerFile = getPlayerVaultFile(holder);
+ return playerFile.contains("vault" + number);
+ }
+
+ /**
+ * Deletes a players vault.
+ *
+ * @param sender The sender of whom to send messages to.
+ * @param holder The vault holder.
+ * @param number The vault number.
+ *
+ * @throws IOException Uh oh!
+ */
+ public void deleteVault(CommandSender sender, UUID holder, int number) throws IOException {
+ String name = holder.toString();
+ File file = new File(directory + File.separator + name.toLowerCase() + ".yml");
+ if (!file.exists()) {
+ return;
+ }
+ FileConfiguration playerFile = YamlConfiguration.loadConfiguration(file);
+ if (file.exists()) {
+ playerFile.set("vault" + number, null);
+ playerFile.save(file);
+ }
+ OfflinePlayer player = Bukkit.getPlayer(holder);
+ if (player != null && sender.getName().equalsIgnoreCase(player.getName())) {
+ sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_VAULT.toString().replace("%v", String.valueOf(number)));
+ } else {
+ sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_OTHER_VAULT.toString().replace("%v", String.valueOf(number)).replaceAll("%p", player.getName()));
+ }
+ }
+
+ /**
+ * Get the holder's vault file. Create if doesn't exist.
+ *
+ * @param holder The vault holder.
+ *
+ * @return The holder's vault config file.
+ */
+ public YamlConfiguration getPlayerVaultFile(UUID holder) {
+ File folder = new File(directory);
+ if (!folder.exists()) {
+ folder.mkdir();
+ }
+ File file = new File(directory + File.separator + holder.toString() + ".yml");
+ if (!file.exists()) {
+ try {
+ file.createNewFile();
+ } catch (IOException e) {
+ // Who cares?
+ }
+ }
+ YamlConfiguration playerFile = YamlConfiguration.loadConfiguration(file);
+ return playerFile;
+ }
+
+ /**
+ * Save the players vault file.
+ *
+ * @param holder The vault holder of whose file to save.
+ * @param yaml The config to save.
+ *
+ * @throws IOException Uh oh!
+ */
+ public void saveFile(UUID holder, YamlConfiguration yaml) throws IOException {
+ File file = new File(directory + File.separator + holder.toString() + ".yml");
+ if (file.exists()) {
+ file.renameTo(new File(directory + File.separator + "backups" + File.separator + holder.toString() + ".yml"));
+ }
+ yaml.save(file);
+ }
+
+ /**
+ * Get the instance of this class.
+ *
+ * @return - instance of this class.
+ */
+ public static UUIDVaultManager getInstance() {
+ return instance;
+ }
+}
diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java
index a4d8f80..959de0a 100644
--- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java
+++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java
@@ -20,6 +20,7 @@ import com.drtshock.playervaults.PlayerVaults;
import com.drtshock.playervaults.util.Lang;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
+import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
@@ -55,7 +56,7 @@ public class VaultOperations {
*
* @return max size as integer. If no max size is set then it will default to 54.
*/
- public static int getMaxVaultSize(Player player) {
+ public static int getMaxVaultSize(OfflinePlayer player) {
if (player == null) {
return 54;
}