Помогите Включение незарегистрированного в PluginClassLoader плагина

  • Автор темы Автор темы iD3LSY
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

iD3LSY

Активный участник
Пользователь
Баллы
76
Привет все :)

Проблема уже описана в название, но я попытаюсь объяснить более детально. При принудительном отключение, включение плагина в консоль отдает сообщение.
Код:
[16:59:07 INFO]: [Plugin] Disabling Plugin v1.0
[16:59:07 INFO]: [Plugin] Enabling Plugin v1.0
[16:59:07 WARN]: Enabled plugin with unregistered PluginClassLoader Plugin v1.0
Проблема не такая уж и большая, но хотелось бы убрать такие сообщения.

Немного порыв в гугле, я нашёл конечно же темы, но во всех из них говорили о каких либо плагинах, которые могут отправлять подобные сообщения (PermissionsEx, AuthMe, другие). У меня же стоит только 1 плагин - Plugin(xD).

Сам класс из сурцов ведра. *тык* (PluginClassLoader)
 
Можно посмотреть откуда было вызвано это сообщение (попытаться)
Поиграйся с числом, и найдешь (А может и нет).
Thread.currentThread().geStackTrace()[1]
Копайся в JavaPluginLoader'е.
Java:
  @Override
  public void enablePlugin(Plugin plugin)
  {
    Validate.isTrue(plugin instanceof JavaPlugin, "Plugin is not associated with this PluginLoader");
    if (!plugin.isEnabled())
    {
      plugin.getLogger().info("Enabling " + plugin.getDescription().getFullName());
    
      JavaPlugin jPlugin = (JavaPlugin)plugin;
    
      PluginClassLoader pluginLoader = (PluginClassLoader)jPlugin.getClassLoader();
      if (!this.loaders.contains(pluginLoader))
      {
        this.loaders.add(pluginLoader);
        this.server.getLogger().log(Level.WARNING, "Enabled plugin with unregistered PluginClassLoader " + plugin.getDescription().getFullName());
      }
      try
      {
        jPlugin.setEnabled(true);
      }
      catch (Throwable ex)
      {
        this.server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex);
      }
      this.server.getPluginManager().callEvent(new PluginEnableEvent(plugin));
    }
  }
 
Это просто предупреждение, на работу плагина оно никак не влияет.

Выводится оно, как я понял, когда недавно разбирался с ним, только потому, что ядро не планирует загружать этот плагин вновь после его выключения (ибо удаляет его PluginClassLoader). Но если его всё таки включить, ядро сообщит сие предупреждение и восстановит его Class Loader. Где-то я могу быть не прав, т. к. не помню деталей; но на работу точно не влияет.
 
Это просто предупреждение, на работу плагина оно никак не влияет.

Выводится оно, как я понял, когда недавно разбирался с ним, только потому, что ядро не планирует загружать этот плагин вновь после его выключения (ибо удаляет его PluginClassLoader). Но если его всё таки включить, ядро сообщит сие предупреждение и восстановит его Class Loader. Где-то я могу быть не прав, т. к. не помню деталей; но на работу точно не влияет.
Потому что у плагина, почему - то кастумный class loader, скорее всего.
Ну или потому что при выключении плагина удаляется class loader из сета, что тоже возможно.
update: Да, так и есть.
Java:
  @Override
  public void disablePlugin(Plugin plugin)
  {
    Validate.isTrue(plugin instanceof JavaPlugin, "Plugin is not associated with this PluginLoader");
    if (plugin.isEnabled())
    {
      String message = String.format("Disabling %s", new Object[] { plugin.getDescription().getFullName() });
      plugin.getLogger().info(message);
     
      this.server.getPluginManager().callEvent(new PluginDisableEvent(plugin));
     
      JavaPlugin jPlugin = (JavaPlugin)plugin;
      ClassLoader cloader = jPlugin.getClassLoader();
      try
      {
        jPlugin.setEnabled(false);
      }
      catch (Throwable ex)
      {
        this.server.getLogger().log(Level.SEVERE, "Error occurred while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex);
      }
      if ((cloader instanceof PluginClassLoader))
      {
        PluginClassLoader loader = (PluginClassLoader)cloader;
        this.loaders.remove(loader);
       
        Set<String> names = loader.getClasses();
        for (String name : names) {
          removeClass(name);
        }
      }
 
Где-то я могу быть не прав, т. к. не помню деталей; но на работу точно не влияет.
Ну или потому что при выключении плагина удаляется class loader из сета, что тоже возможно.
update: Да, так и есть.
Не, я конечно даун, но это я и сам заметил, ибо читать я умею. Про функционал я тоже знаю, что не влияет. Влияет на мой перфекционизм, может это и тупо, но все же.
 
Влияет на мой перфекционизм, может это и тупо, но все же.
Та же проблема. Но я её решил тем, что перезагружаю плагин как можно реже (или совсем нет, или только вместе с сервером), или просто не смотрю в консоль. Хе.
 
Та же проблема. Но я её решил тем, что перезагружаю плагин как можно реже (или совсем нет, или только вместе с сервером), или просто не смотрю в консоль. Хе.
Ладно. Думаю, сейчас буду херню в последующие 10 минут писать, так что просто закрою тему.

Всем спасибо, бб.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх