Версия Minecraft
1.12.2
476
9
39
Есть у меня динамичный блок что-то типа скалы можно долбить по нему стаместкой и он меняется в размерах(т.е динамичный) вариаций 2^16 степени.
Т.е я просто модифицирую рендер под свой блок через асм.
Делаю я это проверяя на свой блок state.getBlock == BobrBlock
Далее как обычный рендер только подсовываю свои x,y,z в VertexData для каждой из 4 сторон. Получаю я эти x,y,z на основе коорд блока. Т.е два блока стоящие рядом могут быть похожи, но по сути у них модельки разные.
U,V в VertexData я и пальцем не трогаю.
Вскрылась проблема при тесте динамичной модельки с оптифайном.
При сглаживании или шейдерах криво отображается текстурки. Треугольники съезжают.

[/] - это сторона блока текстурка стороны блока состоит из двух частей т.е [/ и /] и таким образом каждая сторона блока.
[/ - рендерится первая часть
/]
- вторая рендерится в другом месте или вообще не рендерится.

Таким образом, блок превращается в полупрозрачную пирамиду с вершинами во все стороны.
Меняю x,y,z в VertexData через ASM в остальном отдаю на ванильный рендер.
Без оптифайна выглядит плохо.
Т.е нужны шейдеры хотя бы, но шейдермод несовместим с форджем.
Остаётся оптифайн+фордж.
И тут я уже хз как оно работает и почему так.
Плюс я не могу запатчить оптифайн. Нет деобфусцированной рабочей версии и исходников которые хотя бы запустить в тестовой среде


Как решить я уж каким-нибудь чудом придумаю, главный вопрос почему возникает эта проблема?

P.S Ещё lightmap пересчитываю и color. Иначе от блока остается чёрное пятно.

И ещё вопрос, можно ли как-то подменить в модельке BakedQuad возможно, это решит проблему. Так как тогда я рендер вообще никаким боком трогать не буду. А, нет не прокатит. Мне нужны координаты блока по ним я вычисляю координаты по которым строю стороны
P.S.S странно, на 1.7.10 всё норм. Шейдеры летают(образно, 5 фпс).
 
Решение
Крч, придётся писать заглушку. И соединять свой код с оптифайновским по средствам заглушек и юзать их только если оптифайн включён.
Оптифайновцы рили дофига намутили. Жаль что закрытый код. Кучу проблем создали всем разрам. Лучше бы никогда не шарили свою поделку и кто-нибудь бы другой написал подобный мод, но уже с открытым исходным кодом.
476
9
39
А где инфу по блоку хранишь? В смысле его форму.
...
И да. Хз, как тебе помочь. В такие дебри не углублялся.
Я в метод renderModel -> renderBlock -> вставляю свой код. Код получает коорды блока и формула вычисляет на их основе модельку и заносит в VertexData, далее отдаёт на обычный рендер
 
476
9
39
Не, а сам список координаты - модель где хранится? Или у тебя для одной меты одна модель? Или это вообще тайлы?
Где хранится? Сложно. Нигде она не хранится именно моя, она генерируется по координатам блока. Ванильные модели имеют bakedQuad и каждый bakedQuad это одна из 6 сторон света. Генерирует ванилла их с json'a.
Видимо напрямую работать с буффером сложновато.
Попытался видоизменить буффер(BufferBuilder) на стандартный, но не прокатило. Оптифайн так колоссально намутил.
 
476
9
39
Крч, придётся писать заглушку. И соединять свой код с оптифайновским по средствам заглушек и юзать их только если оптифайн включён.
Оптифайновцы рили дофига намутили. Жаль что закрытый код. Кучу проблем создали всем разрам. Лучше бы никогда не шарили свою поделку и кто-нибудь бы другой написал подобный мод, но уже с открытым исходным кодом.
 
Сверху