最MC论坛

标题: [教程]让你的插件使用Vault [打印本页]

作者: lss233    时间: 2017-2-28 22:27
标题: [教程]让你的插件使用Vault
本帖最后由 lss233 于 2017-3-26 10:42 编辑

VaultAPI
Vault是一个集权限、聊天、经济系统为一体的API。通过它,你可以不用纠结于与每个涉及到插件的接口对接,加快你的开发速度和插件质量。提示:本帖给出的教程背景为Eclipse,如果你使用的是其他开发环境,请自行变通。

添加依赖

A.通过Maven

如果你是通过Maven来构建自己插件的,那么把Vault添加到依赖中十分简单。
打开pom.xml,在<repositories>....</repositories>代码段中加入以下内容:
  1.         <repository>
  2.             <id>vault-repo</id>
  3.             <url>http://nexus.hc.to/content/repositories/pub_releases</url>
  4.         </repository>
复制代码
然后,在<dependencies>....</dependencies>代码段中加入以下内容:
  1.         <dependency>
  2.             <groupId>net.milkbowl.vault</groupId>
  3.             <artifactId>VaultAPI</artifactId>
  4.             <version>1.6</version>
  5.             <scope>provided</scope>
  6.         </dependency>
复制代码
保存文件,你的Eclipse会在后台自动为你下载依赖。
B.通过常规方法

这里的常规方法指的是通过直接创建默认的Java项目来开发插件的,我认为这是一种很不好的开发习惯。

其实这些步骤就和你当初导入服务端核心是一样的。
在plugin.yml中声明依赖

打开plugin.yml,在里面添加下面这行代码:
  1. depend: [Vault]
复制代码
这很重要!


使用Vault

Vault的使用非常简便,下面这段代码简单演示了Vault的使用方法,相信你看完就能明白了。
  1. package cc.darksky.example;

  2. import net.milkbowl.vault.chat.Chat;
  3. import net.milkbowl.vault.economy.Economy;
  4. import net.milkbowl.vault.economy.EconomyResponse;
  5. import net.milkbowl.vault.permission.Permission;

  6. import org.bukkit.command.Command;
  7. import org.bukkit.command.CommandSender;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.plugin.RegisteredServiceProvider;
  10. import org.bukkit.plugin.java.JavaPlugin;

  11. public class ExamplePlugin extends JavaPlugin {
  12.     public static Economy econ = null;
  13.     public static Permission perms = null;
  14.     public static Chat chat = null;

  15.     @Override
  16.     public void onEnable() {
  17.         if (getServer().getPluginManager().getPlugin("Vault") == null) {
  18.             getLogger().info("没有发现Vault,插件无法继续使用!");
  19.             //禁用插件
  20.             getServer().getPluginManager().disablePlugin(this);
  21.             return;
  22.         }
  23.     // 初始化经济服务
  24.     setupEconomy());
  25.     //初始化权限服务
  26.     setupPermissions();
  27.     //初始化聊天服务
  28.     setupChat();
  29. }

  30. private void setupEconomy() {
  31.     RegisteredServiceProvider < Economy > rsp = getServer().getServicesManager().getRegistration(Economy.class);
  32.     econ = rsp.getProvider();
  33. }

  34. private void setupChat() {
  35.     RegisteredServiceProvider < Chat > rsp = getServer().getServicesManager().getRegistration(Chat.class);
  36.     chat = rsp.getProvider();
  37. }

  38. private void setupPermissions() {
  39.     RegisteredServiceProvider < Permission > rsp = getServer().getServicesManager().getRegistration(Permission.class);
  40.     perms = rsp.getProvider();
  41. }

  42. public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
  43.     if (!(sender instanceof Player)) {
  44.         getLogger().info("只有玩家才能这么做");
  45.         return true;
  46.     }

  47.     Player player = (Player) sender;

  48.     if (command.getLabel().equals("test-economy")) { //输入指令 /test-economy
  49.             // 给一名玩家1.05元,有些经济插件可能会出现舍入的情况。
  50.             sender.sendMessage(String.format("你现在只有 %s 元", econ.format(econ.getBalance(player.getName()))));
  51.             EconomyResponse r = econ.depositPlayer(player, 1.05);
  52.             if(r.transactionSuccess()) {
  53.                 sender.sendMessage(String.format("你刚刚得到了 %s 元,现在总共有 %s 元", econ.format(r.amount), econ.format(r.balance)));
  54.             } else {
  55.                 sender.sendMessage(String.format("遇到了一个问题: %s", r.errorMessage));
  56.             }
  57.             return true;
  58.         } else if(command.getLabel().equals("test-permission")) {
  59.             // 判断玩家是否拥有某个权限
  60.             if(perms.has(player, "example.baka")) {
  61.                 sender.sendMessage("您拥有这个权限!");
  62.             } else {
  63.                 sender.sendMessage("您没有权限执行这个指令!");
  64.             }
  65.             return true;
  66.         } else {
  67.             return false;
  68.         }
  69.     }
  70. }
复制代码

后话

如果你在使用过程中遇到了问题,下面这些链接说不定能帮助到你:
如果你还有什么疑问,也可以在这个帖子下提出。
如果本帖有什么错误,还请各位批评指正!



作者: Spider_Man    时间: 2017-5-6 16:56





欢迎光临 最MC论坛 (http://www.zuimc.com/) Powered by Discuz! X3.2