Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Java, базовый вопрос

Тема в разделе "Разработка плагинов для новичков", создана пользователем malexp, 8 янв 2018.

Метки:
  1. Автор темы
    malexp

    malexp Ньюби

    Баллы:
    1
    Привет!
    Начиная изучать Java, чуть ли не с первой страницы говорится о том, что все программы на Java начинаются с главного main метода. И все бы хорошо, но: начав познавать азы plugin dev, я "собрал" первый плагин по туториалу со spigot, и все, вроде, хорошо, все удалось и запустилось. Но чуть-чуть изменив параметры, а именно тело метода onCommand в классе новой команды на такое:
    if (sender instanceof Player) {
    Player player = (Player) sender;
    player.sendMessage("Hello!");
    }

    у меня начало выбивать ошибку о том, что при загрузке плагина не удается найти главный класс. Все было вылечено лишь изменением тела главного класса плагина путем добавления метода main.

    Вопрос в следующем: почему, казалось бы, при почти неизменных состояниях .jar файла, результат различный и, в первом случае, метод main не требуется компилятором?
     
  2. Mr Hosting
  3. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Потому что приложением в данном случая является сервер, у него есть метод main.
    Плагины -- просто какой-то код, который соответствует ожиданиям/ограничениям/API сервера.
    Сервер подгружает их сам в своё адресное пространство и вызывает методы, которые ты ему предоставляешь.
    Поэтому ему не нужен метод main.
    Поэтому ты должен сообщить серверу, методы какого класса вызывать, сообщив ему его имя через plugin.yml.

    В некотором роде ты можешь представлять себе сервер как такой код:
    Код:
    class Server {
       public static void main(String[] args) {
          for (long tick = 0; ; tick++) {
    
             // ... тут какая-то магия
    
             plugin.обработчикСобытия(event);
    
             // ... потом ещё магия
          }
       }
    }
     
  4. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Надеюсь, ты не пытаешься запускать его из IDE?
    Собрав .jar плагина, ты должен скопировать его в папку plugins и перезапустить сервер.
    Убедись, что в plugins только одна версия твоего .jar, иначе они будут конфликтовать.
    Для отладки поищи на РБ перевод статьи об отладке плагинов, попадалась на глаза буквально вчера.
     
  5. Автор темы
    malexp

    malexp Ньюби

    Баллы:
    1
    Да, я запускаю сервер через batник, в этом все ок. Честно говоря, еще не очень допер до вышесказанного, но кое-какие "очертания" появляются. Сказывается крайне малый опыт и знания в Java. Спасибо за ответ :)
     
  6. Автор темы
    malexp

    malexp Ньюби

    Баллы:
    1
    Хм. Что-то я опять запутался :p Если точка входа для Bukkit API - метод onEnable, тогда почему, при наличии этого метода в главном классе плагина, серверу требуется метод main для определения главенствующего класса?
     
  7. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    onEnable — это не точка входа.
    Точка входа — начало инициализации экземпляра твоего главного класса.
    То есть момент, когда какой-то волшебник снаружи делает new TvoiMainClass().
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Какой то бред пишите. Вообще это называется кастомный класслоадер, он же плагин лоадер в баките.
    Продолжай учить java, начни с interface. Коем и является класс Plugin. Потом почитай об extends и implements. Много нового для себя откроешь. Дальше на очереди конструкторы и т.д и тп.
     
  9. Автор темы
    malexp

    malexp Ньюби

    Баллы:
    1
    Читал уже. Пойду перечитывать.
     

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