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

Помогите Получить тип переменной по имени

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

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

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

    Баллы:
    88
    Skype:
    Baksovic2
    Имя в Minecraft:
    Baksovic
    Товарищи, подскажите пожалуйста как получить тип переменной по имени.
    Хочу сделать поддержку плагина на нескольких версиях, но из за импорта некоторых классов из NMS, плагин работает только на определенной версии(описал как смог)

    Для разбора возьму эту строку

    import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;

    CraftPlayer craftPlayer = (CraftPlayer) player;

    Я представляю что это должно выглядеть как-то так

    org.bukkit.craftbukkit. + version + .CraftPlayer craftPlayer = (org.bukkit.craftbukkit. + version + .CraftPlayer) player;

    Подскажите как реализовать это дело самым простым способом
     
  2. Хостинг MineCraft
    <
  3. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
  4. Dymeth

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

    Баллы:
    76
    Я делаю примерно так:
    Код:
    public static final nmsPath = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
    
    public static Class<?> getNmsClass(String name) throws ClassNotFoundException {
       return Class.forName("net.minecraft.server." + nmsPath + "." + name);
    }
    
     
    Последнее редактирование: 18 мар 2016
  5. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну а я делаю отдельные классы реализации с использованием nms под каждую версию. лел.
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Костыль тот еще.
     
  7. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Зато точно работает, и не начинает тормозить когда внезапно jvm решает выкинуть уже соптимизированную рефлексию на мороз и начать компилить заново. Плюс некоторые вещи рефлексией тупо сделать нельзя.
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    + не возникнет внезапный эксепшн не найденного метода на ядрах, которые не тестировал/не сделал реализацию.
     
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ты хотел сказать не кинется InvocationTargetException. А NoSuchMethod кинется, если неправильная реализация выберется.
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я не думаю, что "производитель" ядра кинется править nms без смены версии редакции.
     
  11. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Зато производители кастомных ядер могут
     
  12. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А на них как то пофигу. В конце концов лично я оставляю сорсы открытыми для каких ниб переделок.
     
  13. General

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

    Баллы:
    123
    Под Sponge'м не прокатит. Куча плагинов отвалилась лишь потому что не смогли определить версию Bukkit'a. Хотя, конечно. автор моста мог бы чего запилить, но разве он виноват?
     
  14. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Потому что там ВНЕЗАПНО нет Bukkit'a вовсе, как и баккитовского NMS.
    Да и вообще под Sponge надо писать плагины со SpongeAPI, а не использовать костыли-мосты.
     
  15. GoodCoder

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

    Баллы:
    76
    Не понимаю, зачем этот NMS переименовывают в каждой версии? Стандартного API недостаточно же.
     
  16. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А почему тебя интересует NMS, если тебе достаточно стандартного API?
     
    Последнее редактирование: 20 мар 2016
  17. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Потому что в каждой новой версии ванили разные имена одних и тех же объектов (методов/переменных). А всё это деобфусцировать и приводить к читабельным значениям всем лень.
     
  18. GoodCoder

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

    Баллы:
    76
    А как же MCP?
     
  19. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Пока они сообразят, что к чему, пройдут недели (вспоминаем 1.7, когда ждали mcp весьма долго в паблике). Да и издавна Bukkit Team делали всё своими руками.
     

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