diff --git a/README.md b/README.md index d50c704..0294407 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ How to include the API with Maven: com.github.MilkBowl VaultAPI - 1.7 + 2.0 provided @@ -24,7 +24,7 @@ repositories { maven { url 'https://jitpack.io' } } dependencies { - compileOnly "com.github.MilkBowl:VaultAPI:1.7" + compileOnly "com.github.MilkBowl:VaultAPI:2.0" } ``` @@ -67,10 +67,12 @@ Implementing Vault is quite simple. It requires getting the Economy, Permission, ```java package com.example.plugin; -import net.milkbowl.vault.chat.Chat; -import net.milkbowl.vault.economy.Economy; -import net.milkbowl.vault.economy.EconomyResponse; -import net.milkbowl.vault.permission.Permission; +import java.util.logging.Logger; + +import net.milkbowl.vault2.chat.Chat; +import net.milkbowl.vault2.economy.Economy; +import net.milkbowl.vault2.economy.EconomyResponse; +import net.milkbowl.vault2.permission.Permission; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -91,7 +93,7 @@ public class ExamplePlugin extends JavaPlugin { @Override public void onEnable() { - if (!setupEconomy() ) { + if (!setupEconomy()) { getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName())); getServer().getPluginManager().disablePlugin(this); return; @@ -134,8 +136,8 @@ public class ExamplePlugin extends JavaPlugin { if(command.getLabel().equals("test-economy")) { // Lets give the player 1.05 currency (note that SOME economic plugins require rounding!) - sender.sendMessage(String.format("You have %s", econ.format(econ.getBalance(player.getName())))); - EconomyResponse r = econ.depositPlayer(player, 1.05); + sender.sendMessage(String.format("You have %s", econ.format(econ.getBalance(player.getUniqueId())))); + EconomyResponse r = econ.depositPlayer(player.getUniqueId(), new BigDecimal("1.05")); if(r.transactionSuccess()) { sender.sendMessage(String.format("You were given %s and now have %s", econ.format(r.amount), econ.format(r.balance))); } else { diff --git a/pom.xml b/pom.xml index 959b534..4a0800c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ 4.0.0 net.milkbowl.vault VaultAPI - 1.7 + 2.0-SNAPSHOT VaultAPI Vault is a Permissions & Economy API to allow plugins to more easily hook into these systems without needing to hook each individual system themselves. -Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms, bPerms2, SimplyPerms, DroxPerms, zPermissions, rscPermissions, KPerms, Starburst, iConomy (4/5/6) BOSEconomy *6/7), EssentialsEcon, 3Co, MultiConomy, MineConomy, EconXP, eWallet, CurrencyCore, XPBank, CraftConomy, AEco, SDFEconomy, TAEcon +Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms, bPerms2, SimplyPerms, DroxPerms, zPermissions, rscPermissions, KPerms http://dev.bukkit.org/server-mods/vault/ diff --git a/src/main/java/net/milkbowl/vault/chat/Chat.java b/src/main/java/net/milkbowl/vault/chat/Chat.java index 2cb2091..8945223 100644 --- a/src/main/java/net/milkbowl/vault/chat/Chat.java +++ b/src/main/java/net/milkbowl/vault/chat/Chat.java @@ -24,6 +24,8 @@ import org.bukkit.entity.Player; /** * The main Chat API - allows for Prefix/Suffix nodes along with generic Info nodes if the linked Chat system supports them * + * @deprecated in lieu of the modern Vault2. To update alter your import to net.milkbowl.vault2.chat. + */ public abstract class Chat { diff --git a/src/main/java/net/milkbowl/vault/economy/AbstractEconomy.java b/src/main/java/net/milkbowl/vault/economy/AbstractEconomy.java deleted file mode 100644 index 4fe0e37..0000000 --- a/src/main/java/net/milkbowl/vault/economy/AbstractEconomy.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.milkbowl.vault.economy; - -import org.bukkit.OfflinePlayer; - -@SuppressWarnings("deprecation") -public abstract class AbstractEconomy implements Economy { - - @Override - public boolean hasAccount(OfflinePlayer player) { - if (player.getName() == null) return false; - return hasAccount(player.getName()); - } - - @Override - public boolean hasAccount(OfflinePlayer player, String worldName) { - if (player.getName() == null) return false; - return hasAccount(player.getName(), worldName); - } - - @Override - public double getBalance(OfflinePlayer player) { - return getBalance(player.getName()); - } - - @Override - public double getBalance(OfflinePlayer player, String world) { - return getBalance(player.getName(), world); - } - - @Override - public boolean has(OfflinePlayer player, double amount) { - if (player.getName() == null) return false; - return has(player.getName(), amount); - } - - @Override - public boolean has(OfflinePlayer player, String worldName, double amount) { - if (player.getName() == null) return false; - return has(player.getName(), worldName, amount); - } - - @Override - public EconomyResponse withdrawPlayer(OfflinePlayer player, double amount) { - return withdrawPlayer(player.getName(), amount); - } - - @Override - public EconomyResponse withdrawPlayer(OfflinePlayer player, String worldName, double amount) { - return withdrawPlayer(player.getName(), worldName, amount); - } - - @Override - public EconomyResponse depositPlayer(OfflinePlayer player, double amount) { - return depositPlayer(player.getName(), amount); - } - - @Override - public EconomyResponse depositPlayer(OfflinePlayer player, String worldName, double amount) { - return depositPlayer(player.getName(), worldName, amount); - } - - @Override - public EconomyResponse createBank(String name, OfflinePlayer player) { - return createBank(name, player.getName()); - } - - @Override - public EconomyResponse isBankOwner(String name, OfflinePlayer player) { - return isBankOwner(name, player.getName()); - } - - @Override - public EconomyResponse isBankMember(String name, OfflinePlayer player) { - return isBankMember(name, player.getName()); - } - - @Override - public boolean createPlayerAccount(OfflinePlayer player) { - return createPlayerAccount(player.getName()); - } - - @Override - public boolean createPlayerAccount(OfflinePlayer player, String worldName) { - return createPlayerAccount(player.getName(), worldName); - } - -} diff --git a/src/main/java/net/milkbowl/vault/economy/Economy.java b/src/main/java/net/milkbowl/vault/economy/Economy.java index 1d14587..d37c725 100644 --- a/src/main/java/net/milkbowl/vault/economy/Economy.java +++ b/src/main/java/net/milkbowl/vault/economy/Economy.java @@ -23,6 +23,7 @@ import org.bukkit.OfflinePlayer; /** * The main economy API * + * @deprecated in lieu of the modern Vault2. To update alter your import to net.milkbowl.vault2.economy and update to use the new UUID-based methods where available. */ public interface Economy { @@ -157,7 +158,7 @@ public interface Economy { public boolean has(OfflinePlayer player, double amount); /** - * @deprecated As of VaultAPI 1.4 use @{link {@link #has(OfflinePlayer, String, double)} instead. + * @deprecated As of VaultAPI 1.4 use {@link #has(OfflinePlayer, String, double)} instead. */ @Deprecated public boolean has(String playerName, String worldName, double amount); @@ -169,7 +170,7 @@ public interface Economy { * @param player to check * @param worldName to check with * @param amount to check for - * @return True if player has amount, False else wise + * @return True if player has amount in the given world, False else wise */ public boolean has(OfflinePlayer player, String worldName, double amount); @@ -226,7 +227,7 @@ public interface Economy { public EconomyResponse depositPlayer(String playerName, String worldName, double amount); /** - * Deposit an amount to a player - DO NOT USE NEGATIVE AMOUNTS + * Deposit an amount to a player on a given world - DO NOT USE NEGATIVE AMOUNTS * IMPLEMENTATION SPECIFIC - if an economy plugin does not support this the global balance will be returned. * * @param player to deposit to @@ -307,7 +308,7 @@ public interface Economy { public EconomyResponse isBankOwner(String name, OfflinePlayer player); /** - * @deprecated As of VaultAPI 1.4 use {{@link #isBankMember(String, OfflinePlayer)} instead. + * @deprecated As of VaultAPI 1.4 use {@link #isBankMember(String, OfflinePlayer)} instead. */ @Deprecated public EconomyResponse isBankMember(String name, String playerName); @@ -328,7 +329,7 @@ public interface Economy { public List getBanks(); /** - * @deprecated As of VaultAPI 1.4 use {{@link #createPlayerAccount(OfflinePlayer)} instead. + * @deprecated As of VaultAPI 1.4 use {@link #createPlayerAccount(OfflinePlayer)} instead. */ @Deprecated public boolean createPlayerAccount(String playerName); @@ -341,7 +342,7 @@ public interface Economy { public boolean createPlayerAccount(OfflinePlayer player); /** - * @deprecated As of VaultAPI 1.4 use {{@link #createPlayerAccount(OfflinePlayer, String)} instead. + * @deprecated As of VaultAPI 1.4 use {@link #createPlayerAccount(OfflinePlayer, String)} instead. */ @Deprecated public boolean createPlayerAccount(String playerName, String worldName); diff --git a/src/main/java/net/milkbowl/vault/economy/EconomyResponse.java b/src/main/java/net/milkbowl/vault/economy/EconomyResponse.java index ea9807a..eb49b03 100644 --- a/src/main/java/net/milkbowl/vault/economy/EconomyResponse.java +++ b/src/main/java/net/milkbowl/vault/economy/EconomyResponse.java @@ -20,6 +20,7 @@ package net.milkbowl.vault.economy; * It includes a {@link ResponseType} indicating whether the plugin currently being used for Economy actually allows * the method, or if the operation was a success or failure. * + * @deprecated in lieu of the modern Vault2. To update alter your import to net.milkbowl.vault2.economy. */ public class EconomyResponse { diff --git a/src/main/java/net/milkbowl/vault/permission/Permission.java b/src/main/java/net/milkbowl/vault/permission/Permission.java index 0f68eba..608bc6c 100644 --- a/src/main/java/net/milkbowl/vault/permission/Permission.java +++ b/src/main/java/net/milkbowl/vault/permission/Permission.java @@ -28,6 +28,7 @@ import org.bukkit.plugin.Plugin; /** * The main Permission API - allows for group and player based permission tests * + * @deprecated in lieu of the modern Vault2. To update alter your import to net.milkbowl.vault2.permission. */ public abstract class Permission { diff --git a/src/main/java/net/milkbowl/vault2/chat/Chat.java b/src/main/java/net/milkbowl/vault2/chat/Chat.java new file mode 100644 index 0000000..7c48870 --- /dev/null +++ b/src/main/java/net/milkbowl/vault2/chat/Chat.java @@ -0,0 +1,995 @@ +/* This file is part of Vault. + + Vault is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Vault is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Vault. If not, see . +*/ +package net.milkbowl.vault2.chat; + +import net.milkbowl.vault2.permission.Permission; + +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.entity.Player; + +/** + * The main Chat API - allows for Prefix/Suffix nodes along with generic Info nodes if the linked Chat system supports them + * + */ +public abstract class Chat { + + private Permission perms; + + public Chat(Permission perms) { + this.perms = perms; + } + /** + * Gets name of permission method + * @return Name of Permission Method + */ + abstract public String getName(); + + /** + * Checks if permission method is enabled. + * @return Success or Failure + */ + abstract public boolean isEnabled(); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerPrefix(String, OfflinePlayer)} instead. + * + * Get players prefix + * @param world World name + * @param player Player name + * @return Prefix + */ + @Deprecated + abstract public String getPlayerPrefix(String world, String player); + + /** + * Get a players prefix in the given world + * Use NULL for world if requesting a global prefix + * + * @param world World name + * @param player OfflinePlayer + * @return Prefix + */ + public String getPlayerPrefix(String world, OfflinePlayer player) { + return getPlayerPrefix(world, player.getName()); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerPrefix(String, OfflinePlayer)} instead. + * + * Get players prefix + * @param world World Object + * @param player Player name + * @return Prefix + */ + @Deprecated + public String getPlayerPrefix(World world, String player) { + return getPlayerPrefix(world.getName(), player); + } + + /** + * Get players prefix from the world they are currently in. + * May or may not return the global prefix depending on implementation. + * + * @param player Player Object + * @return Prefix + */ + public String getPlayerPrefix(Player player) { + return getPlayerPrefix(player.getWorld().getName(), player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerPrefix(String, OfflinePlayer, String)} instead. + * + * Set players prefix + * @param world World name + * @param player Player name + * @param prefix Prefix + */ + @Deprecated + abstract public void setPlayerPrefix(String world, String player, String prefix); + + /** + * Sets players prefix in the given world. + * Use NULL for world for setting in the Global scope. + * + * @param world World name + * @param player OfflinePlayer + * @param prefix Prefix + */ + public void setPlayerPrefix(String world, OfflinePlayer player, String prefix) { + setPlayerPrefix(world, player.getName(), prefix); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerPrefix(String, OfflinePlayer, String)} instead. + * + * Set players prefix in the given world. + * + * @param world World Object + * @param player Player name + * @param prefix Prefix + */ + @Deprecated + public void setPlayerPrefix(World world, String player, String prefix) { + setPlayerPrefix(world.getName(), player, prefix); + } + + /** + * Set players prefix in the world they are currently in. + * + * @param player Player Object + * @param prefix Prefix + */ + public void setPlayerPrefix(Player player, String prefix) { + setPlayerPrefix(player.getWorld().getName(), player, prefix); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerSuffix(String, OfflinePlayer)} instead. + * + * Get players suffix + * @param world World name + * @param player Player name + * @return Suffix + */ + @Deprecated + abstract public String getPlayerSuffix(String world, String player); + + /** + * Get players suffix in the specified world. + * + * @param world World name + * @param player OfflinePlayer name + * @return Suffix + */ + public String getPlayerSuffix(String world, OfflinePlayer player) { + return getPlayerSuffix(world, player.getName()); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerSuffix(String, OfflinePlayer)} instead. + * + * Get players suffix + * @param world World Object + * @param player Player name + * @return Suffix + */ + @Deprecated + public String getPlayerSuffix(World world, String player) { + return getPlayerSuffix(world.getName(), player); + } + + /** + * Get players suffix in the world they are currently in. + * + * @param player Player Object + * @return Suffix + */ + public String getPlayerSuffix(Player player) { + return getPlayerSuffix(player.getWorld().getName(), player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerSuffix(String, OfflinePlayer, String)} instead. + * + * Set players suffix + * @param world World name + * @param player Player name + * @param suffix Suffix + */ + @Deprecated + abstract public void setPlayerSuffix(String world, String player, String suffix); + + /** + * Set players suffix for the world specified + * + * @param world World name + * @param player OfflinePlayer + * @param suffix Suffix + */ + public void setPlayerSuffix(String world, OfflinePlayer player, String suffix) { + setPlayerSuffix(world, player.getName(), suffix); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerSuffix(String, OfflinePlayer, String)} instead. + * + * Set players suffix + * @param world World Object + * @param player Player name + * @param suffix Suffix + */ + @Deprecated + public void setPlayerSuffix(World world, String player, String suffix) { + setPlayerSuffix(world.getName(), player, suffix); + } + + /** + * Set players suffix in the world they currently occupy. + * + * @param player Player Object + * @param suffix Suffix + */ + public void setPlayerSuffix(Player player, String suffix) { + setPlayerSuffix(player.getWorld().getName(), player, suffix); + } + + /** + * Get group prefix + * @param world World name + * @param group Group name + * @return Prefix + */ + abstract public String getGroupPrefix(String world, String group); + + /** + * Get group prefix + * @param world World Object + * @param group Group name + * @return Prefix + */ + public String getGroupPrefix(World world, String group) { + return getGroupPrefix(world.getName(), group); + } + + /** + * Set group prefix + * @param world World name + * @param group Group name + * @param prefix Prefix + */ + abstract public void setGroupPrefix(String world, String group, String prefix); + + /** + * Set group prefix + * @param world World Object + * @param group Group name + * @param prefix Prefix + */ + public void setGroupPrefix(World world, String group, String prefix) { + setGroupPrefix(world.getName(), group, prefix); + } + + /** + * Get group suffix + * @param world World name + * @param group Group name + * @return Suffix + */ + abstract public String getGroupSuffix(String world, String group); + + /** + * Get group suffix + * @param world World Object + * @param group Group name + * @return Suffix + */ + public String getGroupSuffix(World world, String group) { + return getGroupSuffix(world.getName(), group); + } + + /** + * Set group suffix + * @param world World name + * @param group Group name + * @param suffix Suffix + */ + abstract public void setGroupSuffix(String world, String group, String suffix); + + /** + * Set group suffix + * @param world World Object + * @param group Group name + * @param suffix Suffix + */ + public void setGroupSuffix(World world, String group, String suffix) { + setGroupSuffix(world.getName(), group, suffix); + } + + /** + * Get a players informational node (Integer) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue) { + return getPlayerInfoInteger(world, player.getName(), node, defaultValue); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoInteger(String, OfflinePlayer, String, int)} instead. + * Get a players informational node (Integer) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + abstract public int getPlayerInfoInteger(String world, String player, String node, int defaultValue); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoInteger(String, OfflinePlayer, String, int)} instead. + * + * Get a players informational node (Integer) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + public int getPlayerInfoInteger(World world, String player, String node, int defaultValue) { + return getPlayerInfoInteger(world.getName(), player, node, defaultValue); + } + + /** + * Get a players informational node (Integer) value + * @param player Player Object + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public int getPlayerInfoInteger(Player player, String node, int defaultValue) { + return getPlayerInfoInteger(player.getWorld().getName(), player, node, defaultValue); + } + + /** + * Set a players informational node (Integer) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value) { + setPlayerInfoInteger(world, player.getName(), node, value); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoInteger(String, OfflinePlayer, String, int)} instead. + * + * Set a players informational node (Integer) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + abstract public void setPlayerInfoInteger(String world, String player, String node, int value); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoInteger(String, OfflinePlayer, String, int)} instead. + * + * Set a players informational node (Integer) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + public void setPlayerInfoInteger(World world, String player, String node, int value) { + setPlayerInfoInteger(world.getName(), player, node, value); + } + + /** + * Set a players informational node (Integer) value + * @param player Player Object + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoInteger(Player player, String node, int value) { + setPlayerInfoInteger(player.getWorld().getName(), player, node, value); + } + + /** + * Get a groups informational node (Integer) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + abstract public int getGroupInfoInteger(String world, String group, String node, int defaultValue); + + /** + * Get a groups informational node (Integer) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public int getGroupInfoInteger(World world, String group, String node, int defaultValue) { + return getGroupInfoInteger(world.getName(), group, node, defaultValue); + } + + /** + * Set a groups informational node (Integer) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + abstract public void setGroupInfoInteger(String world, String group, String node, int value); + + /** + * Set a groups informational node (Integer) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + public void setGroupInfoInteger(World world, String group, String node, int value) { + setGroupInfoInteger(world.getName(), group, node, value); + } + + /** + * Get a players informational node (Double) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue) { + return getPlayerInfoDouble(world, player.getName(), node, defaultValue); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoDouble(String, OfflinePlayer, String, double)} instead. + * + * Get a players informational node (Double) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + abstract public double getPlayerInfoDouble(String world, String player, String node, double defaultValue); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoDouble(String, OfflinePlayer, String, double)} instead + * + * Get a players informational node (Double) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + public double getPlayerInfoDouble(World world, String player, String node, double defaultValue) { + return getPlayerInfoDouble(world.getName(), player, node, defaultValue); + } + + /** + * Get a players informational node (Double) value + * @param player Player Object + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public double getPlayerInfoDouble(Player player, String node, double defaultValue) { + return getPlayerInfoDouble(player.getWorld().getName(), player, node, defaultValue); + } + + /** + * Set a players informational node (Double) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value) { + setPlayerInfoDouble(world, player.getName(), node, value); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoDouble(String, OfflinePlayer, String, double)} instead. + * Set a players informational node (Double) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + abstract public void setPlayerInfoDouble(String world, String player, String node, double value); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoDouble(String, OfflinePlayer, String, double)} instead. + * Set a players informational node (Double) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + public void setPlayerInfoDouble(World world, String player, String node, double value) { + setPlayerInfoDouble(world.getName(), player, node, value); + } + + /** + * Set a players informational node (Double) value + * @param player Player Object + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoDouble(Player player, String node, double value) { + setPlayerInfoDouble(player.getWorld().getName(), player, node, value); + } + + /** + * Get a groups informational node (Double) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + abstract public double getGroupInfoDouble(String world, String group, String node, double defaultValue); + + /** + * Get a groups informational node (Double) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public double getGroupInfoDouble(World world, String group, String node, double defaultValue) { + return getGroupInfoDouble(world.getName(), group, node, defaultValue); + } + + /** + * Set a groups informational node (Double) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + abstract public void setGroupInfoDouble(String world, String group, String node, double value); + + /** + * Set a groups informational node (Double) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + public void setGroupInfoDouble(World world, String group, String node, double value) { + setGroupInfoDouble(world.getName(), group, node, value); + } + + /** + * Get a players informational node (Boolean) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue) { + return getPlayerInfoBoolean(world, player.getName(), node, defaultValue); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead. + * + * Get a players informational node (Boolean) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + abstract public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead. + * + * Get a players informational node (Boolean) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + public boolean getPlayerInfoBoolean(World world, String player, String node, boolean defaultValue) { + return getPlayerInfoBoolean(world.getName(), player, node, defaultValue); + } + + /** + * Get a players informational node (Boolean) value + * @param player Player Object + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue) { + return getPlayerInfoBoolean(player.getWorld().getName(), player, node, defaultValue); + } + + /** + * Set a players informational node (Boolean) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value) { + setPlayerInfoBoolean(world, player.getName(), node, value); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead. + * Set a players informational node (Boolean) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + abstract public void setPlayerInfoBoolean(String world, String player, String node, boolean value); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoBoolean(String, OfflinePlayer, String, boolean)} instead. + * Set a players informational node (Boolean) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + public void setPlayerInfoBoolean(World world, String player, String node, boolean value) { + setPlayerInfoBoolean(world.getName(), player, node, value); + } + + /** + * Set a players informational node (Boolean) value + * @param player Player Object + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoBoolean(Player player, String node, boolean value) { + setPlayerInfoBoolean(player.getWorld().getName(), player, node, value); + } + + /** + * Get a groups informational node (Boolean) value + * @param world Name of World + * @param group Name of Group + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + abstract public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue); + + /** + * Set a players informational node (Boolean) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue) { + return getGroupInfoBoolean(world.getName(), group, node, defaultValue); + } + + /** + * Set a groups informational node (Boolean) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + abstract public void setGroupInfoBoolean(String world, String group, String node, boolean value); + + /** + * Set a players informational node (Boolean) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + public void setGroupInfoBoolean(World world, String group, String node, boolean value) { + setGroupInfoBoolean(world.getName(), group, node, value); + } + + /** + * Get a players informational node (String) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue) { + return getPlayerInfoString(world, player.getName(), node, defaultValue); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoString(String, OfflinePlayer, String, String)} instead. + * + * Get a players informational node (String) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + abstract public String getPlayerInfoString(String world, String player, String node, String defaultValue); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerInfoString(String, OfflinePlayer, String, String)} instead. + * Get a players informational node (String) value + * @param world World Object + * @param player Player name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + @Deprecated + public String getPlayerInfoString(World world, String player, String node, String defaultValue) { + return getPlayerInfoString(world.getName(), player, node, defaultValue); + } + + /** + * Get a players informational node (String) value + * @param player Player Object + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public String getPlayerInfoString(Player player, String node, String defaultValue) { + return getPlayerInfoString(player.getWorld().getName(), player, node, defaultValue); + } + + /** + * Set a players informational node (String) value + * @param world World name + * @param player OfflinePlayer + * @param node Permission node + * @param value Value to set + */ + public void setPlayerInfoString(String world, OfflinePlayer player, String node, String value) { + setPlayerInfoString(world, player.getName(), node, value); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoString(String, OfflinePlayer, String, String)} instead. + * Set a players informational node (String) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + abstract public void setPlayerInfoString(String world, String player, String node, String value); + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #setPlayerInfoString(String, OfflinePlayer, String, String)} instead. + * Set a players informational node (String) value + * @param world World name + * @param player Player name + * @param node Permission node + * @param value Value to set + */ + @Deprecated + public void setPlayerInfoString(World world, String player, String node, String value) { + setPlayerInfoString(world.getName(), player, node, value); + } + + /** + * Set a players informational node (String) value + * @param player Player Object + * @param node Permission node + * @param value Value ot set + */ + public void setPlayerInfoString(Player player, String node, String value) { + setPlayerInfoString(player.getWorld().getName(), player, node, value); + } + + /** + * Get a groups informational node (String) value + * @param world Name of World + * @param group Name of Group + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + abstract public String getGroupInfoString(String world, String group, String node, String defaultValue); + + /** + * Set a players informational node (String) value + * @param world World Object + * @param group Group name + * @param node Permission node + * @param defaultValue Default value + * @return Value + */ + public String getGroupInfoString(World world, String group, String node, String defaultValue) { + return getGroupInfoString(world.getName(), group, node, defaultValue); + } + + /** + * Set a groups informational node (String) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + abstract public void setGroupInfoString(String world, String group, String node, String value); + + /** + * Set a groups informational node (String) value + * @param world World name + * @param group Group name + * @param node Permission node + * @param value Value to set + */ + public void setGroupInfoString(World world, String group, String node, String value) { + setGroupInfoString(world.getName(), group, node, value); + } + + /** + * Check if player is member of a group. + * @param world World name + * @param player OfflinePlayer + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(String world, OfflinePlayer player, String group) { + return perms.playerInGroup(world, player, group); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #playerInGroup(String, OfflinePlayer, String)} instead. + * Check if player is member of a group. + * @param world World name + * @param player Player name + * @param group Group name + * @return Success or Failure + */ + @Deprecated + public boolean playerInGroup(String world, String player, String group) { + return perms.playerInGroup(world, player, group); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #playerInGroup(String, OfflinePlayer, String)} instead. + * Check if player is member of a group. + * @param world World Object + * @param player Player name + * @param group Group name + * @return Success or Failure + */ + @Deprecated + public boolean playerInGroup(World world, String player, String group) { + return playerInGroup(world.getName(), player, group); + } + + /** + * Check if player is member of a group. + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(Player player, String group) { + return playerInGroup(player.getWorld().getName(), player, group); + } + + /** + * Gets the list of groups that this player has + * @param world World name + * @param player OfflinePlayer + * @return Array of groups + */ + public String[] getPlayerGroups(String world, OfflinePlayer player) { + return perms.getPlayerGroups(world, player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerGroups(String, OfflinePlayer)} instead. + * Gets the list of groups that this player has + * @param world World name + * @param player Player name + * @return Array of groups + */ + @Deprecated + public String[] getPlayerGroups(String world, String player) { + return perms.getPlayerGroups(world, player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPlayerGroups(String, OfflinePlayer)} instead. + * Gets the list of groups that this player has + * @param world World Object + * @param player Player name + * @return Array of groups + */ + @Deprecated + public String[] getPlayerGroups(World world, String player) { + return getPlayerGroups(world.getName(), player); + } + + /** + * Gets the list of groups that this player has + * @param player Player Object + * @return Array of groups + */ + public String[] getPlayerGroups(Player player) { + return getPlayerGroups(player.getWorld().getName(), player); + } + + /** + * Gets players primary group + * @param world World name + * @param player OfflinePlayer + * @return Players primary group + */ + public String getPrimaryGroup(String world, OfflinePlayer player) { + return perms.getPrimaryGroup(world, player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPrimaryGroup(String, OfflinePlayer)} instead. + * Gets players primary group + * @param world World name + * @param player Player name + * @return Players primary group + */ + @Deprecated + public String getPrimaryGroup(String world, String player) { + return perms.getPrimaryGroup(world, player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {{@link #getPrimaryGroup(String, OfflinePlayer)} instead. + * Gets players primary group + * @param world World Object + * @param player Player name + * @return Players primary group + */ + @Deprecated + public String getPrimaryGroup(World world, String player) { + return getPrimaryGroup(world.getName(), player); + } + + /** + * Get players primary group + * @param player Player Object + * @return Players primary group + */ + public String getPrimaryGroup(Player player) { + return getPrimaryGroup(player.getWorld().getName(), player); + } + + /** + * Returns a list of all known groups + * @return an Array of String of all groups + */ + public String[] getGroups() { + return perms.getGroups(); + } +} diff --git a/src/main/java/net/milkbowl/vault2/economy/Economy.java b/src/main/java/net/milkbowl/vault2/economy/Economy.java new file mode 100644 index 0000000..0212c5a --- /dev/null +++ b/src/main/java/net/milkbowl/vault2/economy/Economy.java @@ -0,0 +1,389 @@ +/* This file is part of Vault. + + Vault is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Vault is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Vault. If not, see . + */ + +package net.milkbowl.vault2.economy; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.milkbowl.vault2.economy.EconomyResponse.ResponseType; + +/** + * The main economy API + * + */ +public interface Economy { + + /* + * Economy plugin-related methods follow. + */ + + /** + * Checks if economy plugin is enabled. + * + * @return true if the server's economy plugin has properly enabled. + */ + public boolean isEnabled(); + + /** + * Gets name of the economy plugin. + * + * @return Name of the active economy plugin on the server. + */ + public String getName(); + + /** + * Returns true if the economy plugin supports banks. + * + * @return true if the economy plugin supports banks. + */ + public boolean hasBankSupport(); + + /* + * Currency-related methods follow. + */ + + /** + * Some economy plugins round off after a certain number of digits. This + * function returns the number of digits the plugin keeps or -1 if no rounding + * occurs. + * + * @return number of digits after the decimal point this plugin supports or -1 + * if no rounding occurs. + */ + public int fractionalDigits(); + + /** + * Plugins use this method to format a given BigDecimal amount into a human + * readable amount using your economy plugin's currency names/conventions. + * + * @param amount to format. + * @return Human readable string describing amount, ie 5 Dollars or 5.55 Pounds. + */ + public String format(BigDecimal amount); + + /** + * Returns the name of the currency in plural form. If the economy being used + * does not support currency names then an empty string will be returned. + * + * @return name of the currency (plural) ie: Dollars or Pounds. + */ + public String currencyNamePlural(); + + /** + * Returns the name of the currency in singular form. If the economy being used + * does not support currency names then an empty string will be returned. + * + * @return name of the currency (singular) ie: Dollar or Pound. + */ + public String currencyNameSingular(); + + /* + * Account-related methods follow. + */ + + /** + * Attempts to create a account for the given UUID. + * + * @param uuid UUID associated with the account. + * @param name UUID associated with the account. + * @return true if the account creation was successful. + */ + public boolean createAccount(UUID uuid, String name); + + /** + * Attempts to create an account for the given UUID on the specified world + * IMPLEMENTATION SPECIFIC - if an economy plugin does not support this then + * false will always be returned. + * + * @param uuid UUID associated with the account. + * @param name UUID associated with the account. + * @param worldName String name of the world. + * @return if the account creation was successful + */ + public boolean createAccount(UUID uuid, String name, String worldName); + + /** + * Returns a map that represents all of the UUIDs which have accounts in the + * plugin, as well as their last-known-name. This is used for Vault's economy + * converter and should be given every account available. + * + * @return a {@link Map} composed of the accounts keyed by their UUID, along + * with their associated last-known-name. + */ + public Map getUUIDNameMap(); + + /** + * Gets the last known name of an account owned by the given UUID. Required for + * messages to be more human-readable than UUIDs alone can provide. + * + * @param uuid UUID associated with the account. + * @return name of the account owner. + */ + public String getAccountName(UUID uuid); + + /** + * Checks if this UUID has an account yet. + * + * @param uuid UUID to check for an existing account. + * @return true if the UUID has an account. + */ + public boolean hasAccount(UUID uuid); + + /** + * Checks if this UUID has an account yet on the given world. + * + * @param uuid UUID to check for an existing account. + * @param worldName world-specific account. + * @return if the UUID has an account. + */ + public boolean hasAccount(UUID uuid, String worldName); + + /** + * A method which changes the name associated with the given UUID in the + * Map received from {@link #getUUIDNameMap()}. + * + * @param uuid UUID whose account is having a name change. + * @param name String name that will be associated with the UUID in the + * Map map. + * @return true if the name change is successful. + */ + public boolean renameAccount(UUID uuid, String name); + + /* + * Account balance related methods follow. + */ + + /** + * Gets balance of an account associated with a UUID. + * + * @param uuid UUID of the account to get a balance for. + * @return Amount currently held in account associated with the given UUID. + */ + public BigDecimal getBalance(UUID uuid); + + /** + * Gets balance of a UUID on the specified world. IMPLEMENTATION SPECIFIC - if + * an economy plugin does not support this the global balance will be returned. + * + * @param uuid UUID of the account to get a balance for. + * @param world name of the world. + * @return Amount currently held in account associated with the given UUID. + */ + public BigDecimal getBalance(UUID uuid, String world); + + /** + * Checks if the account associated with the given UUID has the amount - DO NOT + * USE NEGATIVE AMOUNTS. + * + * @param uuid the UUID associated with the account to check the balance of. + * @param amount the amount to check for. + * @return True if UUID has amount, False else wise. + */ + public boolean has(UUID uuid, BigDecimal amount); + + /** + * Checks if the account associated with the given UUID has the amount in the + * given world - DO NOT USE NEGATIVE AMOUNTS IMPLEMENTATION SPECIFIC - if an + * economy plugin does not support this the global balance will be returned. + * + * @param uuid the UUID associated with the account to check the balance of. + * @param worldName the name of the world to check in. + * @param amount the amount to check for. + * @return True if UUID has amount in the given world, + * False else wise. + */ + public boolean has(UUID uuid, String worldName, BigDecimal amount); + + /** + * Withdraw an amount from an account associated with a UUID - DO NOT USE + * NEGATIVE AMOUNTS. + * + * @param uuid the UUID associated with the account to withdraw from. + * @param amount Amount to withdraw. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse withdraw(UUID uuid, BigDecimal amount); + + /** + * Withdraw an amount from an account associated with a UUID on a given world - + * DO NOT USE NEGATIVE AMOUNTS IMPLEMENTATION SPECIFIC - if an economy plugin + * does not support this the global balance will be returned. + * + * @param uuid the UUID associated with the account to withdraw from. + * @param worldName the name of the world to check in. + * @param amount Amount to withdraw. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse withdraw(UUID uuid, String worldName, BigDecimal amount); + + /** + * Deposit an amount to an account associated with the given UUID - DO NOT USE + * NEGATIVE AMOUNTS. + * + * @param uuid the UUID associated with the account to deposit to. + * @param amount Amount to deposit. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse deposit(UUID uuid, BigDecimal amount); + + /** + * Deposit an amount to an account associated with a UUID on a given world - + * DO NOT USE NEGATIVE AMOUNTS IMPLEMENTATION SPECIFIC - if an economy plugin + * does not support this the global balance will be returned. + * + * @param uuid the UUID associated with the account to deposit to. + * @param worldName the name of the world to check in. + * @param amount Amount to deposit. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse deposit(UUID uuid, String worldName, BigDecimal amount); + + /* + * Bank methods follow. + */ + + /** + * Creates a bank account with the specified name and the given UUID as the + * owner. + * + * @param name Name of account. + * @param uuid UUID of the account should be linked to. + * @return true if bank creation is successful. + */ + public boolean createBank(String name, UUID uuid); + + /** + * Deletes a bank account with the specified UUID. + * + * @param uuid UUID of the bank to be deleted. + * @return true if the operation completed successfully + */ + public boolean deleteBank(UUID uuid); + + /** + * Returns a map that represents all of the UUIDs which have banks in the + * plugin, as well as their last-known-name. This is used for Vault's economy + * converter and should be given every account available. + * + * @return a {@link Map} composed of the accounts keyed by their UUID, along + * with their associated last-known-name. + */ + public Map getBankUUIDNameMap(); + + /** + * Gets the last known name of an bank with the given UUID. Required for + * messages to be more human-readable than UUIDs alone can provide. + * + * @param uuid UUID to look up. + * @return name of the bank. + */ + public String getBankAccountName(UUID uuid); + + /** + * Checks if this UUID has a bank yet. + * + * @param uuid UUID to check. + * @return true if the UUID has an account. + */ + public boolean hasBankAccount(UUID uuid); + + /** + * A method which changes the name associated with the given UUID in the + * Map received from {@link #getBankUUIDNameMap()}. + * + * @param uuid UUID which is having a name change. + * @param name name that will be associated with the UUID in the + * Map map. + * @return true if the name change is successful. + */ + public boolean renameBankAccount(UUID uuid, String name); + + /** + * Returns the amount the bank has. + * + * @param uuid UUID of the account. + * @return amount which the bank holds as a balance. + */ + public BigDecimal bankBalance(UUID uuid); + + /** + * Returns true or false whether the bank has the amount specified - DO NOT USE + * NEGATIVE AMOUNTS. + * + * @param uuid UUID of the account. + * @param amount to check for + * @return true if the bank has the given amount. + */ + public boolean bankHas(UUID uuid, BigDecimal amount); + + /** + * Withdraw an amount from a bank account - DO NOT USE NEGATIVE AMOUNTS. + * + * @param uuid UUID of the account. + * @param amount to withdraw. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse bankWithdraw(String name, BigDecimal amount); + + /** + * Deposit an amount into a bank account - DO NOT USE NEGATIVE AMOUNTS. + * + * @param uuid UUID of the account. + * @param amount to deposit. + * @return {@link EconomyResponse} which includes the Economy plugin's + * {@link ResponseType} as to whether the transaction was a Success, + * Failure, Unsupported. + */ + public EconomyResponse bankDeposit(String name, BigDecimal amount); + + /** + * Check if a UUID is the owner of a bank account. + * + * @param uuid UUID of the player/object who might be an owner. + * @param bankUUID UUID of the bank account to check ownership of. + * @return true if the uuid is the owner of the bank associated with bankUUID. + */ + public boolean isBankOwner(UUID uuid, UUID bankUUID); + + /** + * Check if the UUID is a member of the bank account + * + * @param uuid UUID of the player/object who might be a member.. + * @param bankUUID UUID of the bank account to check membership of. + * @return @return true if the uuid is a member of the bank associated with bankUUID. + */ + public boolean isBankMember(UUID uuid, UUID bankUUID); + + /** + * Gets the list of banks' UUIDs. + * + * @return the List of Banks' UUIDs. + */ + public List getBanks(); +} diff --git a/src/main/java/net/milkbowl/vault2/economy/EconomyResponse.java b/src/main/java/net/milkbowl/vault2/economy/EconomyResponse.java new file mode 100644 index 0000000..7e00634 --- /dev/null +++ b/src/main/java/net/milkbowl/vault2/economy/EconomyResponse.java @@ -0,0 +1,92 @@ +/* This file is part of Vault. + + Vault is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Vault is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Vault. If not, see . + */ +package net.milkbowl.vault2.economy; + +import java.math.BigDecimal; + +/** + * Indicates a typical Return for an Economy method. It includes a + * {@link ResponseType} indicating whether the plugin currently being used for + * Economy actually allows the method, or if the operation was a success or + * failure. + * + */ +public class EconomyResponse { + + /** + * Enum for types of Responses indicating the status of a method call. + */ + public static enum ResponseType { + SUCCESS(1), + FAILURE(2), + NOT_IMPLEMENTED(3); + + private int id; + + ResponseType(int id) { + this.id = id; + } + + int getId() { + return id; + } + } + + /** + * Amount modified by calling method + */ + public final BigDecimal amount; + /** + * New balance of account + */ + public final BigDecimal balance; + /** + * Success or failure of call. Using Enum of ResponseType to determine valid + * outcomes + */ + public final ResponseType type; + /** + * Error message if the variable 'type' is ResponseType.FAILURE + */ + public final String errorMessage; + + /** + * Constructor for EconomyResponse + * @param amount Amount modified during operation + * @param balance New balance of account + * @param type Success or failure type of the operation + * @param errorMessage Error message if necessary (commonly null) + */ + public EconomyResponse(BigDecimal amount, BigDecimal balance, ResponseType type, String errorMessage) { + this.amount = amount; + this.balance = balance; + this.type = type; + this.errorMessage = errorMessage; + } + + /** + * Checks if an operation was successful + * @return Value + */ + public boolean transactionSuccess() { + switch (type) { + case SUCCESS: + return true; + default: + return false; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/milkbowl/vault2/permission/Permission.java b/src/main/java/net/milkbowl/vault2/permission/Permission.java new file mode 100644 index 0000000..d602278 --- /dev/null +++ b/src/main/java/net/milkbowl/vault2/permission/Permission.java @@ -0,0 +1,705 @@ +/* This file is part of Vault. + + Vault is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Vault is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Vault. If not, see . + */ +package net.milkbowl.vault2.permission; + +import java.util.logging.Logger; + +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; +import org.bukkit.plugin.Plugin; + +/** + * The main Permission API - allows for group and player based permission tests + * + */ +public abstract class Permission { + + protected static final Logger log = Logger.getLogger("Minecraft"); + protected Plugin plugin = null; + + /** + * Gets name of permission method + * @return Name of Permission Method + */ + abstract public String getName(); + + /** + * Checks if permission method is enabled. + * @return Success or Failure + */ + abstract public boolean isEnabled(); + + /** + * Returns if the permission system is or attempts to be compatible with super-perms. + * @return True if this permission implementation works with super-perms + */ + abstract public boolean hasSuperPermsCompat(); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerHas(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean has(String world, String player, String permission) { + if (world == null) { + return playerHas((String) null, player, permission); + } + return playerHas(world, player, permission); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerHas(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean has(World world, String player, String permission) { + if (world == null) { + return playerHas((String) null, player, permission); + } + return playerHas(world.getName(), player, permission); + } + + /** + * Checks if a CommandSender has a permission node. + * This will return the result of bukkits, generic .hasPermission() method and is identical in all cases. + * This method will explicitly fail if the registered permission system does not register permissions in bukkit. + * + * For easy checking of a commandsender + * @param sender to check permissions on + * @param permission to check for + * @return true if the sender has the permission + */ + public boolean has(CommandSender sender, String permission) { + return sender.hasPermission(permission); + } + + /** + * Checks if player has a permission node. (Short for playerHas(...) + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean has(Player player, String permission) { + return player.hasPermission(permission); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerHas(String, OfflinePlayer, String)} instead. + */ + @Deprecated + abstract public boolean playerHas(String world, String player, String permission); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerHas(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean playerHas(World world, String player, String permission) { + if (world == null) { + return playerHas((String) null, player, permission); + } + return playerHas(world.getName(), player, permission); + } + + /** + * Checks if player has a permission node. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world String world name + * @param player to check + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerHas(String world, OfflinePlayer player, String permission) { + if (world == null) { + return has((String) null, player.getName(), permission); + } + return has(world, player.getName(), permission); + } + + /** + * Checks if player has a permission node. + * Defaults to world-specific permission check if the permission system supports it. + * See {@link #playerHas(String, OfflinePlayer, String)} for explicit global or world checks. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerHas(Player player, String permission) { + return has(player, permission); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerAdd(String, OfflinePlayer, String)} instead. + * Add permission to a player. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param player Player name + * @param permission Permission node + * @return Success or Failure + */ + @Deprecated + abstract public boolean playerAdd(String world, String player, String permission); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerAdd(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean playerAdd(World world, String player, String permission) { + if (world == null) { + return playerAdd((String) null, player, permission); + } + return playerAdd(world.getName(), player, permission); + } + + /** + * Add permission to a player. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world String world name + * @param player to add to + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAdd(String world, OfflinePlayer player, String permission) { + if (world == null) { + return playerAdd((String) null, player.getName(), permission); + } + return playerAdd(world, player.getName(), permission); + } + + /** + * Add permission to a player ONLY for the world the player is currently on. + * This is a world-specific operation, if you want to add global permission you must explicitly use NULL for the world. + * See {@link #playerAdd(String, OfflinePlayer, String)} for global permission use. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAdd(Player player, String permission) { + return playerAdd(player.getWorld().getName(), player, permission); + } + + /** + * Add transient permission to a player. + * This implementation can be used by any subclass which implements a "pure" superperms plugin, i.e. + * one that only needs the built-in Bukkit API to add transient permissions to a player. + * + * @param player to add to + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException { + if (player.isOnline()) { + return playerAddTransient((Player) player, permission); + } + throw new UnsupportedOperationException(getName() + " does not support offline player transient permissions!"); + } + + /** + * Add transient permission to a player. + * This operation adds a permission onto the player object in bukkit via Bukkit's permission interface. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAddTransient(Player player, String permission) { + for (PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) { + if (paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) { + paInfo.getAttachment().setPermission(permission, true); + return true; + } + } + + PermissionAttachment attach = player.addAttachment(plugin); + attach.setPermission(permission, true); + + return true; + } + + /** + * Adds a world specific transient permission to the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to check on + * @param player to add to + * @param permission to test + * @return Success or Failure + */ + public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission) { + return playerAddTransient(player, permission); + } + + /** + * Adds a world specific transient permission to the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to check on + * @param player to check + * @param permission to check for + * @return Success or Failure + */ + public boolean playerAddTransient(String worldName, Player player, String permission) { + return playerAddTransient(player, permission); + } + + /** + * Removes a world specific transient permission from the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to remove for + * @param player to remove for + * @param permission to remove + * @return Success or Failure + */ + public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission) { + return playerRemoveTransient(player, permission); + } + + /** + * Removes a world specific transient permission from the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to check on + * @param player to check + * @param permission to check for + * @return Success or Failure + */ + public boolean playerRemoveTransient(String worldName, Player player, String permission) { + return playerRemoveTransient((OfflinePlayer) player, permission); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerRemove(String, OfflinePlayer, String)} instead. + */ + @Deprecated + abstract public boolean playerRemove(String world, String player, String permission); + + /** + * Remove permission from a player. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param player OfflinePlayer + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemove(String world, OfflinePlayer player, String permission) { + if (world == null) { + return playerRemove((String) null, player.getName(), permission); + } + return playerRemove(world, player.getName(), permission); + } + + /** + * Remove permission from a player. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param player Player name + * @param permission Permission node + * @return Success or Failure + */ + @Deprecated + public boolean playerRemove(World world, String player, String permission) { + if (world == null) { + return playerRemove((String) null, player, permission); + } + return playerRemove(world.getName(), player, permission); + } + + /** + * Remove permission from a player. + * Will attempt to remove permission from the player on the player's current world. This is NOT a global operation. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemove(Player player, String permission) { + return playerRemove(player.getWorld().getName(), player, permission); + } + + + /** + * Remove transient permission from a player. + * This implementation can be used by any subclass which implements a "pure" superperms plugin, i.e. + * one that only needs the built-in Bukkit API to remove transient permissions from a player. Any subclass + * implementing a plugin which provides its own API for this needs to override this method. + * + * @param player OfflinePlayer + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemoveTransient(OfflinePlayer player, String permission) { + if (player.isOnline()) { + return playerRemoveTransient((Player) player, permission); + } else { + return false; + } + } + + /** + * Remove transient permission from a player. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemoveTransient(Player player, String permission) { + for (PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) { + if (paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) { + paInfo.getAttachment().unsetPermission(permission); + return true; + } + } + return false; + } + + /** + * Checks if group has a permission node. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + abstract public boolean groupHas(String world, String group, String permission); + + /** + * Checks if group has a permission node. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupHas(World world, String group, String permission) { + if (world == null) { + return groupHas((String) null, group, permission); + } + return groupHas(world.getName(), group, permission); + } + + /** + * Add permission to a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + abstract public boolean groupAdd(String world, String group, String permission); + + /** + * Add permission to a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupAdd(World world, String group, String permission) { + if (world == null) { + return groupAdd((String) null, group, permission); + } + return groupAdd(world.getName(), group, permission); + } + + /** + * Remove permission from a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World name + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + abstract public boolean groupRemove(String world, String group, String permission); + + /** + * Remove permission from a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupRemove(World world, String group, String permission) { + if (world == null) { + return groupRemove((String) null, group, permission); + } + return groupRemove(world.getName(), group, permission); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerInGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + abstract public boolean playerInGroup(String world, String player, String group); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerInGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean playerInGroup(World world, String player, String group) { + if (world == null) { + return playerInGroup((String) null, player, group); + } + return playerInGroup(world.getName(), player, group); + } + + /** + * Check if player is member of a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World Object + * @param player to check + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(String world, OfflinePlayer player, String group) { + if (world == null) { + return playerInGroup((String) null, player.getName(), group); + } + return playerInGroup(world, player.getName(), group); + } + + /** + * Check if player is member of a group. + * This method will ONLY check groups for which the player is in that are defined for the current world. + * This may result in odd return behaviour depending on what permission system has been registered. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(Player player, String group) { + return playerInGroup(player.getWorld().getName(), player, group); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerAddGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + abstract public boolean playerAddGroup(String world, String player, String group); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerAddGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean playerAddGroup(World world, String player, String group) { + if (world == null) { + return playerAddGroup((String) null, player, group); + } + return playerAddGroup(world.getName(), player, group); + } + + /** + * Add player to a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world String world name + * @param player to add + * @param group Group name + * @return Success or Failure + */ + public boolean playerAddGroup(String world, OfflinePlayer player, String group) { + if (world == null) { + return playerAddGroup((String) null, player.getName(), group); + } + return playerAddGroup(world, player.getName(), group); + } + + /** + * Add player to a group. + * This will add a player to the group on the current World. This may return odd results if the permission system + * being used on the server does not support world-specific groups, or if the group being added to is a global group. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerAddGroup(Player player, String group) { + return playerAddGroup(player.getWorld().getName(), player, group); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerRemoveGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + abstract public boolean playerRemoveGroup(String world, String player, String group); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #playerRemoveGroup(String, OfflinePlayer, String)} instead. + */ + @Deprecated + public boolean playerRemoveGroup(World world, String player, String group) { + if (world == null) { + return playerRemoveGroup((String) null, player, group); + } + return playerRemoveGroup(world.getName(), player, group); + } + + /** + * Remove player from a group. + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world World Object + * @param player to remove + * @param group Group name + * @return Success or Failure + */ + public boolean playerRemoveGroup(String world, OfflinePlayer player, String group) { + if (world == null) { + return playerRemoveGroup((String) null, player.getName(), group); + } + return playerRemoveGroup(world, player.getName(), group); + } + + /** + * Remove player from a group. + * This will add a player to the group on the current World. This may return odd results if the permission system + * being used on the server does not support world-specific groups, or if the group being added to is a global group. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerRemoveGroup(Player player, String group) { + return playerRemoveGroup(player.getWorld().getName(), player, group); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #getPlayerGroups(String, OfflinePlayer)} instead. + */ + @Deprecated + abstract public String[] getPlayerGroups(String world, String player); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #getPlayerGroups(String, OfflinePlayer)} instead. + */ + @Deprecated + public String[] getPlayerGroups(World world, String player) { + if (world == null) { + return getPlayerGroups((String) null, player); + } + return getPlayerGroups(world.getName(), player); + } + + /** + * Gets the list of groups that this player has + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world String world name + * @param player OfflinePlayer + * @return Array of groups + */ + public String[] getPlayerGroups(String world, OfflinePlayer player) { + return getPlayerGroups(world, player.getName()); + } + + /** + * Returns a list of world-specific groups that this player is currently in. May return unexpected results if + * you are looking for global groups, or if the registered permission system does not support world-specific groups. + * See {@link #getPlayerGroups(String, OfflinePlayer)} for better control of World-specific or global groups. + * + * @param player Player Object + * @return Array of groups + */ + public String[] getPlayerGroups(Player player) { + return getPlayerGroups(player.getWorld().getName(), player); + } + + /** + * @deprecated As of VaultAPI 1.4 use {@link #getPrimaryGroup(String, OfflinePlayer)} instead. + */ + @Deprecated + abstract public String getPrimaryGroup(String world, String player); + + /** + * @deprecated As of VaultAPI 1.4 use {@link #getPrimaryGroup(String, OfflinePlayer)} instead. + */ + @Deprecated + public String getPrimaryGroup(World world, String player) { + if (world == null) { + return getPrimaryGroup((String) null, player); + } + return getPrimaryGroup(world.getName(), player); + } + + /** + * Gets players primary group + * Supports NULL value for World if the permission system registered supports global permissions. + * But May return odd values if the servers registered permission system does not have a global permission store. + * + * @param world String world name + * @param player to get from + * @return Players primary group + */ + public String getPrimaryGroup(String world, OfflinePlayer player) { + return getPrimaryGroup(world, player.getName()); + } + + /** + * Get players primary group. + * Defaults to the players current world, so may return only world-specific groups. + * In most cases {@link #getPrimaryGroup(String, OfflinePlayer)} is preferable. + * + * @param player Player Object + * @return Players primary group + */ + public String getPrimaryGroup(Player player) { + return getPrimaryGroup(player.getWorld().getName(), player); + } + + /** + * Returns a list of all known groups + * @return an Array of String of all groups + */ + abstract public String[] getGroups(); + + /** + * Returns true if the given implementation supports groups. + * @return true if the implementation supports groups + */ + abstract public boolean hasGroupSupport(); +} \ No newline at end of file