Vault of common APIs for Bukkit Plugins
Go to file
2012-01-11 16:14:38 -08:00
lib bPerms 2.6.x support, blech. 2012-01-11 12:11:25 -08:00
src/net/milkbowl/vault don't load a pass-through for HeroTitles, just throw exceptions. 2012-01-11 16:14:38 -08:00
.gitignore update gitignore and pom.xml - pom now directly downloads PEX from 2011-12-27 09:50:34 -08:00
build.xml anal retentiveness has been defeated (fixed warning in ant file) 2012-01-08 14:16:06 -08:00
plugin.yml build numbers via maven (cross your fingers) 2012-01-08 15:55:36 -08:00
pom.xml updated pom.xml 2012-01-11 12:15:50 -08:00
README.md updated the example to the current implementations. 2012-01-07 09:55:04 -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

None! Vault has no permission nodes itself.

Advanced Configuration

It isn't implemented yet, but the goal is to allow disabling of specific plugins by their namespace in a /plugins/Vault/vault.properties configuration file. It won't be necessary except for really oddball situations.

License

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

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

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 through obtaining an instance through the Bukkit PluginManager class by using the string "Vault". An example plugin with limited functionality is located within the VaultExamplePlugin repository (https://github.com/MilkBowl/VaultExamplePlugin).

Example:

package com.example.plugin;

import java.util.logging.Logger;

import net.milkbowl.vault.Vault;
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.Plugin;
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(Level.INFO, String.format("[%s] Disabled Version %s", getDescription().getName(), getDescription().getVersion()));
    }

    @Override
    public void onEnable() {
        if (!setupEconomy() ) {
            log.info(Level.SEVERE, String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName()));
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
        setupPermission();
        setupChat();
    }
    
    private boolean setupEconomy() {
        if (getServer().getPluginManager().getPlugin("Vault") == null) {
            return false;
        }
        RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
        econ = rsp.getProvider();
        return econ != null;
    }
    
    private boolean setupChat() {
        RegistereredServiceProvider<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", vault.getEconomy().format(vault.getEconomy().getBalance(player.getName()).amount)));
            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.hasPermission(player, "example.plugin.awesome", false)) {
                sender.sendMessage("You are awesome!");
            } else {
                sender.sendMessage("You suck!");
            }
            return true;
        } else {
            return false;
        }
    }
}