1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Подключение Vault к своему плагину

Тема в разделе "Разработка плагинов для новичков", создана пользователем NeMaster, 3 ноя 2021.

  1. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    Второй день погружения в яву и плагины. Простой плагин уровня "Привет мир" сделал.
    Сейчас хотел наладить интеграцию с Vault и не очень понимаю как это в принципе делать, но гугл в основном даёт ответы как плагин в папку плагинов залить, а не в проекте своего плагина заюзать.

    Пишу в эклипсе. Для использования класса экономики Vault его надо импортировать, а для этого по всей видимости подключить к проекту,
    Я подключил библиотеку ту же что и на сервер как плагин заливаю, возможно надо как то использовать VaultAPI (но пока не знаю как).
    Класс импортируется, но вот тут я получаю null и не пойму как продвинуться дальше.
    Код:
    RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
     
  2. ZDCoder

    ZDCoder Активный участник Пользователь

    Баллы:
    76
    RegisteredServiceProvider<Economy> ec = Bukkit.getServicesManager().getRegistration(Economy.class);

    в onEnable() это.
     
  3. FailsHD

    FailsHD Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Unknown
    Отлично типу подсказал, для начала ему нужно репу закинуть, потом делать проверку на работу совместимости VaultAPI.


    private Economy eco;

    @Override
    public void onEnable() {
    eco = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
    }

    public Economy getEco() {
    return eco;
    }

    Если что, просто вставляешь это в главный класс окуратно.

    :good::cool:
     
  4. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    Наверняка проблема в чём то очень простом, на столько простом, что опытному человеку и в голову не придёт что так можно протупить, но увы, пока нет контакта.

    Куда и какую репу кидать, что там про VaultAPI? Чую где то тут я туплю, наверно не надо vault. jar к проекту подключать, а как то подключать АПИ?

    Код:
    import net.milkbowl.vault.economy.Economy;
    
    public class Tutorial extends JavaPlugin implements Listener {
    
        public static Economy econ = null;
    
        @Override
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
    
            saveDefaultConfig();
            reloadConfig();
    
            setupEconomy();
        }
    
        private boolean setupEconomy() {
            RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServicesManager().getRegistration(Economy.class);
            if (economyProvider != null) {
                econ = economyProvider.getProvider();
            }
           
            return econ != null;
        }
    
        @Override
        public boolean onCommand(CommandSender s, Command cmd, String label, String args[]) {
            if(cmd.getName().equalsIgnoreCase("welcome")) {
                Player p = (Player) s;
                double money;
                if (econ == null) s.sendMessage(ChatColor.BLUE+"Привет, всё плохо!");
                else money = econ.getBalance(p);
    
                s.sendMessage(ChatColor.BLUE+"Привет ");
                return true;
            }
    }
    
    При вводе команды велком поучаю "Привет, всё плохо!"
     
    Последнее редактирование: 3 ноя 2021
  5. FailsHD

    FailsHD Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Unknown

    Код:
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import net.milkbowl.vault.economy.Economy;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Tutorial extends JavaPlugin implements CommandExecutor {
    
        @Override
        public void onEnable() {
    
            saveDefaultConfig();
            reloadConfig();
    
            setupEconomy();
    
            Bukkit.getServer().getPluginCommand("welcome").setExecutor(this);
        }
        @Override
        public void onDisable() {
    
        }
    
        private boolean setupEconomy() {
            RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServicesManager().getRegistration(Economy.class);
            if (economyProvider != null) {
                econ = economyProvider.getProvider();
            }
    
            return econ != null;
        }
    
        @Override
        public boolean onCommand(CommandSender s, Command cmd, String label, String args[]) {
            if (cmd.getName().equalsIgnoreCase("welcome")) {
                Player p = (Player) s;
                double money;
                if (econ == null) s.sendMessage(ChatColor.BLUE + "Привет, всё плохо!");
                else money = econ.getBalance(p);
    
                s.sendMessage(ChatColor.BLUE + "Привет ");
                return true;
            }
            return false;
        }
    }
    
    Наклепал на коленке. Заимпортируй классы которых нехватает.
     
  6. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    А какой-нибудь плагин на экономику стоит?
     
  7. FailsHD

    FailsHD Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Unknown
    У него заимпортирован Vault, я думаю он не настолько глупый, что бы импортировать ваулт и не ставить его на сервер
     
  8. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Плагин экономики и Vault как таковой - разные вещи.
     
  9. FailsHD

    FailsHD Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Unknown
    Vault дополнение к экономике, я же немного запарился и написал что это плагин который является экономическим, и случайно перепутал.
     
  10. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Я не понимаю, зачем ты мне это пишешь. Я лишь говорю, что помимо Vault на сервере должен быть плагин на экономику, вроде того же Essentials, иначе сервиса экономики просто не будет, от чего и econ == null.
     
  11. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    Друзья, без вас бы я ещё долго искал бы проблему в проекте. Действительно добавил плагин
    EssentialsX и стал получать баланс. Попробую его ещё и менять сейчас, думаю должно получиться.

    Кстати, по поводу зоны ответственности плагинов я хотел тоже обсудить. Я могу предполажить что задача Vault стандартизировать интерфейс к экономике, но саму экономику не реализовывать. Я думал что простейшие вещи вроде баланса в нём уже будут.

    Я наверно хотел бы свою экономику сделать. В частности у меня мысль связать аккаунт, с криптовым кошельком, в частности RTM, так как их любой желающий за ночь может намайнить пару сотен без спец оборудования. Но то что Vault по умолчанию баланс полагает как double, мне кажется не особо удобным, было бы удобнее что бы это были целые числа, типа не в целых монетах, а в их долях, типа сатошиках, а точку бы я уже сам бы в нужном месте поставил, но знал бы что не возникнет проблем с арифметикой десятичных чисел.
     
  12. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    А можете направить в правильную сторону, как мне свою экономику в Vault подключить, не перетаскивая Essentials? Мне хочется чтобы лишних команд не было, а нужные мне были, так что я лучше их сам запраграммирую, только бы взять верный след из хлебных крошек :)
     
  13. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    В общем-то, так и есть.
    Всё, что нужно - реализовать экономику (в VaultAPI есть вспомогательный абстрактный класс для начала). Далее, всё, что остаётся - зарегистрировать сервис (пример из Ess, просто подмени VaultEconomyProvider на свою экономику).
    Немного странный вариант по поводу целочисленности, но в целом, это одна из причин, по которой Vault недолюбливают в наше время. Было бы лучше работать с BigDecimal, например. Собственно, под капотом Ess это и использует. Vault несколько устарел морально, а разработчик им уже давно толком не занимаются (до сих пор нет прямой поддержки UUID).
    Есть Reserve - он пытался стать новым Vault, но в итоге его API слишком нестабильно, вплоть до стилистики кода в разных участках проекта. Потихоньку готовится Treasury, который учитывает пожелания разработчиков, но появился он буквально месяц-полтора назад, и пока не готов для публичного использования.
     
  14. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    Согласен, не особо универсальный и очевидный подход ))
    Не в бровь, а в глаз. Смотрю на исходники Ess и готов к себе забирать :) А за хранение данных отвечает плагин экономики, и когда третий плагин у Vault запрашивает баланс, запрос по сути обработает Ess, но Ess, обязан вернуть double? Или прослойка в передаче запроса в виде Vaulta есть и Vault получает и переадресует запрос(вызов метода)?

    А приводить логины к нижнему регистру это общепринятая практика и мне так следует делать? Я вижу что ess игнорит регистр.
     
  15. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    За всё отвечает плагин экономики - в данном случае Vault лишь даёт возможность реализовать свой интерфейс Economy. И, к сожалению, да, это обязывает прослойку возвращать и принимать double. В пределах же плагина, это может быть что угодно.
    Ess сохраняет зашедших игроков в карту - их ник в нижнем регистре, их обычный ник, их UUID. Т.к. пользователь может ввести ник неправильно (в плане регистра), Ess все равно сможет "понять", кого именно тот имеет ввиду.
     

Поделиться этой страницей