From 82a35617bd898febb7866452a6775d7f20f6ce16 Mon Sep 17 00:00:00 2001 From: drtshock Date: Fri, 11 Oct 2013 15:44:31 -0500 Subject: [PATCH] Add configurable vault sizes. Recoded PR 17 to optimize permission checks and put things in correct classes. Updated to version 3.4.0-SNAPSHOT --- pom.xml | 2 +- .../drtshock/playervaults/PlayerVaults.java | 7 +-- .../playervaults/commands/Commands.java | 12 +++-- .../playervaults/commands/SignSetInfo.java | 9 +++- .../{ => listeners}/Listeners.java | 11 ++-- .../playervaults/util/DropOnDeath.java | 5 +- .../Serialization.java | 13 ++--- .../VaultHolder.java | 2 +- .../VaultManager.java | 23 ++++---- .../VaultOperations.java | 52 ++++++++++++++----- .../VaultViewInfo.java | 10 ++-- 11 files changed, 97 insertions(+), 49 deletions(-) rename src/main/java/com/drtshock/playervaults/{ => listeners}/Listeners.java (96%) rename src/main/java/com/drtshock/playervaults/{util => vaultmanagement}/Serialization.java (94%) rename src/main/java/com/drtshock/playervaults/{util => vaultmanagement}/VaultHolder.java (95%) rename src/main/java/com/drtshock/playervaults/{util => vaultmanagement}/VaultManager.java (90%) rename src/main/java/com/drtshock/playervaults/{commands => vaultmanagement}/VaultOperations.java (85%) rename src/main/java/com/drtshock/playervaults/{commands => vaultmanagement}/VaultViewInfo.java (85%) diff --git a/pom.xml b/pom.xml index 098ff16..92a71a9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.drtshock PlayerVaults - 3.3.2 + 3.4.0-SNAPSHOT PlayerVaults http://dev.bukkit.org/server-mods/playervaults/ diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index 48e9dc7..e544d35 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -1,14 +1,15 @@ package com.drtshock.playervaults; +import com.drtshock.playervaults.listeners.Listeners; import com.drtshock.playervaults.commands.Commands; import com.drtshock.playervaults.commands.SignSetInfo; -import com.drtshock.playervaults.commands.VaultViewInfo; +import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; import com.drtshock.playervaults.util.Lang; import com.drtshock.playervaults.util.Metrics; import com.drtshock.playervaults.util.Updater; import com.drtshock.playervaults.util.Updater.UpdateResult; import com.drtshock.playervaults.util.Updater.UpdateType; -import com.drtshock.playervaults.util.VaultManager; +import com.drtshock.playervaults.vaultmanagement.VaultManager; import java.io.File; import java.io.FileOutputStream; @@ -111,7 +112,7 @@ public class PlayerVaults extends JavaPlugin { if (getConfig().getBoolean("check-update")) { final PlayerVaults plugin = this; final File file = this.getFile(); - final Updater.UpdateType updateType = (getConfig().getBoolean("download-update") ? UpdateType.DEFAULT : UpdateType.NO_DOWNLOAD); + final Updater.UpdateType updateType = (getConfig().getBoolean("download-update", false) ? UpdateType.DEFAULT : UpdateType.NO_DOWNLOAD); getServer().getScheduler().runTaskAsynchronously(this, new Runnable() { @Override public void run() { diff --git a/src/main/java/com/drtshock/playervaults/commands/Commands.java b/src/main/java/com/drtshock/playervaults/commands/Commands.java index eb66ed4..ba19b8b 100644 --- a/src/main/java/com/drtshock/playervaults/commands/Commands.java +++ b/src/main/java/com/drtshock/playervaults/commands/Commands.java @@ -1,5 +1,7 @@ package com.drtshock.playervaults.commands; +import com.drtshock.playervaults.vaultmanagement.VaultOperations; +import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; import com.drtshock.playervaults.PlayerVaults; import com.drtshock.playervaults.util.Lang; @@ -18,18 +20,22 @@ public class Commands implements CommandExecutor { Player p = (Player) sender; switch (args.length) { case 1: - if (VaultOperations.openOwnVault(p, args[0])) + if (VaultOperations.openOwnVault(p, args[0])) { PlayerVaults.IN_VAULT.put(sender.getName(), new VaultViewInfo(sender.getName(), Integer.parseInt(args[0]))); + } break; case 2: - if (VaultOperations.openOtherVault(p, args[0], args[1])) + if (VaultOperations.openOtherVault(p, args[0], args[1])) { PlayerVaults.IN_VAULT.put(sender.getName(), new VaultViewInfo(args[0], Integer.parseInt(args[1]))); + } break; default: sender.sendMessage(Lang.TITLE + "/pv "); sender.sendMessage(Lang.TITLE + "/pv "); } - } else sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); + } else { + sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); + } } else if (cmd.getName().equalsIgnoreCase("pvdel")) { switch (args.length) { case 1: diff --git a/src/main/java/com/drtshock/playervaults/commands/SignSetInfo.java b/src/main/java/com/drtshock/playervaults/commands/SignSetInfo.java index a156555..a873bc8 100644 --- a/src/main/java/com/drtshock/playervaults/commands/SignSetInfo.java +++ b/src/main/java/com/drtshock/playervaults/commands/SignSetInfo.java @@ -12,6 +12,7 @@ public class SignSetInfo { /** * Construct a SignSetInfo object for another person. + * * @param s The vault owner. * @param i The vault number. */ @@ -22,6 +23,7 @@ public class SignSetInfo { /** * Construct a SignSetInfo object for opening to self. + * * @param i The vault number. */ public SignSetInfo(int i) { @@ -30,7 +32,9 @@ public class SignSetInfo { } /** - * Get whether or not the sign will open their own vault or another person's. + * Get whether or not the sign will open their own vault or another + * person's. + * * @return Whether or not it is a 'self' sign. */ public boolean isSelf() { @@ -39,6 +43,7 @@ public class SignSetInfo { /** * Get the owner of the vault. + * * @return The owner of the vault. */ public String getOwner() { @@ -47,10 +52,10 @@ public class SignSetInfo { /** * Get the vault number. + * * @return The vault number. */ public int getChest() { return this.number; } - } diff --git a/src/main/java/com/drtshock/playervaults/Listeners.java b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java similarity index 96% rename from src/main/java/com/drtshock/playervaults/Listeners.java rename to src/main/java/com/drtshock/playervaults/listeners/Listeners.java index 9048094..f6408a7 100644 --- a/src/main/java/com/drtshock/playervaults/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java @@ -1,10 +1,11 @@ -package com.drtshock.playervaults; +package com.drtshock.playervaults.listeners; -import com.drtshock.playervaults.commands.VaultOperations; -import com.drtshock.playervaults.commands.VaultViewInfo; +import com.drtshock.playervaults.PlayerVaults; +import com.drtshock.playervaults.vaultmanagement.VaultOperations; +import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; import com.drtshock.playervaults.util.DropOnDeath; import com.drtshock.playervaults.util.Lang; -import com.drtshock.playervaults.util.VaultManager; +import com.drtshock.playervaults.vaultmanagement.VaultManager; import java.io.IOException; @@ -168,7 +169,7 @@ public class Listeners implements Listener { if (!self) { owner = PlayerVaults.SIGNS.getString(world + ";;" + x + ";;" + y + ";;" + z + ".owner"); } - Inventory inv = PlayerVaults.VM.loadVault((self) ? player.getName() : owner, num); + Inventory inv = PlayerVaults.VM.loadVault((self) ? player.getName() : owner, num, VaultOperations.getMaxVaultSize(player)); player.openInventory(inv); PlayerVaults.IN_VAULT.put(player.getName(), new VaultViewInfo((self) ? player.getName() : owner, num)); event.setCancelled(true); diff --git a/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java b/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java index 9aa8529..286835c 100644 --- a/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java +++ b/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java @@ -8,12 +8,14 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; /** - * A class that contains a method to drop the contents of a player's vault when they die. + * A class that contains a method to drop the contents of a player's vault when + * they die. */ public class DropOnDeath { /** * Drops all items when a player dies. + * * @param player The player to drop the inventory of. */ public static void drop(Player player) { @@ -26,5 +28,4 @@ public class DropOnDeath { } } } - } diff --git a/src/main/java/com/drtshock/playervaults/util/Serialization.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java similarity index 94% rename from src/main/java/com/drtshock/playervaults/util/Serialization.java rename to src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java index ba69336..50e4897 100644 --- a/src/main/java/com/drtshock/playervaults/util/Serialization.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java @@ -1,4 +1,4 @@ -package com.drtshock.playervaults.util; +package com.drtshock.playervaults.vaultmanagement; import java.util.ArrayList; import java.util.HashMap; @@ -19,6 +19,7 @@ import org.json.JSONObject; /** * Fancy JSON serialization mostly by evilmidget38. + * * @author evilmidget38, gomeow * */ @@ -71,9 +72,9 @@ public class Serialization { return result; } - public static Inventory toInventory(List stringItems, int number) { + public static Inventory toInventory(List stringItems, int number, int size) { VaultHolder holder = new VaultHolder(number); - Inventory inv = Bukkit.createInventory(holder, 54, ChatColor.RED + "Vault #" + number); + Inventory inv = Bukkit.createInventory(holder, size, ChatColor.RED + "Vault #" + number); holder.setInventory(inv); List contents = new ArrayList(); for (String piece : stringItems) { @@ -89,8 +90,9 @@ public class Serialization { } } ItemStack[] items = new ItemStack[contents.size()]; - for (int x = 0; x < contents.size(); x++) + for (int x = 0; x < contents.size(); x++) { items[x] = contents.get(x); + } inv.setContents(items); return inv; } @@ -123,5 +125,4 @@ public class Serialization { } return ConfigurationSerialization.deserializeObject(map); } - -} +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/util/VaultHolder.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultHolder.java similarity index 95% rename from src/main/java/com/drtshock/playervaults/util/VaultHolder.java rename to src/main/java/com/drtshock/playervaults/vaultmanagement/VaultHolder.java index 3f2a0a0..9dfe264 100644 --- a/src/main/java/com/drtshock/playervaults/util/VaultHolder.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultHolder.java @@ -1,4 +1,4 @@ -package com.drtshock.playervaults.util; +package com.drtshock.playervaults.vaultmanagement; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; diff --git a/src/main/java/com/drtshock/playervaults/util/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java similarity index 90% rename from src/main/java/com/drtshock/playervaults/util/VaultManager.java rename to src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 0f612ed..30afdf4 100644 --- a/src/main/java/com/drtshock/playervaults/util/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -1,7 +1,7 @@ -package com.drtshock.playervaults.util; +package com.drtshock.playervaults.vaultmanagement; import com.drtshock.playervaults.PlayerVaults; -import com.drtshock.playervaults.commands.VaultViewInfo; +import com.drtshock.playervaults.util.Lang; import java.io.File; import java.io.IOException; @@ -42,7 +42,7 @@ public class VaultManager { if (size == 54) { yaml.set("vault" + number, null); } else { - for (int x = 0; x < 27; x++) { + for (int x = 0; x < size; x++) { yaml.set("vault" + number + "." + x, null); } } @@ -62,7 +62,10 @@ public class VaultManager { * @param holder The holder of the vault. * @param number The vault number. */ - public Inventory loadVault(String holder, int number) { + public Inventory loadVault(String holder, int number, int size) { + if (size % 9 != 0) { + size = 54; + } VaultViewInfo info = new VaultViewInfo(holder, number); Inventory inv = null; if (PlayerVaults.OPENINVENTORIES.containsKey(info.toString())) { @@ -71,11 +74,11 @@ public class VaultManager { YamlConfiguration playerFile = getPlayerVaultFile(holder); if (playerFile.getConfigurationSection("vault" + number) == null) { VaultHolder vaultHolder = new VaultHolder(number); - inv = Bukkit.createInventory(vaultHolder, 54, ChatColor.DARK_RED + "Vault #" + String.valueOf(number)); + inv = Bukkit.createInventory(vaultHolder, size, ChatColor.DARK_RED + "Vault #" + number); vaultHolder.setInventory(inv); } else { List data = new ArrayList(); - for (int x = 0; x < 54; x++) { + for (int x = 0; x < size; x++) { String line = playerFile.getString("vault" + number + "." + x); if (line != null) { data.add(line); @@ -83,7 +86,7 @@ public class VaultManager { data.add("null"); } } - inv = Serialization.toInventory(data, number); + inv = Serialization.toInventory(data, number, size); } PlayerVaults.OPENINVENTORIES.put(info.toString(), inv); } @@ -103,11 +106,11 @@ public class VaultManager { List data = playerFile.getStringList("vault" + number); if (data == null) { VaultHolder vaultHolder = new VaultHolder(number); - Inventory inv = Bukkit.createInventory(vaultHolder, 54, ChatColor.GREEN + "Vault #" + String.valueOf(number)); + Inventory inv = Bukkit.createInventory(vaultHolder, VaultOperations.getMaxVaultSize(Bukkit.getPlayerExact(holder)), ChatColor.DARK_RED + "Vault #" + number); vaultHolder.setInventory(inv); return inv; } else { - Inventory inv = Serialization.toInventory(data, number); + Inventory inv = Serialization.toInventory(data, number, VaultOperations.getMaxVaultSize(Bukkit.getPlayerExact(holder))); return inv; } } @@ -177,4 +180,4 @@ public class VaultManager { } yaml.save(file); } -} +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java similarity index 85% rename from src/main/java/com/drtshock/playervaults/commands/VaultOperations.java rename to src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index 1a553fa..f39ee18 100644 --- a/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -1,12 +1,12 @@ -package com.drtshock.playervaults.commands; +package com.drtshock.playervaults.vaultmanagement; import com.drtshock.playervaults.PlayerVaults; -import static com.drtshock.playervaults.PlayerVaults.LOG; import com.drtshock.playervaults.util.EconomyOperations; import com.drtshock.playervaults.util.Lang; import java.io.IOException; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,21 +15,44 @@ import org.bukkit.inventory.Inventory; public class VaultOperations { /** - * Check whether or not the player has permission to open the requested vault. + * Check whether or not the player has permission to open the requested + * vault. + * * @param sender The person to check. * @param number The vault number. * @return Whether or not they have permission. */ public static boolean checkPerms(CommandSender sender, int number) { - if (sender.hasPermission("playervaults.amount." + String.valueOf(number))) return true; + if (sender.hasPermission("playervaults.amount." + String.valueOf(number))) { + return true; + } for (int x = number; x <= 99; x++) { - if (sender.hasPermission("playervaults.amount." + String.valueOf(x))) return true; + if (sender.hasPermission("playervaults.amount." + String.valueOf(x))) { + return true; + } } return false; } + /** + * Get the max size vault a player is allowed to have. + * + * @param player that is having his permissions checked. + * @return max size as integer. If no max size is set then it will default + * to 54. + */ + public static int getMaxVaultSize(Player player) { + for (int i = 6; i != 0; i--) { + if (player.hasPermission("playervaults.size." + i)) { + return i * 9; + } + } + return 54; + } + /** * Open a player's own vault. + * * @param player The player to open to. * @param arg The vault number to open. * @return Whether or not the player was allowed to open it. @@ -39,8 +62,9 @@ public class VaultOperations { int number; try { number = Integer.parseInt(arg); - if (number == 0) + if (number == 0) { return false; + } } catch (NumberFormatException nfe) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); return false; @@ -48,7 +72,7 @@ public class VaultOperations { if (checkPerms(player, number)) { if (EconomyOperations.payToOpen(player, number)) { PlayerVaults.LOG.info(String.valueOf(player.hasPermission("playervaults.small"))); - Inventory inv = PlayerVaults.VM.loadVault(player.getName(), number); + Inventory inv = PlayerVaults.VM.loadVault(player.getName(), number, getMaxVaultSize(player)); player.openInventory(inv); player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_VAULT.toString().replace("%v", arg)); return true; @@ -67,6 +91,7 @@ public class VaultOperations { /** * Open another player's vault. + * * @param player The player to open to. * @param holder The user to whom the requested vault belongs. * @param arg The vault number to open. @@ -78,12 +103,13 @@ public class VaultOperations { int number = 0; try { number = Integer.parseInt(arg); - if (number == 0) + if (number == 0) { return false; + } } catch (NumberFormatException nfe) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); } - Inventory inv = PlayerVaults.VM.loadVault(holder, number); + Inventory inv = PlayerVaults.VM.loadVault(holder, number, getMaxVaultSize(Bukkit.getPlayerExact(holder))); player.openInventory(inv); player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_OTHER_VAULT.toString().replace("%v", arg).replace("%p", holder)); return true; @@ -98,6 +124,7 @@ public class VaultOperations { /** * Delete a player's own vault. + * * @param player The player to delete. * @param arg The vault number to delete. */ @@ -106,8 +133,9 @@ public class VaultOperations { int number = 0; try { number = Integer.parseInt(arg); - if (number == 0) + if (number == 0) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); + } return; } catch (NumberFormatException nfe) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); @@ -126,6 +154,7 @@ public class VaultOperations { /** * Delete a player's vault. + * * @param sender The sender executing the deletion. * @param holder The user to whom the deleted vault belongs. * @param arg The vault number to delete. @@ -155,5 +184,4 @@ public class VaultOperations { sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); } } - -} +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultViewInfo.java similarity index 85% rename from src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java rename to src/main/java/com/drtshock/playervaults/vaultmanagement/VaultViewInfo.java index 6dba07a..69b78a6 100644 --- a/src/main/java/com/drtshock/playervaults/commands/VaultViewInfo.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultViewInfo.java @@ -1,8 +1,8 @@ -package com.drtshock.playervaults.commands; +package com.drtshock.playervaults.vaultmanagement; /** - * A class that stores information about a vault viewing including the holder of the vault, - * and the vault number. + * A class that stores information about a vault viewing including the holder of + * the vault, and the vault number. */ public class VaultViewInfo { @@ -11,6 +11,7 @@ public class VaultViewInfo { /** * Make a VaultViewObject + * * @param s The holder of the vault. * @param i The vault number. */ @@ -21,6 +22,7 @@ public class VaultViewInfo { /** * Get the holder of the vault. + * * @return The holder of the vault. */ public String getHolder() { @@ -29,6 +31,7 @@ public class VaultViewInfo { /** * Get the vault number. + * * @return The vault number. */ public int getNumber() { @@ -39,5 +42,4 @@ public class VaultViewInfo { public String toString() { return this.holder + " " + this.number; } - }