Do a bit more cleanup, and shuffle a few things around
This commit is contained in:
@@ -51,7 +51,7 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
private HashMap<String, SignSetInfo> setSign = new HashMap<>();
|
private HashMap<String, SignSetInfo> setSign = new HashMap<>();
|
||||||
private HashMap<String, VaultViewInfo> inVault = new HashMap<>();
|
private HashMap<String, VaultViewInfo> inVault = new HashMap<>();
|
||||||
private HashMap<String, Inventory> openInventories = new HashMap<>();
|
private HashMap<String, Inventory> openInventories = new HashMap<>();
|
||||||
private static Economy econ = null;
|
private Economy economy = null;
|
||||||
private boolean dropOnDeath = false;
|
private boolean dropOnDeath = false;
|
||||||
private boolean useVault = false;
|
private boolean useVault = false;
|
||||||
private int inventoriesToDrop = 0;
|
private int inventoriesToDrop = 0;
|
||||||
@@ -73,7 +73,7 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
getCommand("pvdel").setExecutor(new DeleteCommand());
|
getCommand("pvdel").setExecutor(new DeleteCommand());
|
||||||
getCommand("pvsign").setExecutor(new SignCommand());
|
getCommand("pvsign").setExecutor(new SignCommand());
|
||||||
getCommand("workbench").setExecutor(new WorkbenchCommand());
|
getCommand("workbench").setExecutor(new WorkbenchCommand());
|
||||||
setupEconomy();
|
useVault = setupEconomy();
|
||||||
startMetrics();
|
startMetrics();
|
||||||
|
|
||||||
if (getConfig().getBoolean("drop-on-death.enabled")) {
|
if (getConfig().getBoolean("drop-on-death.enabled")) {
|
||||||
@@ -81,8 +81,6 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
inventoriesToDrop = getConfig().getInt("drop-on-death.inventories");
|
inventoriesToDrop = getConfig().getInt("drop-on-death.inventories");
|
||||||
}
|
}
|
||||||
|
|
||||||
new File(getDataFolder() + File.separator + "vaults" + File.separator + "backups").mkdirs();
|
|
||||||
|
|
||||||
if (getConfig().getBoolean("cleanup.enable", false)) {
|
if (getConfig().getBoolean("cleanup.enable", false)) {
|
||||||
getServer().getScheduler().runTaskAsynchronously(this, new Cleanup(getConfig().getInt("cleanup.lastEdit", 30)));
|
getServer().getScheduler().runTaskAsynchronously(this, new Cleanup(getConfig().getInt("cleanup.lastEdit", 30)));
|
||||||
}
|
}
|
||||||
@@ -104,20 +102,24 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
if (getInVault().containsKey(p.getName())) {
|
if (this.inVault.containsKey(player.getName())) {
|
||||||
Inventory inv = p.getOpenInventory().getTopInventory();
|
Inventory inventory = player.getOpenInventory().getTopInventory();
|
||||||
if (inv.getViewers().size() == 1) {
|
if (inventory.getViewers().size() == 1) {
|
||||||
VaultViewInfo info = getInVault().get(p.getName());
|
VaultViewInfo info = this.inVault.get(player.getName());
|
||||||
try {
|
try {
|
||||||
UUIDVaultManager.getInstance().saveVault(inv, p.getUniqueId(), info.getNumber());
|
UUIDVaultManager.getInstance().saveVault(inventory, player.getUniqueId(), info.getNumber());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
// ignore
|
||||||
}
|
}
|
||||||
getOpenInventories().remove(info.toString());
|
|
||||||
|
this.openInventories.remove(info.toString());
|
||||||
}
|
}
|
||||||
getInVault().remove(p.getName());
|
|
||||||
|
this.inVault.remove(player.getName());
|
||||||
}
|
}
|
||||||
p.closeInventory();
|
|
||||||
|
player.closeInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +127,7 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
if (getConfig().getBoolean("check-update", true)) {
|
if (getConfig().getBoolean("check-update", true)) {
|
||||||
final PlayerVaults plugin = this;
|
final PlayerVaults plugin = this;
|
||||||
final File file = this.getFile();
|
final File file = this.getFile();
|
||||||
final Updater.UpdateType updateType = (getConfig().getBoolean("download-update", true) ? Updater.UpdateType.DEFAULT : Updater.UpdateType.NO_DOWNLOAD);
|
final Updater.UpdateType updateType = getConfig().getBoolean("download-update", true) ? Updater.UpdateType.DEFAULT : Updater.UpdateType.NO_DOWNLOAD;
|
||||||
getServer().getScheduler().runTaskAsynchronously(this, new Runnable() {
|
getServer().getScheduler().runTaskAsynchronously(this, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -146,13 +148,15 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
if (getServer().getPluginManager().getPlugin("Vault") == null) {
|
if (getServer().getPluginManager().getPlugin("Vault") == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
|
|
||||||
if (rsp == null) {
|
RegisteredServiceProvider<Economy> provider = getServer().getServicesManager().getRegistration(Economy.class);
|
||||||
|
if (provider == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
econ = rsp.getProvider();
|
|
||||||
useVault = true;
|
economy = provider.getProvider();
|
||||||
return econ != null;
|
|
||||||
|
return economy != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadConfig() {
|
private void loadConfig() {
|
||||||
@@ -280,12 +284,14 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
YamlConfiguration conf = YamlConfiguration.loadConfiguration(lang);
|
YamlConfiguration conf = YamlConfiguration.loadConfiguration(lang);
|
||||||
for (Lang item : Lang.values()) {
|
for (Lang item : Lang.values()) {
|
||||||
if (conf.getString(item.getPath()) == null) {
|
if (conf.getString(item.getPath()) == null) {
|
||||||
conf.set(item.getPath(), item.getDefault());
|
conf.set(item.getPath(), item.getDefault());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Lang.setFile(conf);
|
Lang.setFile(conf);
|
||||||
try {
|
try {
|
||||||
conf.save(lang);
|
conf.save(lang);
|
||||||
@@ -321,13 +327,24 @@ public class PlayerVaults extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Economy getEconomy() {
|
public Economy getEconomy() {
|
||||||
return econ;
|
return this.economy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEconomyEnabled() {
|
||||||
|
return this.getConfig().getBoolean("economy.enabled", false) && this.useVault;
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getVaultData() {
|
public File getVaultData() {
|
||||||
return new File(this.getDataFolder(), "uuidvaults");
|
return new File(this.getDataFolder(), "uuidvaults");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public File getBackupsFolder() {
|
||||||
|
File folder = new File(this.getVaultData(), "backups");
|
||||||
|
folder.mkdirs();
|
||||||
|
|
||||||
|
return folder;
|
||||||
|
}
|
||||||
|
|
||||||
public static PlayerVaults getInstance() {
|
public static PlayerVaults getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class Listeners implements Listener {
|
|||||||
try {
|
try {
|
||||||
vm.saveVault(inv, player.getUniqueId(), info.getNumber());
|
vm.saveVault(inv, player.getUniqueId(), info.getNumber());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerVaults.getInstance().getOpenInventories().remove(info.toString());
|
PlayerVaults.getInstance().getOpenInventories().remove(info.toString());
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class Cleanup extends BukkitRunnable {
|
public class Cleanup extends BukkitRunnable {
|
||||||
|
|
||||||
private long diff;
|
private long diff;
|
||||||
|
|
||||||
public Cleanup(int diff) {
|
public Cleanup(int diff) {
|
||||||
@@ -15,14 +14,17 @@ public class Cleanup extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
File file = PlayerVaults.getInstance().getVaultData();
|
File directory = PlayerVaults.getInstance().getVaultData();
|
||||||
if (!file.exists()) return;
|
if (!directory.exists()) {
|
||||||
|
// folder doesn't exist, don't run
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
for (File f : file.listFiles()) {
|
for (File file : directory.listFiles()) {
|
||||||
if (time - f.lastModified() > diff) {
|
if (time - file.lastModified() > diff) {
|
||||||
f.delete();
|
PlayerVaults.getInstance().getLogger().info("Deleting vault file (cleanup): " + file.getName());
|
||||||
PlayerVaults.getInstance().getLogger().info("Deleting vault file: " + f.getName());
|
file.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,12 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to convert vaults by name to vaults by UUID.
|
* Class to convert vaults by name to vaults by UUID.
|
||||||
*/
|
*/
|
||||||
public final class UUIDConversion extends BukkitRunnable {
|
public final class UUIDConversion extends BukkitRunnable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
File newDir = PlayerVaults.getInstance().getVaultData();
|
File newDir = PlayerVaults.getInstance().getVaultData();
|
||||||
@@ -23,11 +21,12 @@ public final class UUIDConversion extends BukkitRunnable {
|
|||||||
PlayerVaults.getInstance().getLogger().log(Level.INFO, "Files already converted to UUID.");
|
PlayerVaults.getInstance().getLogger().log(Level.INFO, "Files already converted to UUID.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newDir.mkdirs();
|
newDir.mkdirs();
|
||||||
|
|
||||||
PlayerVaults.getInstance().getLogger().log(Level.INFO, "********** Starting PlayerVault conversion to UUIDs **********");
|
PlayerVaults.getInstance().getLogger().log(Level.INFO, "********** Starting PlayerVault conversion to UUIDs **********");
|
||||||
PlayerVaults.getInstance().getLogger().log(Level.INFO, "This might take awhile.");
|
PlayerVaults.getInstance().getLogger().log(Level.INFO, "This might take awhile.");
|
||||||
PlayerVaults.getInstance().getLogger().log(Level.INFO, "plugins/PlayerVaults/vaults will still be there as a backup but unused.");
|
PlayerVaults.getInstance().getLogger().log(Level.INFO, "plugins/PlayerVaults/vaults will remain as a backup.");
|
||||||
|
|
||||||
for (File file : new File(PlayerVaults.getInstance().getDataFolder() + File.separator + "vaults").listFiles()) {
|
for (File file : new File(PlayerVaults.getInstance().getDataFolder() + File.separator + "vaults").listFiles()) {
|
||||||
if (file.isDirectory()) continue; // backups folder.
|
if (file.isDirectory()) continue; // backups folder.
|
||||||
@@ -37,8 +36,7 @@ public final class UUIDConversion extends BukkitRunnable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID uuid = player.getUniqueId();
|
File newFile = new File(PlayerVaults.getInstance().getVaultData(), player.getUniqueId().toString() + ".yml");
|
||||||
File newFile = new File(PlayerVaults.getInstance().getVaultData(), uuid.toString() + ".yml");
|
|
||||||
file.mkdirs();
|
file.mkdirs();
|
||||||
try {
|
try {
|
||||||
Files.copy(file, newFile);
|
Files.copy(file, newFile);
|
||||||
|
|||||||
@@ -20,26 +20,18 @@ import com.drtshock.playervaults.PlayerVaults;
|
|||||||
import com.drtshock.playervaults.util.Lang;
|
import com.drtshock.playervaults.util.Lang;
|
||||||
import net.milkbowl.vault.economy.EconomyResponse;
|
import net.milkbowl.vault.economy.EconomyResponse;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that handles all economy operations.
|
* A class that handles all economy operations.
|
||||||
*/
|
*/
|
||||||
public class EconomyOperations {
|
public class EconomyOperations {
|
||||||
|
private static PlayerVaults PLUGIN = PlayerVaults.getInstance();
|
||||||
private static YamlConfiguration BUKKIT_CONFIG = new YamlConfiguration();
|
private static FileConfiguration BUKKIT_CONFIG = PLUGIN.getConfig();
|
||||||
public static PlayerVaults PLUGIN;
|
|
||||||
|
|
||||||
public EconomyOperations(PlayerVaults instance) throws IOException, InvalidConfigurationException {
|
|
||||||
PLUGIN = instance;
|
|
||||||
File config = new File(PLUGIN.getDataFolder(), "config.yml");
|
|
||||||
BUKKIT_CONFIG.load(config);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Have a player pay to open a vault.
|
* Have a player pay to open a vault.
|
||||||
@@ -50,9 +42,10 @@ public class EconomyOperations {
|
|||||||
* @return The transaction success.
|
* @return The transaction success.
|
||||||
*/
|
*/
|
||||||
public static boolean payToOpen(Player player, int number) {
|
public static boolean payToOpen(Player player, int number) {
|
||||||
if (!BUKKIT_CONFIG.getBoolean("economy.enabled") || player.hasPermission("playervaults.free") || PlayerVaults.getInstance().getEconomy() != null) {
|
if (!PLUGIN.isEconomyEnabled() || player.hasPermission("playervaults.free")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UUIDVaultManager.getInstance().vaultExists(player.getUniqueId(), number)) {
|
if (UUIDVaultManager.getInstance().vaultExists(player.getUniqueId(), number)) {
|
||||||
return payToCreate(player);
|
return payToCreate(player);
|
||||||
} else {
|
} else {
|
||||||
@@ -63,6 +56,7 @@ public class EconomyOperations {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +68,7 @@ public class EconomyOperations {
|
|||||||
* @return The transaction success
|
* @return The transaction success
|
||||||
*/
|
*/
|
||||||
public static boolean payToCreate(Player player) {
|
public static boolean payToCreate(Player player) {
|
||||||
if (!BUKKIT_CONFIG.getBoolean("economy.enabled") || player.hasPermission("playervaults.free") || PlayerVaults.getInstance().getEconomy() != null) {
|
if (!PLUGIN.isEconomyEnabled() || player.hasPermission("playervaults.free")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +78,7 @@ public class EconomyOperations {
|
|||||||
player.sendMessage(Lang.TITLE.toString() + Lang.COST_TO_CREATE.toString().replaceAll("%price", "" + cost));
|
player.sendMessage(Lang.TITLE.toString() + Lang.COST_TO_CREATE.toString().replaceAll("%price", "" + cost));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,15 +91,14 @@ public class EconomyOperations {
|
|||||||
* @return The transaction success.
|
* @return The transaction success.
|
||||||
*/
|
*/
|
||||||
public static boolean refundOnDelete(Player player, int number) {
|
public static boolean refundOnDelete(Player player, int number) {
|
||||||
String directory = "plugins" + File.separator + "PlayerVaults" + File.separator + "vaults";
|
if (!PLUGIN.isEconomyEnabled() || player.hasPermission("playervaults.free")) {
|
||||||
if (!BUKKIT_CONFIG.getBoolean("economy.enabled") || player.hasPermission("playervaults.free") || PlayerVaults.getInstance().getEconomy() != null) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String name = player.getName().toLowerCase();
|
|
||||||
File file = new File(directory + File.separator + name.toLowerCase() + ".yml");
|
File playerFile = new File(PLUGIN.getVaultData(), player.getUniqueId().toString() + ".yml");
|
||||||
YamlConfiguration playerFile = YamlConfiguration.loadConfiguration(file);
|
if (playerFile.exists()) {
|
||||||
if (file.exists()) {
|
YamlConfiguration playerData = YamlConfiguration.loadConfiguration(playerFile);
|
||||||
if (playerFile.getString("vault" + number) == null) {
|
if (playerData.getString("vault" + number) == null) {
|
||||||
player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.VAULT_DOES_NOT_EXIST);
|
player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.VAULT_DOES_NOT_EXIST);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -112,12 +106,14 @@ public class EconomyOperations {
|
|||||||
player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.VAULT_DOES_NOT_EXIST);
|
player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.VAULT_DOES_NOT_EXIST);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
double cost = BUKKIT_CONFIG.getDouble("economy.refund-on-delete");
|
double cost = BUKKIT_CONFIG.getDouble("economy.refund-on-delete");
|
||||||
EconomyResponse resp = PlayerVaults.getInstance().getEconomy().depositPlayer(player.getName(), cost);
|
EconomyResponse resp = PlayerVaults.getInstance().getEconomy().depositPlayer(player.getName(), cost);
|
||||||
if (resp.transactionSuccess()) {
|
if (resp.transactionSuccess()) {
|
||||||
player.sendMessage(Lang.TITLE.toString() + Lang.REFUND_AMOUNT.toString().replaceAll("%price", String.valueOf(cost)));
|
player.sendMessage(Lang.TITLE.toString() + Lang.REFUND_AMOUNT.toString().replaceAll("%price", String.valueOf(cost)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ public class Serialization {
|
|||||||
}
|
}
|
||||||
return serialized;
|
return serialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, Object> recreateMap(Map<String, Object> original) {
|
public static Map<String, Object> recreateMap(Map<String, Object> original) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
map.putAll(original);
|
map.putAll(original);
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ public class UUIDVaultManager {
|
|||||||
public void saveFile(UUID holder, YamlConfiguration yaml) throws IOException {
|
public void saveFile(UUID holder, YamlConfiguration yaml) throws IOException {
|
||||||
File file = new File(directory, holder.toString() + ".yml");
|
File file = new File(directory, holder.toString() + ".yml");
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
file.renameTo(new File(directory, "backups" + File.separator + holder.toString() + ".yml"));
|
file.renameTo(new File(PlayerVaults.getInstance().getBackupsFolder(), holder.toString() + ".yml"));
|
||||||
}
|
}
|
||||||
yaml.save(file);
|
yaml.save(file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ public class VaultManager {
|
|||||||
public void saveFile(String holder, YamlConfiguration yaml) throws IOException {
|
public void saveFile(String holder, YamlConfiguration yaml) throws IOException {
|
||||||
File file = new File(directory + File.separator + holder.toLowerCase() + ".yml");
|
File file = new File(directory + File.separator + holder.toLowerCase() + ".yml");
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
file.renameTo(new File(directory + File.separator + "backups" + File.separator + holder.toLowerCase() + ".yml"));
|
file.renameTo(new File(PlayerVaults.getInstance().getBackupsFolder(), holder.toLowerCase() + ".yml"));
|
||||||
}
|
}
|
||||||
yaml.save(file);
|
yaml.save(file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
name: PlayerVaults
|
name: PlayerVaults
|
||||||
main: com.drtshock.playervaults.PlayerVaults
|
main: com.drtshock.playervaults.PlayerVaults
|
||||||
authors: [drtshock, gomeow, Chester]
|
authors: [drtshock, Koalaaaa]
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
website: http://dev.bukkit.org/server-mods/PlayerVaults
|
website: http://dev.bukkit.org/server-mods/PlayerVaults
|
||||||
softdepend: [Vault]
|
softdepend: [Vault]
|
||||||
commands:
|
commands:
|
||||||
pv:
|
pv:
|
||||||
description: Open a vault with /pv <number>
|
description: Open a vault with /pv <number>
|
||||||
aliases: ['vault', 'chest', 'playervaults']
|
aliases: [vault, chest, playervaults]
|
||||||
pvdel:
|
pvdel:
|
||||||
description: Delete a vault.
|
description: Delete a vault.
|
||||||
aliases: [vaultdel]
|
aliases: [vaultdel]
|
||||||
|
|||||||
Reference in New Issue
Block a user