diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index 3cec953..3898b07 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -93,52 +93,61 @@ public class PlayerVaults extends JavaPlugin { } public static void debug(String s, long start) { - long elapsed = System.currentTimeMillis() - start; - if (DEBUG || elapsed > 4) { - Bukkit.getLogger().log(Level.INFO, "At {0}. Time since start: {1}ms", new Object[]{s, (elapsed)}); + if (DEBUG) { + instance.getLogger().log(Level.INFO, "{0} took {1}ms", new Object[]{s, (System.currentTimeMillis() - start)}); } } public static void debug(String s) { if (DEBUG) { - Bukkit.getLogger().log(Level.INFO, s); + instance.getLogger().log(Level.INFO, s); } } @Override public void onEnable() { instance = this; + long start = System.currentTimeMillis(); + long time = System.currentTimeMillis(); loadConfig(); DEBUG = getConf().isDebug(); - debug("config", System.currentTimeMillis()); + debug("config", time); + time = System.currentTimeMillis(); uuidData = new File(this.getDataFolder(), "uuidvaults"); vaultData = new File(this.getDataFolder(), "base64vaults"); - debug("vaultdata", System.currentTimeMillis()); + debug("vaultdata", time); + time = System.currentTimeMillis(); getServer().getScheduler().runTask(this, new UUIDConversion()); // Convert to UUIDs first. Class checks if necessary. - debug("uuid conversion", System.currentTimeMillis()); + debug("uuid conversion", time); + time = System.currentTimeMillis(); new VaultManager(); getServer().getScheduler().runTask(this, new Base64Conversion()); - debug("base64 conversion", System.currentTimeMillis()); + debug("base64 conversion", time); + time = System.currentTimeMillis(); loadLang(); - debug("lang", System.currentTimeMillis()); + debug("lang", time); + time = System.currentTimeMillis(); new UUIDVaultManager(); - debug("uuidvaultmanager", System.currentTimeMillis()); + debug("uuidvaultmanager", time); + time = System.currentTimeMillis(); getServer().getPluginManager().registerEvents(new Listeners(this), this); getServer().getPluginManager().registerEvents(new VaultPreloadListener(), this); getServer().getPluginManager().registerEvents(new SignListener(this), this); - debug("registering listeners", System.currentTimeMillis()); + debug("registering listeners", time); + time = System.currentTimeMillis(); this.backupsEnabled = this.getConf().getStorage().getFlatFile().isBackups(); this.maxVaultAmountPermTest = this.getConf().getMaxVaultAmountPermTest(); loadSigns(); - debug("loaded signs", System.currentTimeMillis()); - debug("check update", System.currentTimeMillis()); + debug("loaded signs", time); + time = System.currentTimeMillis(); getCommand("pv").setExecutor(new VaultCommand()); getCommand("pvdel").setExecutor(new DeleteCommand()); getCommand("pvconvert").setExecutor(new ConvertCommand()); getCommand("pvsign").setExecutor(new SignCommand()); - debug("registered commands", System.currentTimeMillis()); + debug("registered commands", time); + time = System.currentTimeMillis(); useVault = setupEconomy(); - debug("setup economy", System.currentTimeMillis()); + debug("setup economy", time); if (getConf().getPurge().isEnabled()) { getServer().getScheduler().runTaskAsynchronously(this, new Cleanup(getConf().getPurge().getDaysSinceLastEdit())); @@ -223,7 +232,7 @@ public class PlayerVaults extends JavaPlugin { return map; }); - debug("enable done", System.currentTimeMillis()); + this.getLogger().info("Loaded! Took " + (System.currentTimeMillis() - start) + "ms"); } private void metricsLine(String name, Callable callable) { @@ -525,7 +534,7 @@ public class PlayerVaults extends JavaPlugin { public int getDefaultVaultRows() { int def = this.config.getDefaultVaultRows(); - return (def >= 1 && def <=6) ? def : 6; + return (def >= 1 && def <= 6) ? def : 6; } public int getDefaultVaultSize() { diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/Base64Serialization.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/Base64Serialization.java index 7e6fd2d..81daee3 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/Base64Serialization.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/Base64Serialization.java @@ -29,6 +29,7 @@ import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.util.logging.Level; /** * Created by Lax on 6/6/2017. @@ -36,6 +37,10 @@ import java.io.ByteArrayOutputStream; public class Base64Serialization { public static String toBase64(Inventory inventory, int size) { + return toBase64(inventory, size, null); + } + + public static String toBase64(Inventory inventory, int size, String target) { try { ByteArrayOutputStream finalOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream temporaryOutputStream = new ByteArrayOutputStream(); @@ -62,7 +67,7 @@ public class Base64Serialization { } if (failedItems > 0) { - PlayerVaults.getInstance().getLogger().severe("Failed to save " + failedItems + " invalid items to vault"); + PlayerVaults.getInstance().getLogger().severe("Failed to save " + failedItems + " invalid items to vault " + target); } // Serialize that array @@ -80,6 +85,10 @@ public class Base64Serialization { } public static Inventory fromBase64(String data) { + return fromBase64(data, null); + } + + public static Inventory fromBase64(String data, String target) { try { ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream); @@ -91,6 +100,7 @@ public class Base64Serialization { dataInput.close(); return inventory; } catch (Exception e) { + PlayerVaults.getInstance().getLogger().log(Level.SEVERE, "Failed to load vault " + target, e); } return null; } diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 94e6652..904dd0c 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -63,13 +63,13 @@ public class VaultManager { * Saves the inventory to the specified player and vault number. * * @param inventory The inventory to be saved. - * @param target The player of whose file to save to. - * @param number The vault number. + * @param target The player of whose file to save to. + * @param number The vault number. */ public void saveVault(Inventory inventory, String target, int number) { YamlConfiguration yaml = getPlayerVaultFile(target, true); int size = VaultOperations.getMaxVaultSize(target); - String serialized = Base64Serialization.toBase64(inventory, size); + String serialized = Base64Serialization.toBase64(inventory, size, target); yaml.set(String.format(VAULTKEY, number), serialized); saveFileSync(target, yaml); } @@ -85,27 +85,31 @@ public class VaultManager { size = PlayerVaults.getInstance().getDefaultVaultSize(); } + PlayerVaults.debug("Loading self vault for " + player.getName() + " (" + player.getUniqueId() + ')'); + String title = Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(number)).replace("%p", player.getName()); VaultViewInfo info = new VaultViewInfo(player.getUniqueId().toString(), number); if (PlayerVaults.getInstance().getOpenInventories().containsKey(info.toString())) { + PlayerVaults.debug("Already open"); return PlayerVaults.getInstance().getOpenInventories().get(info.toString()); } YamlConfiguration playerFile = getPlayerVaultFile(player.getUniqueId().toString(), true); VaultHolder vaultHolder = new VaultHolder(number); if (playerFile.getString(String.format(VAULTKEY, number)) == null) { + PlayerVaults.debug("No vault matching number"); Inventory inv = Bukkit.createInventory(vaultHolder, size, title); vaultHolder.setInventory(inv); return inv; } else { - return getInventory(vaultHolder, playerFile, size, number, title); + return getInventory(vaultHolder, player.getUniqueId().toString(), playerFile, size, number, title); } } /** * Load the player's vault and return it. * - * @param name The holder of the vault. + * @param name The holder of the vault. * @param number The vault number. */ public Inventory loadOtherVault(String name, int number, int size) { @@ -113,6 +117,8 @@ public class VaultManager { size = PlayerVaults.getInstance().getDefaultVaultSize(); } + PlayerVaults.debug("Loading other vault for " + name); + String holder = name; try { @@ -128,10 +134,11 @@ public class VaultManager { Inventory inv; VaultHolder vaultHolder = new VaultHolder(number); if (PlayerVaults.getInstance().getOpenInventories().containsKey(info.toString())) { + PlayerVaults.debug("Already open"); inv = PlayerVaults.getInstance().getOpenInventories().get(info.toString()); } else { YamlConfiguration playerFile = getPlayerVaultFile(holder, true); - Inventory i = getInventory(vaultHolder, playerFile, size, number, title); + Inventory i = getInventory(vaultHolder, holder, playerFile, size, number, title); if (i == null) { return null; } else { @@ -146,16 +153,17 @@ public class VaultManager { * 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. + * @param size the size of the vault. + * @param number the vault number. * @return inventory if exists, otherwise null. */ - private Inventory getInventory(InventoryHolder owner, YamlConfiguration playerFile, int size, int number, String title) { + private Inventory getInventory(InventoryHolder owner, String ownerName, YamlConfiguration playerFile, int size, int number, String title) { Inventory inventory = Bukkit.createInventory(owner, size, title); String data = playerFile.getString(String.format(VAULTKEY, number)); - Inventory deserialized = Base64Serialization.fromBase64(data); + Inventory deserialized = Base64Serialization.fromBase64(data, ownerName); if (deserialized == null) { + PlayerVaults.debug("Loaded vault as null"); return inventory; } @@ -172,6 +180,7 @@ public class VaultManager { inventory.setContents(deserialized.getContents()); } + PlayerVaults.debug("Loaded vault"); return inventory; } @@ -185,7 +194,7 @@ public class VaultManager { public Inventory getVault(String holder, int number) { YamlConfiguration playerFile = getPlayerVaultFile(holder, true); String serialized = playerFile.getString(String.format(VAULTKEY, number)); - return Base64Serialization.fromBase64(serialized); + return Base64Serialization.fromBase64(serialized, holder); } /** @@ -359,5 +368,6 @@ public class VaultManager { } catch (IOException e) { PlayerVaults.getInstance().getLogger().log(Level.SEVERE, "Failed to save vault file for: " + holder, e); } + PlayerVaults.debug("Saved vault for " + holder); } }