[Туториал]Получение доступа к protected полям

771
5
Итак, вы хотите использовать метод/переменную, но она protected?
В этом туториале я расскажу как это сделать без изменения исходников и всяких трансформеров и рефлексии.
Для начала, создадим пакет в котором лежит класс(в нашем проекте), protected поля которого вы хотите получить. 
Я хочу получить защищеную переменную isJumping из класса EntityLivingBase, а значит мне нужно создать пакет с именем net.minecraft.entity.
Теперь в этом пакете создаем класс с любым именем, у меня это будет EntityLivingBaseAccessor.
В нем создаем геттеры и спокойно получаем нужные методы/переменные.
Вот так выглядит класс:

Код:
package net.minecraft.entity;

public class EntityLivingBaseAccessor{
    
    public static boolean isJumping(EntityLivingBase entity){
        return entity.isJumping;
    }
}

Получаем просто EntityLivingBaseAccesor.isJumping(entity).
Внимание!
Так делать очень плохо, потому что это нарушает совместимость с модами, то есть если вы и другой мод так сделает, то ВСЕ СЛОМАЕТСЯ НАФИГ.
Так что используйте только в крайних случаях, ну или если вы не умеете пользоваться рефлексией.
 
Сверху