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

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

Discussion in 'Разработка плагинов для новичков' started by baksovic111, Mar 18, 2016.

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

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

    Trophy Points:
    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 Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    fallus
  4. Dymeth

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

    Trophy Points:
    76
    Я делаю примерно так:
    Code:
    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);
    }
    
     
    Last edited: Mar 18, 2016
  5. Dereku

    Dereku Старожил

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

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

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А почему тебя интересует NMS, если тебе достаточно стандартного API?
     
    Last edited: Mar 20, 2016
  17. Dereku

    Dereku Старожил

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

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

    Trophy Points:
    76
    А как же MCP?
     
  19. Dereku

    Dereku Старожил

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

Share This Page