[1.8] Замена блока

В списке же видно будет зачарование. И ещё: а если просто понадобится что-то поменять в стекле?
 
Как свечение убирать?
[merge_posts_bbcode]Добавлено: 24.07.2015 20:56:58[/merge_posts_bbcode]

Crowbar написал(а):
hohserg написал(а):
Если предмет для добычи, то сделай так, чтобы он крафтился зачаренным на шелк.
А вот это уже костыль :)
Понятие о костыле слишком расплывчато, чтобы его воспринимать. Я предложил рефлексию, вы назвали это костылем, а не думали, что моды ядра по такому принципу тоже можно считать костылями?)
 
Есть два вида костылей: которые будут работать нормально и которые будут работать через раз. Рефлексия работать нормально точно не будет. Да, очень существенная часть кода в модах - это костыли, но в хороших модах эти костыли работают хорошо.
 
Все что мы пишем, и что не юзает случайные значения будет работать так, как это должно работать, просто в разных условиях будет разный результат. Кстати, на счет рефлексии: можно при помощи мода ядра достичь замены значения в классе Blocks, до загрузки остальных модов(если не найдется мод ядра, который будет изменять это же свойство).
 
Во всяком случае, шёлковое касание - не вариант. У него будут побочные эффекты (читай - баги) в виде, например, дропающейся земли с травой.
 
А ещё при помощи "мода ядра" можно пропатчить класс. В какой момент твой кормод будет подменять Blocks.glass?
 
Я тебя не понял. Момент? А он играет роль? Ведь мод ядра загрузится до обычных модов.
Мне казалось, что моды ядра работают по такому принципу: загрудается изначальный класс, пропускается через трансформер, загружается в jvm через ClassLoader, а про старый класс забывают, не так? Если не трудно, объясни подробнее про их работу.
 
Неа, не так. Кормоды грузятся не только до обычных модов, а ещё и до самого майна. И байткод пропускается через трансформеры при загрузке этого байткода. Насколько мне известно, перезагрузить в рантайме класс полностью невозможно.
 
А при чем тут моменты? Он загрузится до обычных модов, это вполне достаточно.
 
Он загрузится до майна. И никаких событий больше не будет, будет только трансформер вызываться.
 
Ну так задача: заменить значение Blocks.glass
 
И где ты напишешь что-нибудь вроде Blocks.glass = myGlassBlock?
я в курсе, что Blocks.glass объявлено как final и поэтому придется юзать рефлексию
 
Ну вот где-то в коде прописано Blocks.glass=new BlockGlass()//или как-то так
Значит можно заменить на Blocks.glass=Class.forName("MeBlockGlass").newInstance()//через рефлексию, потому что скорее всего не получится исправить импорты, а может, и можно.
Надеюсь, ясно, что исправления вносятся ASM или еще чем-то подобным.
 
1) Понятия "импорт" на уровне байткода не существует
2) Изменение кода - это НИКАК НЕ РЕФЛЕКСИЯ. Хочешь менять код - добро пожаловать в прекрасный мир байткода, ASM, трансформеров и прочих прелестных вещей.
 
Назад
Сверху