Войти или зарегистрироваться

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

baksovic111

Активный участник
Пользователь
Баллы
88
Имя в 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;

Подскажите как реализовать это дело самым простым способом
 
Я делаю примерно так:
Java:
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);
}
 
Последнее редактирование:
Ну а я делаю отдельные классы реализации с использованием nms под каждую версию. лел.
 
Костыль тот еще.
Зато точно работает, и не начинает тормозить когда внезапно jvm решает выкинуть уже соптимизированную рефлексию на мороз и начать компилить заново. Плюс некоторые вещи рефлексией тупо сделать нельзя.
 
Костыль тот еще.
Зато точно работает, и не начинает тормозить когда внезапно jvm решает выкинуть уже соптимизированную рефлексию на мороз и начать компилить заново. Плюс некоторые вещи рефлексией тупо сделать нельзя.
+ не возникнет внезапный эксепшн не найденного метода на ядрах, которые не тестировал/не сделал реализацию.
 
+ не возникнет внезапный эксепшн не найденного метода на ядрах, которые не тестировал/не сделал реализацию.
Ты хотел сказать не кинется InvocationTargetException. А NoSuchMethod кинется, если неправильная реализация выберется.
 
Ты хотел сказать не кинется InvocationTargetException. А NoSuchMethod кинется, если неправильная реализация выберется.
Я не думаю, что "производитель" ядра кинется править nms без смены версии редакции.
 
Ну а я делаю отдельные классы реализации с использованием nms под каждую версию. лел.
Под Sponge'м не прокатит. Куча плагинов отвалилась лишь потому что не смогли определить версию Bukkit'a. Хотя, конечно. автор моста мог бы чего запилить, но разве он виноват?
 
Под Sponge'м не прокатит. Куча плагинов отвалилась лишь потому что не смогли определить версию Bukkit'a.
Потому что там ВНЕЗАПНО нет Bukkit'a вовсе, как и баккитовского NMS.
Да и вообще под Sponge надо писать плагины со SpongeAPI, а не использовать костыли-мосты.
 
Не понимаю, зачем этот NMS переименовывают в каждой версии? Стандартного API недостаточно же.
А почему тебя интересует NMS, если тебе достаточно стандартного API?
 
Последнее редактирование:
Не понимаю, зачем этот NMS переименовывают в каждой версии? Стандартного API недостаточно же.
Потому что в каждой новой версии ванили разные имена одних и тех же объектов (методов/переменных). А всё это деобфусцировать и приводить к читабельным значениям всем лень.
 
Назад
Верх