Имеется ввиду код берëтся из джарника который закинут в папку? Можно поподробнее
В методе, который я скинул, в принципе и так должно быть понятно, но немного разъясню.
Заранее обусловлюсь - чтобы добавить аддон/модуль к своему плагину, нам в любом случае требуется какая-нибудь точка входа - точно также, как у нас есть JavaPlugin. Новый экземпляр нашего плагина создается, когда баккит загружает плагины из папки.
За экземпляр модуля у меня отвечает класс Module. Что в нем и как сделано - неважно, кроме одного момента - у него либо нет каких-либо явных конструкторов, либо есть, но это публичный конструктор без аргументов. В общем, нужно сделать так, чтобы можно было создать экземпляр нашего модуля через
new MyNewModule() (в целом, можно и с аргументами, но об этом чуть позже).
Итак, шаги следующие (на цифрах списка ссылки на соответствующие строки кода):
1. Берём наш загрузчик классов.
2. Ищем все джарники в папке. Для всех джарников:
3. Открываем джарник и создаем подзагрузчик.
4. Проходимся по всем файлам джарника (ибо джарник это по сути просто архив).
5. Убеждаемся, что файл - это джава класс.
6. Загружаем класс.
7. Убеждаемся, что это основной класс модуля.
8. Создаем новый экземпляр этого основного класса модуля через рефлексию (по сути тоже самое, что
new MyNewModule()) и регистрируем куда надо.
Я отложил создание на потом, но делать это необязательно - просто показалось, что так будет немного проще редактировать код, если что-то понадобится отрефакторить.
Если понимаешь в рефлексиях, можешь изменить создание экземпляра на 8 шаге - например, направлять туда какие-нибудь данные, но это я пояснять не буду - материал и без того есть.