Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Что ? как?Как вы знаете, есть в новых версиях такая фича, как рендер чего либо на сущности.
Слои - Minecraft ModdingЧто ? как?
Хорошая идея. Подскажи класс, где рендерится блок?Либо пихать хуком свой рендер для блоков
У тебя нет возможности покопаться в RenderGlobal и самому посмотреть что да как?Можешь скинуть че там внутри этого WorldRenderer ? Просто может его тут переименовали, а начинка таже осталась
Уже понял. Нашел там такое:У тебя нет возможности покопаться в RenderGlobal и самому посмотреть что да как?
public int renderBlockLayer(BlockRenderLayer blockLayerIn, double partialTicks, int pass, Entity entityIn)
{
RenderHelper.disableStandardItemLighting();
if (blockLayerIn == BlockRenderLayer.TRANSLUCENT)
{
this.mc.mcProfiler.startSection("translucent_sort");
double d0 = entityIn.posX - this.prevRenderSortX;
double d1 = entityIn.posY - this.prevRenderSortY;
double d2 = entityIn.posZ - this.prevRenderSortZ;
if (d0 * d0 + d1 * d1 + d2 * d2 > 1.0D)
{
this.prevRenderSortX = entityIn.posX;
this.prevRenderSortY = entityIn.posY;
this.prevRenderSortZ = entityIn.posZ;
int k = 0;
for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation : this.renderInfos)
{
if (renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk.isLayerStarted(blockLayerIn) && k++ < 15)
{
this.renderDispatcher.updateTransparencyLater(renderglobal$containerlocalrenderinformation.renderChunk);
}
}
}
this.mc.mcProfiler.endSection();
}
this.mc.mcProfiler.startSection("filterempty");
int l = 0;
boolean flag = blockLayerIn == BlockRenderLayer.TRANSLUCENT;
int i1 = flag ? this.renderInfos.size() - 1 : 0;
int i = flag ? -1 : this.renderInfos.size();
int j1 = flag ? -1 : 1;
for (int j = i1; j != i; j += j1)
{
RenderChunk renderchunk = (this.renderInfos.get(j)).renderChunk;
if (!renderchunk.getCompiledChunk().isLayerEmpty(blockLayerIn))
{
++l;
this.renderContainer.addRenderChunk(renderchunk, blockLayerIn);
}
}
this.mc.mcProfiler.func_194339_b(() ->
{
return "render_" + blockLayerIn;
});
this.renderBlockLayer(blockLayerIn);
this.mc.mcProfiler.endSection();
return l;
}
@SuppressWarnings("incomplete-switch")
private void renderBlockLayer(BlockRenderLayer blockLayerIn)
{
this.mc.entityRenderer.enableLightmap();
if (OpenGlHelper.useVbo())
{
GlStateManager.glEnableClientState(32884);
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
GlStateManager.glEnableClientState(32888);
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
GlStateManager.glEnableClientState(32888);
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
GlStateManager.glEnableClientState(32886);
}
this.renderContainer.renderChunkLayer(blockLayerIn);
if (OpenGlHelper.useVbo())
{
for (VertexFormatElement vertexformatelement : DefaultVertexFormats.BLOCK.getElements())
{
VertexFormatElement.EnumUsage vertexformatelement$enumusage = vertexformatelement.getUsage();
int k1 = vertexformatelement.getIndex();
switch (vertexformatelement$enumusage)
{
case POSITION:
GlStateManager.glDisableClientState(32884);
break;
case UV:
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit + k1);
GlStateManager.glDisableClientState(32888);
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
break;
case COLOR:
GlStateManager.glDisableClientState(32886);
GlStateManager.resetColor();
}
}
}
this.mc.entityRenderer.disableLightmap();
}
Разобраться бы как там че работает, чтобы ясно было куда хук сувать... В этом методе только renderBlock вызываетсяКуда-нить в RenderChunk.rebuildChunk
public boolean renderBlock(IBlockState state, BlockPos pos, IBlockAccess blockAccess, BufferBuilder bufferBuilderIn)
{
try
{
EnumBlockRenderType enumblockrendertype = state.getRenderType();
if (enumblockrendertype == EnumBlockRenderType.INVISIBLE)
{
return false;
}
else
{
if (blockAccess.getWorldType() != WorldType.DEBUG_ALL_BLOCK_STATES)
{
try
{
state = state.getActualState(blockAccess, pos);
}
catch (Exception var8)
{
;
}
}
switch (enumblockrendertype)
{
case MODEL:
IBakedModel model = this.getModelForState(state);
state = state.getBlock().getExtendedState(state, blockAccess, pos);
return this.blockModelRenderer.renderModel(blockAccess, model, state, pos, bufferBuilderIn, true);
case ENTITYBLOCK_ANIMATED:
return false;
case LIQUID:
return this.fluidRenderer.renderFluid(blockAccess, state, pos, bufferBuilderIn);
default:
return false;
}
}
}
catch (Throwable throwable)
{
CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Tesselating block in world");
CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being tesselated");
CrashReportCategory.addBlockInfo(crashreportcategory, pos, state.getBlock(), state.getBlock().getMetaFromState(state));
throw new ReportedException(crashreport);
}
}