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

Помогите Обращение к плагину.

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

  1. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Доброго времени суток, форумчане.

    Извечный вопрос(при том банальненький): как ита делаится.

    Фишка вот в чем. В отдельном классе есть необходимость обращаться к плагину.

    Есть несколько вариантов.
    1. создать метод return plugin; и где надо обратиться - там его и юзать
    2. используя все тот же метод, запихать плагин в отдельное поле класса.
    3. отправлять плагин в конструктор при инициализации плагина, и опять же пихать плагин в поле.
    4. Если есть еще варианты - буду рад их прочитать.
    Как будет правильнее (тип быстродейственность\уместность и т.п.)


    Лично я склоняюсь ко второму варианту. Но я - это я, а умные и знающие люди - это не я.

    Заранее спасибо.
     
  2. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Конструктор

    private ... plug;
    ...(... plug){
    this.plug = plug;
    }
     
  3. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Объяснить приоритетность метода можешь? или это просто "я его юзаю так что вот"
    Каковы плюсы, можно пожалуйста? или это просто "как вариант"?
     
  4. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    private Main plugin;
    public OtherClass(Main main){
    this.plugin = main;
    }

    Main:

    ....( new OtherClass(this));
     
  5. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    я знаю как это делается. я приоритетность спросил (почему этот метод, а не другой. чем он лучше и т.п.)
    Меня сейчас интересует наименьшая ресурсозатратность.
     
  6. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Посчетать, не?
     
  7. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    я же не время выполнения спрашиваю. +- 100 мс не сделают погоды. А вот несколько кб оперативки с носа очень даже сделают
     
  8. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Runtime.getRuntime().getFreeMemory();
     
  9. 0x1EE7C0DE

    0x1EE7C0DE Участник Пользователь

    Баллы:
    36
    Я думаю, лучше всего - статичный геттер в главном классе, т.е. так:
    Код:
    private static MyPlugin instance;
    
    public void onEnable(){
      instance = this;
    }
    
    public static MyPlugin getInstance() {
      return instance;
    }
    
    Этот метод используется часто, и не только в плагинах. Советую использовать именно его.
    Если нужно получить экземпляр главного класса, достаточно будет вызвать Main.getInstance(),
    и не нужно плодить кучу переменных в разных классах, делать дополнительные конструкторы, как тут
     
  10. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Ну да не будем сильно агриться на не внимательность. (или какие там еще траблы).


    А я замерил. Люблю пруфы

    Итог.
    разница между начальным и конечным FreeMemory везде 0. (я так полагаю из-за того что там ссылка на один и тот же объект везде. [да ладна])

    По времени: Создание конструктора в 100-500 (я хз откуда такие вариации) раз дольше чем простой вызов через getter MainClass'a.


    Вообще не состоятельный метод. что бы getServer(), надo иметь plugin. (замкнутый круг видим?)
    В 35-55 раз дольше чем предыдущий метод.

    #getterВлидеры
     
  11. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Bukkit.getServer() ><
     
  12. Автор темы
    Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    мда. пошел за кофе. Спасибо.
     
  13. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Такие вариации складываются из создания объекта (выделения под него памяти) и ссылки на него. Ну и геттер (в обоих случаях).
     

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