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

  • Автор темы Автор темы NeMaster
  • Дата начала Дата начала

NeMaster

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

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

в onEnable() это.
 
RegisteredServiceProvider<Economy> ec = Bukkit.getServicesManager().getRegistration(Economy.class);

в onEnable() это.
Отлично типу подсказал, для начала ему нужно репу закинуть, потом делать проверку на работу совместимости VaultAPI.


private Economy eco;

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

public Economy getEco() {
return eco;
}

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

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

Куда и какую репу кидать, что там про 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;
        }
}

При вводе команды велком поучаю "Привет, всё плохо!"
 
Последнее редактирование:
Наверняка проблема в чём то очень простом, на столько простом, что опытному человеку и в голову не придёт что так можно протупить, но увы, пока нет контакта.

Куда и какую репу кидать, что там про 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;
        }
}

При вводе команды велком поучаю "Привет, всё плохо!"


Код:
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;
    }
}

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

Куда и какую репу кидать, что там про 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;
        }
}

При вводе команды велком поучаю "Привет, всё плохо!"
А какой-нибудь плагин на экономику стоит?
 
Плагин экономики и Vault как таковой - разные вещи.
Vault дополнение к экономике, я же немного запарился и написал что это плагин который является экономическим, и случайно перепутал.
 
Vault дополнение к экономике, я же немного запарился и написал что это плагин который является экономическим, и случайно перепутал.
Я не понимаю, зачем ты мне это пишешь. Я лишь говорю, что помимо Vault на сервере должен быть плагин на экономику, вроде того же Essentials, иначе сервиса экономики просто не будет, от чего и econ == null.
 
Друзья, без вас бы я ещё долго искал бы проблему в проекте. Действительно добавил плагин
EssentialsX и стал получать баланс. Попробую его ещё и менять сейчас, думаю должно получиться.

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

Я наверно хотел бы свою экономику сделать. В частности у меня мысль связать аккаунт, с криптовым кошельком, в частности RTM, так как их любой желающий за ночь может намайнить пару сотен без спец оборудования. Но то что Vault по умолчанию баланс полагает как double, мне кажется не особо удобным, было бы удобнее что бы это были целые числа, типа не в целых монетах, а в их долях, типа сатошиках, а точку бы я уже сам бы в нужном месте поставил, но знал бы что не возникнет проблем с арифметикой десятичных чисел.
 
А можете направить в правильную сторону, как мне свою экономику в Vault подключить, не перетаскивая Essentials? Мне хочется чтобы лишних команд не было, а нужные мне были, так что я лучше их сам запраграммирую, только бы взять верный след из хлебных крошек :)
 
Кстати, по поводу зоны ответственности плагинов я хотел тоже обсудить. Я могу предполажить что задача Vault стандартизировать интерфейс к экономике, но саму экономику не реализовывать.
В общем-то, так и есть.
Я наверно хотел бы свою экономику сделать.
А можете направить в правильную сторону, как мне свою экономику в Vault подключить, не перетаскивая Essentials? Мне хочется чтобы лишних команд не было, а нужные мне были, так что я лучше их сам запраграммирую, только бы взять верный след из хлебных крошек
Всё, что нужно - реализовать экономику (в VaultAPI есть вспомогательный абстрактный класс для начала). Далее, всё, что остаётся - зарегистрировать сервис (пример из Ess, просто подмени VaultEconomyProvider на свою экономику).
Но то что Vault по умолчанию баланс полагает как double, мне кажется не особо удобным, было бы удобнее что бы это были целые числа, типа не в целых монетах, а в их долях, типа сатошиках, а точку бы я уже сам бы в нужном месте поставил, но знал бы что не возникнет проблем с арифметикой десятичных чисел.
Немного странный вариант по поводу целочисленности, но в целом, это одна из причин, по которой Vault недолюбливают в наше время. Было бы лучше работать с BigDecimal, например. Собственно, под капотом Ess это и использует. Vault несколько устарел морально, а разработчик им уже давно толком не занимаются (до сих пор нет прямой поддержки UUID).
Есть Reserve - он пытался стать новым Vault, но в итоге его API слишком нестабильно, вплоть до стилистики кода в разных участках проекта. Потихоньку готовится Treasury, который учитывает пожелания разработчиков, но появился он буквально месяц-полтора назад, и пока не готов для публичного использования.
 
Немного странный вариант по поводу целочисленности
Согласен, не особо универсальный и очевидный подход ))
Собственно, под капотом Ess это и использует.
Не в бровь, а в глаз. Смотрю на исходники Ess и готов к себе забирать :) А за хранение данных отвечает плагин экономики, и когда третий плагин у Vault запрашивает баланс, запрос по сути обработает Ess, но Ess, обязан вернуть double? Или прослойка в передаче запроса в виде Vaulta есть и Vault получает и переадресует запрос(вызов метода)?

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