Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите VaultAPI Chat возвращает null

JustMelon_

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
JustMelon_
Добрый день, форумчане! Я пытаюсь написать свою первую API, и я попытался вынести класс Chat плагина Vault в отдельный менеджер, который содержит в себе методы получения ника игрока, префикса и т.д. Но я столкнулся с трудностями: при запуске плагина у меня появляется ошибка
Код:
Cannot invoke "net.milkbowl.vault.chat.Chat.getPlayerPrefix(String, org.bukkit.OfflinePlayer)" because the return value of "ru.pandaworld.api.bukkit.modules.vault.providers.VaultChatManager.getChat()" is null
Вызываю я этот метод в другом моём плагине, который использует API.
Код:
    @EventHandler
    public void MessageJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        String name = player.getName();
        event.setJoinMessage(PandaWorldAPI.getVaultManager().getVaultPlayer(name).getPrefix() + name + ChatColor.WHITE + " вошёл в лобби!");
    }

Я немного не понимаю, что я сделал не так, ведь в официальной VaultAPI регистрация проходит так же, как и у меня.

Мой VaultChatManager
Код:
package ru.pandaworld.api.bukkit.modules.vault.providers;

import net.milkbowl.vault.chat.Chat;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;

public final class VaultChatManager {

    private final Chat chat;

    public Chat getChat() {
        return this.chat;
    }

    public VaultChatManager() {
        RegisteredServiceProvider<Chat> serviceProvider = Bukkit.getServer().getServicesManager().getRegistration(Chat.class);
        if (serviceProvider != null)
            this.chat = serviceProvider.getProvider();
        else this.chat = null;
    }
}

Официальный метод регистрации
Код:
    private boolean setupChat() {
        RegisteredServiceProvider<Chat> rsp = getServer().getServicesManager().getRegistration(Chat.class);
        chat = rsp.getProvider();
        return chat != null;
    }

Гласный класс у меня выглядит так:
Код:
package ru.pandaworld.api.bukkit;

import org.bukkit.plugin.java.JavaPlugin;
import ru.pandaworld.api.bukkit.modules.vault.VaultManager;

public final class PandaWorldAPI extends JavaPlugin {
    @Override
    public void onEnable() {
        getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
    }

    public static VaultManager getVaultManager() {
        return vaultManager;
    }

    public static VaultManager vaultManager = new VaultManager();
}

Все методы у меня вынесены в отдельный менеджер, код слишком большой, поэтому я загрузил его на https://pastebin.com/WFFtyssS

Пожалуйста, помогите мне исправить эту ошибку, потому что я уже не знаю, что делать. На англоязычном бакките нашёл подобную тему, но она была закрыта автором по причине "я сам понял, что не так". Заранее благодарю всех, кто прочитал всё это. Хорошего вам дня!
 
Я получаю префикс вот так.

Метод подключения к Vault у меня выглядит как официальный:
Код:
private void setupVaultChat() {
    RegisteredServiceProvider<Chat> rsp = getServer().getServicesManager().getRegistration(Chat.class);
    requireNonNull(rsp);
    vaultChat = rsp.getProvider();
}

"Chat.class" это абстрактный класс "net.milkbowl.vault.chat.Chat" из VaultAPI .

Чтобы получить эту переменную из главного класса, я использую метод:
Код:
public Chat getVaultChat() {
    return vaultChat;
}

Отдельного менеджера у меня нету.
Чтобы получить префикс игрока я использую такую вот строчку:
Код:
String playerPrefix = plugin.getVaultChat().getPlayerPrefix(player);

Надеюсь, помог
 
Последнее редактирование:
Особо не вчитывался в вопрос, но попробуй в plugin.yml указать этот параметр:
load: STARTUP
 

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

Назад
Верх