diff --git a/pom.xml b/pom.xml index 9024947..8582574 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.drtshock PlayerVaults - 3.5.3 + 3.5.4-SNAPSHOT PlayerVaults http://dev.bukkit.org/bukkit-plugins/playervaults/ diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index a9d2f43..17c641f 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -27,6 +27,7 @@ import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; @@ -38,6 +39,8 @@ import org.bukkit.scheduler.BukkitRunnable; import java.io.*; import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; import java.util.logging.Level; public class PlayerVaults extends JavaPlugin { @@ -55,21 +58,20 @@ public class PlayerVaults extends JavaPlugin { private YamlConfiguration signs; private File signsFile; private boolean saveQueued; - private File configFile; private boolean backupsEnabled; private File backupsFolder = null; private File vaultData; + private Set blockedMats = new HashSet<>(); @Override public void onEnable() { instance = this; - configFile = new File(getDataFolder(), "config.yml"); + loadConfig(); vaultData = new File(this.getDataFolder(), "uuidvaults"); getServer().getScheduler().runTask(this, new UUIDConversion()); // Convert to UUIDs first. Class checks if necessary. loadLang(); new UUIDVaultManager(); getServer().getPluginManager().registerEvents(new Listeners(this), this); - loadConfig(); this.backupsEnabled = this.getConfig().getBoolean("backups.enabled", true); loadSigns(); checkUpdate(); @@ -122,8 +124,9 @@ public class PlayerVaults extends JavaPlugin { public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]) { if (cmd.getName().equals("pvreload")) { reloadConfig(); + loadConfig(); // To update blocked materials. loadLang(); - sender.sendMessage(ChatColor.GREEN + "Reloaded Playervaults confguration and lang files."); + sender.sendMessage(ChatColor.GREEN + "Reloaded PlayerVaults' configuration and lang files."); } return true; } @@ -164,10 +167,18 @@ public class PlayerVaults extends JavaPlugin { } private void loadConfig() { - if (!configFile.exists()) { - saveDefaultConfig(); - } else { - updateConfig(); + saveDefaultConfig(); + + // Clear just in case this is a reload. + blockedMats.clear(); + if (getConfig().getBoolean("blockitems", false) && getConfig().contains("blocked-items")) { + for (String s : getConfig().getStringList("blocked-items")) { + Material mat = Material.matchMaterial(s); + if (mat != null) { + blockedMats.add(mat); + getLogger().log(Level.INFO, "Added {0} to list of blocked materials.", mat.name()); + } + } } } @@ -213,32 +224,6 @@ public class PlayerVaults extends JavaPlugin { } } - public void updateConfig() { - boolean checkUpdate = getConfig().getBoolean("check-update", true); - boolean ecoEnabled = getConfig().getBoolean("economy.enabled", false); - int ecoCreate = getConfig().getInt("economy.cost-to-create", 100); - int ecoOpen = getConfig().getInt("economy.cost-to-open", 10); - int ecoDelete = getConfig().getInt("economy.refund-on-delete", 50); - boolean dropEnabled = getConfig().getBoolean("drop-on-death.enabled", false); - int dropInvs = getConfig().getInt("drop-on-death.inventories", 50); - boolean backupsEnabled = getConfig().getBoolean("backups.enabled", true); - configFile.delete(); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(getResource("config.yml")); - setInConfig("check-update", checkUpdate, conf); - setInConfig("economy.enabled", ecoEnabled, conf); - setInConfig("economy.cost-to-create", ecoCreate, conf); - setInConfig("economy.cost-to-open", ecoOpen, conf); - setInConfig("economy.refund-on-delete", ecoDelete, conf); - setInConfig("drop-on-death.enabled", dropEnabled, conf); - setInConfig("drop-on-death.inventories", dropInvs, conf); - setInConfig("backups.enabled", backupsEnabled, conf); - try { - conf.save(configFile); - } catch (IOException e) { - e.printStackTrace(); - } - } - /** * Set an object in the config.yml * @@ -357,6 +342,10 @@ public class PlayerVaults extends JavaPlugin { return this.backupsFolder; } + public boolean isBlockedMaterial(Material mat) { + return blockedMats.contains(mat); + } + public static PlayerVaults getInstance() { return instance; } diff --git a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java index c313775..0bafa21 100644 --- a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java @@ -35,6 +35,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.Inventory; @@ -227,4 +228,29 @@ public class Listeners implements Listener { event.setCancelled(true); } } + + @EventHandler(ignoreCancelled = true) + public void onClick(InventoryClickEvent event) { + if (!(event.getWhoClicked() instanceof Player)) { + return; + } + + Player player = (Player) event.getWhoClicked(); + if (player.hasPermission("playervaults.bypassblockeditems")) { + return; + } + + VaultViewInfo info = PlayerVaults.getInstance().getInVault().get(player.getUniqueId().toString()); + if (info != null) { + int num = info.getNumber(); + String title = Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(num)).replace("%p", info.getHolder()); + if ((event.getClickedInventory().getTitle().equalsIgnoreCase(title) || event.isShiftClick()) && event.getCurrentItem() != null) { + if (PlayerVaults.getInstance().isBlockedMaterial(event.getCurrentItem().getType())) { + event.setCancelled(true); + player.sendMessage(Lang.TITLE.toString() + Lang.BLOCKED_ITEM.toString().replace("%m", event.getCurrentItem().getType().name())); + } + } + } + + } } diff --git a/src/main/java/com/drtshock/playervaults/util/Lang.java b/src/main/java/com/drtshock/playervaults/util/Lang.java index fc866f4..0209558 100644 --- a/src/main/java/com/drtshock/playervaults/util/Lang.java +++ b/src/main/java/com/drtshock/playervaults/util/Lang.java @@ -50,7 +50,8 @@ public enum Lang { CONVERT_COMPLETE("conversion-complete", "&aConverted %converted players to PlayerVaults"), CONVERT_BACKGROUND("conversion-background", "&fConversion has been forked to the background. See console for updates."), LOCKED("vaults-locked", "&cVaults are currently locked while conversion occurs. Please try again in a moment!"), - HELP("help", "/pv "); + HELP("help", "/pv "), + BLOCKED_ITEM("blocked-item", "&6%m &cis blocked from vaults"); private String path; private String def; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4cf5e91..892613c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -18,6 +18,21 @@ economy: cost-to-open: 10 refund-on-delete: 50 +# Blocked Items +# Here you can block items in vaults. +# You can give player's playervaults.bypassblockeditems permission to bypass this list. +# Ops also have an automatic bypass. +# Use material names. This does not work with ids. + +# Should we even use this? If left to false, the list won't do anything. +blockitems: false + +# Only effective if the above option is true. +blocked-items: + - PUMPKIN + - DIAMOND_BLOCK + + # Cleanup # Should we cleanup vaults that haven't been used in awhile? # Only checks on restarts. Runs on another thread so it won't diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index cd941ce..531769d 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -27,4 +27,5 @@ plugin-not-found: "&cNo converter found for that plugin" conversion-complete: "&aConverted %converted players to PlayerVaults" conversion-background: "&fConversion has been forked to the background. See console for updates." vaults-locked: "&cVaults are currently locked while conversion occurs. Please try again in a moment!" -help: "/pv " \ No newline at end of file +help: "/pv " +blocked-item: "&6%m &cis blocked from vaults." \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index df5b8a3..a956125 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -29,4 +29,7 @@ permissions: default: true playervaults.admin: description: Admin vault operations. + default: op + playervaults.bypassblockeditems: + description: Bypass blocked items. default: op \ No newline at end of file