Производительность.

Версия Minecraft
1.12.2
5,149
49
899
В общем, я не нашел эффективного способо окрашивать блоки при намокании... решил просто заменять простецкие блокстейты. Но возник вопрос - мир большой, песка много. Во время дождя он будет весь намокать. Смена блокстейта - она равна по ресурсоемкости смене блока? (Грубо говоря лагать будет больше или также, или меньше?)
 
@svk2140, да, но не делать же это во всём мире? Дождь и снег же распространяются на ту область где находится игрок, не дальше(хотя на счёт дождя точно сказать не могу) и ещё одно НО, на новых версия так просто текстуру не заменить) Там нужно менять состояние блока.
 
Не нужно там состояние блока менять. Надо подменять иконку блока во время сборки чанка в дисплейлист (или что там используется на новых версиях) в зависимости от того, идет ли дождь в мире, есть ли в текущем чанке дождь и находится ли блок под небом. Ничего из этого не требует модификации или чтения блокстейта. Если хочется заменять не только блок прямо под небом - можно использовать в проверке скайлайт, например, чтобы все блоки со светом от неба >= 12 уровня намокали.

Единственное, когда дождь начинается или заканчивается, надо форсить пересборку всех загруженных на клиенте чанков, что немного не круто, если нельзя сделать это по-тихому.
 
Дождь и снег же распространяются на ту область где находится игрок
Если дождь идет, то он идет во всем мире. Это визуально он рисуется только в небольшом радиусе от игрока.
 
@Agravaine, я же писал, что не уверен.
@Oldestkon, да там дисплейлисты. И под состояниями блоков я имел ввиду blockstates, только с помощью них(и iBakedModel) можно установить текстуру блоку(возможно есть и другие варианты, о которых я не знаю:unsure:)
 
Не знаю как на новых версиях, но на старых достаточно было сделать хук в WorldRenderer в момент, когда он собирает дисплейлист чанка из блоков и подменить там иконку для конкретного блока (там итерируются все блоки в чанке по одному).
Думаю, на новых это мало чем отличается, кроме названий классов и используемого API (если дисплейлисты уже наконец заменили на вбошки).
 
Пусть он намокает только там где игрок(определенный радиус бери), пример со снегом.
Прочитав тему решил сделать так: В определенном радиусе от игрока будет менятся блокстейт. Если блок в него не попадает - он как был дефолтным так и остался. Вполне удобно и не грузит мир, я думаю.
Теперь другой вопрос: как мне связать игрока и блоки? Это ведь не та фигня с рендером, что я на клиенте воротил. Тут серьезнее...
 
Не нужно там состояние блока менять. Надо подменять иконку блока во время сборки чанка в дисплейлист (или что там используется на новых версиях) в зависимости от того, идет ли дождь в мире, есть ли в текущем чанке дождь и находится ли блок под небом. Ничего из этого не требует модификации или чтения блокстейта. Если хочется заменять не только блок прямо под небом - можно использовать в проверке скайлайт, например, чтобы все блоки со светом от неба >= 12 уровня намокали.

Единственное, когда дождь начинается или заканчивается, надо форсить пересборку всех загруженных на клиенте чанков, что немного не круто, если нельзя сделать это по-тихому.
Можно поподробнее пожалуйста? Где, какой класс, какой метод?
Каким образом мне эту иконку подгружать? Где она должна находится для этого?
 
Java:
@SideOnly(Side.CLIENT)
public class RenderList extends ChunkRenderContainer
{
    public void renderChunkLayer(BlockRenderLayer layer)
    {
        if (this.initialized)
        {
            for (RenderChunk renderchunk : this.renderChunks)
            {
                ListedRenderChunk listedrenderchunk = (ListedRenderChunk)renderchunk;
                GlStateManager.pushMatrix();
                this.preRenderChunk(renderchunk);
                GlStateManager.callList(listedrenderchunk.getDisplayList(layer, listedrenderchunk.getCompiledChunk()));
                GlStateManager.popMatrix();
            }

            GlStateManager.resetColor();
            this.renderChunks.clear();
        }
    }
}
Это то что мне надо? И что тут подменять?
 
По моему опыту я бы сказал что смена блока берёт немного больше ресурсов чем смена состояния блока. Ведь при замене блока заново подгружаются и его состояния, а так не нужно их опять грузить. Подобный опыт я получил при игре с IC2, и там я как ставил блоки лагало больше чем например кликнуть краником по каучуковому дереву.
 
Назад
Сверху