/** * Saves all existing chests to the data folder. * * @return the number of successfully written chests */ public int save() { int savedChests = 0; dataFolder.mkdirs(); Iterator<Entry<UUID, Inventory>> chestIterator = chests.entrySet().iterator(); while (chestIterator.hasNext()) { final Entry<UUID, Inventory> entry = chestIterator.next(); final UUID playerUUID = entry.getKey(); final Inventory chest = entry.getValue(); final File chestFile = new File(dataFolder, playerUUID.toString() + YAML_CHEST_EXTENSION); if (chest == null) { // Chest got removed, so we have to delete the file. chestFile.delete(); chestIterator.remove(); } else { try { // Write the chest file in YAML format InventoryIO.saveToYaml(chest, chestFile); savedChests++; } catch (IOException e) { logger.log(Level.WARNING, "Couldn't save chest file: " + chestFile.getName(), e); } } } return savedChests; }
/** Loads all existing chests from the data folder. */ private void load() { dataFolder.mkdirs(); FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(YAML_CHEST_EXTENSION); } }; for (File chestFile : dataFolder.listFiles(filter)) { String chestFileName = chestFile.getName(); try { try { UUID playerUUID = UUID.fromString( chestFileName.substring(0, chestFileName.length() - YAML_EXTENSION_LENGTH)); chests.put(playerUUID, InventoryIO.loadFromYaml(chestFile)); } catch (IllegalArgumentException e) { // Assume that the filename isn't a UUID, and is therefore an old player-name chest String playerName = chestFileName.substring(0, chestFileName.length() - YAML_EXTENSION_LENGTH); boolean flagPlayerNotFound = true; for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { // Search all the known players, load inventory, flag old file for deletion if (player.getName().equalsIgnoreCase(playerName)) { flagPlayerNotFound = false; chests.put(player.getUniqueId(), InventoryIO.loadFromYaml(chestFile)); chestFile.deleteOnExit(); } } if (flagPlayerNotFound) { logger.log(Level.WARNING, "Couldn't load chest file: " + chestFileName); } } } catch (Exception e) { logger.log(Level.WARNING, "Couldn't load chest file: " + chestFileName); } } logger.info("Loaded " + chests.size() + " chests"); }
/** * Saves a specified player's chest to the data folder. * * @param playerUUID the UUID of the player to save the chest of */ public void saveChest(UUID playerUUID) { dataFolder.mkdirs(); final String uuidString = playerUUID.toString(); final Inventory chest = chests.get(playerUUID); final File chestFile = new File(dataFolder, uuidString + YAML_CHEST_EXTENSION); if (chest == null) { // Chest got removed, so we have to delete the file. chestFile.delete(); } else { try { // Write the chest file in YAML format InventoryIO.saveToYaml(chest, chestFile); } catch (IOException e) { logger.log(Level.WARNING, "Couldn't save chest file: " + chestFile.getName(), e); } } }