1 / 1 / 0
Регистрация: 27.08.2012
Сообщений: 9
1

Reflection? ASM? BCEL?

29.06.2014, 18:44. Показов 855. Ответов 2
Метки нет (Все метки)

Здравствуйте, товарищи!
Мне необходимо изменить метод, к которому я не имею доступа.
Что мы имеем - класс World, в котором есть метод extinguishFire:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    public boolean extinguishFire(EntityPlayer par1EntityPlayer, int par2, int par3, int par4, int par5)
    {
        if (par5 == 0)
        {
            --par3;
        }
 
        if (par5 == 1)
        {
            ++par3;
        }
 
        if (par5 == 2)
        {
            --par4;
        }
 
        if (par5 == 3)
        {
            ++par4;
        }
 
        if (par5 == 4)
        {
            --par2;
        }
 
        if (par5 == 5)
        {
            ++par2;
        }
 
        if (this.getBlock(par2, par3, par4) == Blocks.fire)
        {
            this.playAuxSFXAtEntity(par1EntityPlayer, 1004, par2, par3, par4, 0);
            this.setBlockToAir(par2, par3, par4);
            return true;
        }
        else
        {
            return false;
        }
    }
Что мне нужно - заменить условие "if (this.getBlock(par2, par3, par4) == Blocks.fire)" на "if ((this.getBlock(par2, par3, par4) == Blocks.fire) || (this.getBlock(par2, par3, par4) == RModBlocks.blockRadioactiveFire))".
Судя по тому, что я нагуглил, данная задача решается либо через Reflection, либо через ASM, либо через BCEL. Для Reflection я не нашел примеров изменения методов, а не полей, а для ASM-BCEL нашел ровно один пример (с "магией" внутри, т.е. необъясненный), а также 150-страничные PDF-талмуды на английском. Подскажите, нет ли простого способа сделать данную подмену, не куря 150 страниц английского текста?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2014, 18:44
Ответы с готовыми решениями:

Документация по библиотеке BCEL
Всем доброго времени суток. Друзья, у меня очень так себе знания английского. Очень необходимо...

Для чего используется import com.sun.org.apache.bcel.internal.generic.NEW?
Начинаю разбираться с java. подскажите, для чего используется...

Reflection - what are you came for?
Всем привет. Насколько оправдано использование рефлексии в бизнес логике приложение? Если есть...

Reflection
Здравствуйте. Как с помощью рефлексии сделать так, чтобы код System.out.println("hello"); выводил...

2
Эксперт Java
2390 / 2216 / 564
Регистрация: 28.12.2010
Сообщений: 8,655
29.06.2014, 21:39 2
Простого способа нет тк это нетривиальная задача. Гуглите bytecode instrumentation
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
02.07.2014, 19:01 3
А унаследовать, или класс private/final?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2014, 19:01
Помогаю со студенческими работами здесь

Синтаксис Generic's и Reflection
ребят не могу понять синтаксис: get(Wement.class, "Name") //-----этот метод возвращает экземпляр...

Аналог CodeDom и System.Reflection.Emit
собсна сабж. в шарпе есть пространства имен - System.CodeDom и System.Reflection.Emit. интересует,...

Создание класса через Reflection API
Задача - необходимо составить с помощью JavaReflectionApi класс вида: public class...

Reflection: что вернет getField.getInt(null)?
У Хорстмана наткнулся на следующую строку: return JOptionPane.class.getField(s).getInt(null); И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru