Отрисовка карты (Переименовано из "Рефлексия!")

Версия Minecraft
1.12
4,167
68
693
Итак! Настал мой черёд...
И я, таки, добрался до этого страшного класса!
И прошу помощи, а вернее объяснения: как можно добавить одну-две строчечки в ванильный метод?
Прям в самое начало. Очень нужно )))
Спс.


Даже сумел написать это!
Код:
Method method = ReflectionHelper.findMethod(BlockStateContainer.class,
 "getMapColor", null, BlockStateContainer.class);

Но что делать дальше?
...
И откуда взять 3-й аргумент methodObfName?
 
Решение
RE: Рефлексия!

http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%93%D0%B0%D0%B9%D0%B4-%D0%9B%D0%B5%D0%B3%D0%BA%D0%BE-1-6-%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D1%87%D1%83%D0%B6%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%B4%D0%B0-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D0%BC%D0%B5%D1%80%D1%8B


Liahim написал(а):
как можно добавить одну-две строчечки в ванильный метод


Рефлексия позволяет только изменять данные, но не программу. Еще можно методы вызывать.
RE: Рефлексия!

http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%93%D0%B0%D0%B9%D0%B4-%D0%9B%D0%B5%D0%B3%D0%BA%D0%BE-1-6-%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D1%87%D1%83%D0%B6%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BE%D0%B4%D0%B0-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D0%BC%D0%B5%D1%80%D1%8B


Liahim написал(а):
как можно добавить одну-две строчечки в ванильный метод


Рефлексия позволяет только изменять данные, но не программу. Еще можно методы вызывать.
 
RE: Рефлексия!

hohserg написал(а):
данные, но не программу
Чо-т не всосал...
Что за данные и что за программа?


Так! Смотрю, там как-то сложно нужно подключать дополнительный мод фолкена?
А через форджовский ReflectionHelper такое можно провернуть?
 
RE: Рефлексия!

private int a;//вот это можно изменять рефлексией.
private int b(){ return 0; } //можно только вызвать
 
RE: Рефлексия!

Liahim написал(а):
А вставить в private int b(){ return 0; } например это:

private int b(){
if (a>b) return 333;
return 0;
}

Можно?

Или это только хук?

Хук. Рефлексия нужна для доступа к приватным полям, но не их изменение
 
RE: Рефлексия!

Ну ладно, ладно!
Подключил, заменил...
Пришлось переписать весь метод целиком...
Но зато теперь карта реагирует на мой туманчик )))

[img=600x451]https://pp.userapi.com/c837727/v837727604/5790c/WgzCuEIv4Lw.jpg[/img]

Вот только теперь вопрос: менять ли мне цвет в самом начале, то есть при обращении к блокстейту, чтобы на всяких сторонних миникартах блоки тоже делались белыми или ограничится только стандартной картой?
...
По сути, если делать только карту, то можно обойтись и без хука, а просто подменять стандартную карту кастомной.
Но тогда другие моды будут заглядывать под туман...
...
А если делать блоки белыми изначально, то тут тоже есть неприятный момент в виде отрисовки высот...
И если на стандартной карте я их отключил, но на сторонних это вряд ли удастся сделать...
...
Есть предложения/советы как это лучше провернуть?
 
Карта выглядит потрясно.

Из проблемы, которую ты описал ниче не понятно. Как я понял: сторонние моды не знают о тумане.
 
Да! Ты правильно понял...
Объясняю ещё раз медленно:
есть два варианта:
1 - менять метод в самой карте (результат ты видишь на картинке выше)
2 - менять метод getMapColor(), то есть то место откуда изначально берётся цвет для карты.

В первом случае, туман будет виден только на ванильной карте.
Во втором, все блоки ниже тумана будут выдавать белый цвет и этот цвет будет отражаться и на сторонних минимепах.
Фишка в том, что кроме цвета есть ещё и карта высот. Ты можешь наблюдать её по выпуклостям на карте... То есть блоки на минимепах будут белые, но с картой высот... И на это я никак не могу повлиять, потому что всё это просчитывается в независимых методах.
...
Отсюда вопрос: стоит ли вообще запариваться с заменой цвета или лучше без всяких хуков просто подменять ванильную карту на свою и ограничится этим?
...
Склоняюсь к последнему.
 
Так! В итоге сделал собственной картой, без хука...
Но почему-то не находит модель айтема в инвентаре...
Подозреваю, что это из-за того, что у каждой карты своя метадата, а модель регистрируется для нуля.
...
Отсюда вопрос, как назначить единую модель предметам с любой метедетой?

Моделька скопирована с ванили:
Код:
{
    "parent": "item/generated",
    "textures": {
        "layer0": "items/map_filled",
        "layer1": "items/map_filled_markings"
    }
}

Так же в ванильной карте есть следующая строчка:
Код:
protected ItemMap() {
    this.setHasSubtypes(true);
}

Моя расширена от ванильной...

Хелп!
 
Лентяй :)
Расширь не от ванильной, а от того, от чего расширена ванильная)
 
К сожалению, в этом случае она не будет рендериться как ванильная...
Так что не прокатит.
Да и я немного не понимаю, каким образом это починит модельку?


Не, не прокатило...
Тут дело в мете, как мне кажется...


Кстати, подтуманная карта )))

[img=600x451]https://pp.userapi.com/c837728/v837728010/59395/TrJr7T4rAF4.jpg[/img]


Да, что и следовало доказать.
Карта созданная первой в мире, то есть с метой 0, имеет нормальную модель...
...
Всё-таки, как назначить одну модель на все меты?
Кто-нибудь знает?
 
Назад
Сверху