您尚未登录,请登录后浏览更多内容! 登录 | 加入最MC

QQ登录

只需一步,快速开始

 找回密码
 加入最MC

QQ登录

只需一步,快速开始

查看: 10994|回复: 1
打印 上一主题 下一主题

[教程]让你的插件使用Vault

[复制链接]
  • TA的每日心情
    慵懒
    2019-2-10 10:44
  • 签到天数: 56 天

    [LV.5]常住居民I

    跳转到指定楼层
    楼主
    发表于 2017-2-28 22:27:36 | 只看该作者 |0人打赏回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 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. }
    复制代码

    后话

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


    评分

    参与人数 1人气 +1 MC币 +10 收起 理由
    1356726241 + 1 + 10 zuimc有你更精彩~

    查看全部评分

    打赏

    0

    收藏

    0

    支持

    0

    反对

    0

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    您需要登录后才可以回帖 登录 | 加入最MC

    本版积分规则