How to include the API with Maven:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.federkone</groupId>
<artifactId>VaultAPI</artifactId>
<version>master-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>How to include the API with Gradle:
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
compileOnly "com.github.federkone:VaultAPI:master-SNAPSHOT"
}Implementing Vault is quite simple. It requires getting the Economy, Permission, or Chat service from the Bukkit ServiceManager. See the example below:
package com.example.plugin;
import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyMultiCurrency;
import net.milkbowl.vault.economy.EconomyResponse;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
public class ExamplePlugin extends JavaPlugin {
private static EconomyMultiCurrency economyMultiCurrency = null;
private static Economy economy = null;
private static Permission perms = null;
private static Chat chat = null;
@Override
public void onDisable() {
getLogger().info(String.format("[%s] Disabled Version %s", getDescription().getName(), getDescription().getVersion()));
}
@Override
public void onEnable() {
setupEconomy();
setupPermissions();
setupChat();
}
private setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}
RegisteredServiceProvider<Economy> providerVault_v_1_7_3 = getServer().getServicesManager().getRegistration(Economy.class); //Vault v1.7.3 and earlier
RegisteredServiceProvider<EconomyMultiCurrency> providerVault_v_2_0_0 = getServer().getServicesManager().getRegistration(EconomyMultiCurrency.class); //EconomyMultiCurrency extends Economy
if (providerVault_v_1_7_3 != null) {
economy = providerVault_v_1_7_3.getProvider();
}
if (providerVault_v_2_0_0 != null) {
economyMultiCurrency = providerVault_v_2_0_0.getProvider();
}
//If you want, you can only capture EconomyMulticurrency since it extends Economy
//Example:
if (economyMultiCurrency != null) {
economy = economyMultiCurrency; //EconomyMultiCurrency unboxing to Economy
}
// This feature will allow us to inject EconomyMultiCurrency into existing systems that consume Economy.class
}
private boolean setupChat() {
RegisteredServiceProvider<Chat> rsp = getServer().getServicesManager().getRegistration(Chat.class);
chat = rsp.getProvider();
return chat != null;
}
private boolean setupPermissions() {
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
perms = rsp.getProvider();
return perms != null;
}
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
getLogger().info("Only players are supported for this Example Plugin, but you should not do this!!!");
return true;
}
Player player = (Player) sender;
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);
if (r.transactionSuccess()) {
sender.sendMessage(String.format("You were given %s and now have %s", econ.format(r.amount), econ.format(r.balance)));
} else {
sender.sendMessage(String.format("An error occured: %s", r.errorMessage));
}
return true;
} else if (command.getLabel().equals("test-permission")) {
// Lets test if user has the node "example.plugin.awesome" to determine if they are awesome or just suck
if (perms.has(player, "example.plugin.awesome")) {
sender.sendMessage("You are awesome!");
} else {
sender.sendMessage("You suck!");
}
return true;
} else {
return false;
}
}
public static Economy getEconomy() {
return econ;
}
public static Permission getPermissions() {
return perms;
}
public static Chat getChat() {
return chat;
}
}I have no preference which library suits your plugin and development efforts best. Really, I thought a central suite (rather...Vault) of solutions was the the proper avenue than focusing on a single category of plugin. That's where the idea for Vault came into play.
So, what features do I think you'll like the most?
- No need to include my source code in your plugin
- Broad range of supported plugins
- Choice!
Copyright (C) 2011-2018 Morgan Humes [email protected]
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 http://www.gnu.org/licenses/.
VaultAPI comes with all libraries needed to build from the current branch.