Плагин уже инициализирован - PullRequest
0 голосов
/ 29 мая 2020

Я делаю плагин для телепортации между серверами в bungeecord. Вдруг, не знаю как, но начинается ошибка. Подскажите, в чем проблема? Спасибо за ваш ответ.

Full Stacktrace:

org.bukkit.plugin.InvalidPluginException: java .lang.IllegalArgumentException: плагин уже инициализирован! в org.bukkit.plugin. java .JavaPluginLoader.loadPlugin (JavaPluginLoader. java: 139) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin. SimplePluginManager.loadPlugin (SimplePluginManager. java: 334) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin.SimplePluginManager.loadPlugins (SimplePluginManager): 253 java ) [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.craftbukkit.v1_15_R1.CraftServer.loadPlugins (CraftServer. java: 351) [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] на net .minecraft.server.v1_15_R1.DedicatedServer.init (DedicatedServer. java: 203) [spigot-1.15.2.jar: git -Spigot-800b93f- 8160e29] на net .minecraft.server.v1_15_R1.MinecraftServer.run (MinecraftServer. java: 784) [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] на java .lang .Thread.run (Thread. java: 830) [?:?] Вызвано: java .lang.IllegalArgumentException: плагин уже инициализирован! в org.bukkit.plugin. java .PluginClassLoader.initialize (PluginClassLoader. java: 178) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin. java .JavaPlugin. (JavaPlugin. java: 52) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в pl.piotrek.main.Main. (Main. java : 9) ~ [?:?] В jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [?:?] В jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl. java: 62) ?:?] в jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl. java: 45) ~ [?:?] в java .lang.reflect.Constructor.newInstanceWithCaller (Конструктор. java: 500) ~ [?:?] в java .lang.reflect.ReflectAccess.newInstance (ReflectAccess. java: 166) ~ [?:?] в jdk.internal.reflect.ReflectionFactory.newInstance (ReflectionFactory. java: 404) ~ [?:?] В java .lang.Class.newInstance (Class. java: 591) ~ [?:?] В org.bukkit.plugin. java .PluginClassLoader. (PluginClass Загрузчик. java: 72) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin. java .JavaPluginLoader.loadPlugin (JavaPluginLoader. java: 135 ) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] ... еще 6 Причин: java .lang.IllegalStateException: Начальная инициализация в org.bukkit.plugin. java. PluginClassLoader.initialize (PluginClassLoader. java: 181) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin. java .JavaPlugin. (JavaPlugin. java: 52) ~ [spigot-1.15.2.jar: git -Spigot-800b93f-8160e29] в pl.piotrek.main.Main. (Main. java: 9) ~ [?:?] В jdk .internal.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [?:?] в jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl. java: 62) ~ [?:?] в jrefk.internal. DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl. java: 45) ~ [?:?] В java .lang.reflect.Constructor.newInstanceWithCaller (Constructor. java: 500) ~ [?:?] В java .lang.reflect.ReflectAccess.newInstance (ReflectAccess. java: 166) ~ [?:?] В jdk.internal.reflect.ReflectionFactory.newInstance (ReflectionFactory. java: 404) ~ [?:?] at java .lang.Class.newInstance (Class. java: 591) ~ [?:?] at org.bukkit.plugin. java .PluginClassLoader. (PluginClassLoader. java: 72) ~ [spigot -1.15.2.jar: git -Spigot-800b93f-8160e29] в org.bukkit.plugin. java .JavaPluginLoader.loadPlugin (JavaPluginLoader. java: 135) ~ [spigot-1.15.2. jar: git -Spigot-800b93f-8160e29] ... еще 6

Основной класс:

package pl.piotrek.main;

import org.bukkit.plugin.java.JavaPlugin;
import pl.piotrek.commands.ServersCommand;
import pl.piotrek.events.ServersGuiListener;
import pl.piotrek.gui.Gui;
import pl.piotrek.message.channel.PluginMessagingListener;
import pl.piotrek.message.command.ConnectCommand;

public class Main extends JavaPlugin {
    private static Main instance;
    public static Main getInstance() { return instance; }
    public void setInstance(Main instance) { Main.instance = instance; }
    public Gui gui;
    @Override
    public void onEnable() {
        System.out.println("Enabled TeleportationUtils v1.0.0");
        setInstance(this);
        registerCommands();
        registerListener();
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", new PluginMessagingListener());
        gui = new Gui();
    }
    public void registerCommands() {
        getCommand("connect").setExecutor(new ConnectCommand());
        getCommand("servers").setExecutor(new ServersCommand());
    }
    public void registerListener() {
        this.getServer().getPluginManager().registerEvents(new ServersGuiListener(), this);
    }
}

Plugin.yml:

name: TeleportationUtils
version: 1.0.0
main: pl.piotrek.main.Main
api-version: 1.15
commands:
  connect:
    aliases: [cnt]
    description: Connect to another sevrer command
  servers:
    aliases: [svr]
    description: Server menu command for teleport between servers
permissions:
  commands:
   connect:

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Трассировка стека показывает, что ваш плагин изначально инициализирован в pl.piotrek.main.Main.<init>(Main.java:9), а затем он пытается снова инициализироваться в той же точке. Очень вероятно, что у вас есть один и тот же плагин дважды в папке плагинов, возможно, под другим именем.

Просмотрите папку плагинов вашего сервера и найдите дубликат.

0 голосов
/ 08 августа 2020

у вас, скорее всего, есть «расширяет JavaPlugin» на 2 класса. вы можете иметь это только в своем основном классе. Вместо этого вы должны сделать

    private final Main plugin;
    public className(Main plugin) {
        this.plugin = plugin;
    }

в других ваших классах и использовать plugin.whatever для доступа к вещам, которые вы обычно могли бы получить только в своем классе Main.

Также в вашем plugin.yml, у вас есть

permissions:
  commands:
   connect:

это не соответствует стандартам разрешений Bukkit, которые можно найти здесь .

И при именовании ваших пакетов лучше всего указать имя плагина там. что-то вроде pl.piotrek.TeleportationUtils.main.Main, поэтому, если у вас на сервере несколько плагинов, это не вызовет проблем.

...