Вода пропускает свет

Сообщения
4,502
Лучшие ответы
41
Реакции
518
Версия Minecraft
1.12.2
Народ, кто шарит как сделать чтобы вода свет не пропускала? А то до дна просвечивает.. Я думал это как то с рендерлейром связано


И еще вопрос номер два: по какому принципу сетается цвет в методе setColor() ? Почему то классический варик 0x07508f (в 6 цифр то бишь) не работает, цвет сетается прозрачный.:(

 
Сообщения
4,078
Лучшие ответы
104
Реакции
518
Optifine? Там в настройках вырубается
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Сообщения
557
Лучшие ответы
7
Реакции
25
@Maxik001 я хз типо если ты юзаешь 6циферный и робит то круто тебе
я же на 1.5.2 типо юзал DECIMAL цвета
Это перемноженный RGB

Java:
public int getDec(int r, int g, int b)
{
    return (r*65536)+(g*256)+b;
}
 
Сообщения
1,820
Лучшие ответы
48
Реакции
320
Побитовые операторы для лохов, да
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Да цвет это вообще неважно особо нафиг, как прозрачность сделать меньше с каждым блоком в глубину? Я не нашел это в воде нигде.
 
Сообщения
4,078
Лучшие ответы
104
Реакции
518
Можно верхнюю гранить воды рендерить независимо от видимости(блоки перед ней), чтобы чем глубже, тем меньше была прозрачность из-за наложения
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Сообщения
557
Лучшие ответы
7
Реакции
25
Да цвет это вообще неважно особо нафиг, как прозрачность сделать меньше с каждым блоком в глубину? Я не нашел это в воде нигде.
GL11.glColor_RGBA(r,g,b,F)
f - прозрачность
цвет доставать можешь
Метод ГЛ по другому как-то называется
 
Сообщения
4,078
Лучшие ответы
104
Реакции
518
Так а как ему узнать, что там глубоко и нужно альфу поднять?
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Сообщения
4,078
Лучшие ответы
104
Реакции
518
Еще можно типо сказать ,что не баг, а фича, кристально чистая вода
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Есть тут setRenderLayer(BlockRenderLayer....);
для типа этих целей, но тут блин либо TRANSLUCENT , это прозрачная как на скрине, либо SOLID или CUTOUT что в данном случае разницы не имеет значит

Это конечно выглядит красиво но...



@SideOnly(Side.CLIENT)
public BlockRenderLayer getBlockLayer()
{
return this.blockMaterial == Material.WATER ? BlockRenderLayer.TRANSLUCENT : BlockRenderLayer.SOLID;
}
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Я нашел короче то что надо
Java:
    public EnumBlockRenderType getRenderType(IBlockState state)
    {
        return EnumBlockRenderType.LIQUID;
    }
Но есть небольшая проблема. BlockFluidClassic это видимо форджевский класс, не имеющий отношения к ванильному BlockLiquid

А в ванильный BlockFluidRenderer никто не удосужился вставить хуки для связки. Мораль:
форджевская жидкость говно значит
Для нормальной работы либо нужно хукать в BlockFluidRenderer#renderFluid для вставки этих форджевских Fluid, либо через кастомный модельлоадер делать свой рендер воды.

Как разберусь запилю тутор по созданию офигенской воды.
 
Последнее редактирование:
Сообщения
339
Лучшие ответы
13
Реакции
35
суть примерно в чём, вода это плоская вещь. То есть рендерится только верхушка воды, её прозрачность определяется настройками текстуры (её альфой). Поэтому если ты хочешь переписать рендер, то тебе надо получить расстояние до берега. Естественно круто будет смотреться только сверху))
Когда ты внутри воды, рендерится скорее всего или через шейдер или ещё чего. По сути на экран закладывается текстура (такая же как голова тыквы). И в таком случае тебе надо определять расстояние до поверхности.
То есть сам блоки воды не имеет значения как таковой при любом раскладе
 
Сообщения
1,820
Лучшие ответы
48
Реакции
320
Сделай воду немного непрозрозрачной через setBlockOpacity(или похожий метод в классе блока) и все. Тогда на блоки под водой будет попадать меньше света и они станут темнее.
 
Сообщения
4,502
Лучшие ответы
41
Реакции
518
суть примерно в чём, вода это плоская вещь. То есть рендерится только верхушка воды, её прозрачность определяется настройками текстуры (её альфой). Поэтому если ты хочешь переписать рендер, то тебе надо получить расстояние до берега. Естественно круто будет смотреться только сверху))
Когда ты внутри воды, рендерится скорее всего или через шейдер или ещё чего. По сути на экран закладывается текстура (такая же как голова тыквы). И в таком случае тебе надо определять расстояние до поверхности.
То есть сам блоки воды не имеет значения как таковой при любом раскладе
Именно что как то имеет, т.к в ванильке таковой эффект есть
Писать кастомный рендер это последнее что я буду делать. Сперва хрчу хукнуть BlockFluidRender#renderFluid и сделать чтобы он дружил с BlockFluidClassic

Вода это такой же блок каки все остальные. Он не рендерит сторону если к этой стороне примыкает isFullBlock или как то так. Когда игрок в воде, на экран накладывается просто текстура с цветом. У джабелара гайд есть как это делать через ливингэвент
 
Последнее редактирование:
Сообщения
4,502
Лучшие ответы
41
Реакции
518
Сделай воду немного непрозрозрачной через setBlockOpacity(или похожий метод в классе блока) и все. Тогда на блоки под водой будет попадать меньше света и они станут темнее.
Хорошо попробую
 
Сообщения
3,353
Лучшие ответы
43
Реакции
244
Народ... А никто не думал, что это всё обеспечивается тупо на этапе построения лайт мэпы?
Вроде как он просто чекает количество блоков воды и говорит, тут тень. И усё... Чего вы блок-то дербаните?
 
Сверху