Vault of common APIs for Bukkit Plugins
Go to file
2013-02-06 16:41:55 -08:00
lib build against latest beta. Added missing 1.4.6 items. 2013-01-20 14:09:39 -08:00
src/net/milkbowl/vault don't check if economy is enabled in PluginEnableEvent assume it is 2013-02-06 16:32:39 -08:00
.gitignore Some fractionalDigits() 2012-06-22 23:19:15 -05:00
build.xml added javadoc links to pom.xml/build.xml 2012-06-27 12:40:06 -07:00
license.txt probably need to push the library too 2012-02-19 00:24:10 -08:00
plugin.yml don't check plugin enabled status when hooking a plugin in 2013-02-06 16:25:43 -08:00
pom.xml compile against Priveleges repository version. 2013-02-06 16:41:55 -08:00
README.md fixed sample code in README 2012-12-10 12:55:08 -08:00

Vault - Abstraction Library for Bukkit Plugin

Installing

Installing Vault is as simple as copying the provided "Vault.jar" to your "/plugins" directory and the rest is automatic! If you wish to perform configuration changes, this can be done via a configuration file but should not be necessary in most cases. See the "Advanced Configuration" section for more information.

Why Vault?

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 All of Vault is run in its own plugin, so all you need to do is obtain an instance of it! This simplifies issues with multiple plugins using the same namespaces. Just simply add Vault.jar to your download zip file!
  • Broad range of supported plugins I wanted an abstraction layer not only for Economic plugins but also Permission plugins as well. The future will likely add more, but what types, I have yet to decide, let me know!
  • Choice! That's half the fun of Bukkit, we get to choose what to use! More choice has never hurt developers so here's to choice!

Permissions

  • vault.admin
    • Determines if a player should recieve the update notices

License

Copyright (C) 2011 Morgan Humes morgan@lanaddict.com

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/.

Building

Vault comes with all libraries needed to build from the current branch and also comes with an Apache Ant build file (build.xml).

Dependencies

Because Vault provides a bridge to other plugins, their binaries will be required to build from. To ease this, they have been included in the lib folder and will be updated from time to time. For plugin developers, it is not necessary to use these libraries when implementing Vault. You will only need to compile against Vault.

Supported Plugins

Vault provides abstraction for the following categories and plugins. If you have your own plugin that you believe should be supported, fork Vault or create a patch with the necessary changes. Additionally you can create an issue on Github and we'll get to it at our convenience.

Implementing Vault

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 java.util.logging.Logger;

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 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 final Logger log = Logger.getLogger("Minecraft");
    public static Economy econ = null;
    public static Permission perms = null;
    public static Chat chat = null;

    @Override
    public void onDisable() {
        log.info(String.format("[%s] Disabled Version %s", getDescription().getName(), getDescription().getVersion()));
    }

    @Override
    public void onEnable() {
        if (!setupEconomy() ) {
            log.severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
        setupPermissions();
        setupChat();
    }
    
    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }
        RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
        if (rsp == null) {
            return false;
        }
        econ = rsp.getProvider();
        return econ != null;
    }
    
    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)) {
            log.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.getName(), 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;
        }
    }
}