Created
February 3, 2019 02:56
-
-
Save Cadiboo/206c2962eac7b1ed18ff2a911f5c5528 to your computer and use it in GitHub Desktop.
1.13 RenderChunk#rebuildChunk
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void rebuildChunk(float x, float y, float z, ChunkRenderTask generator) { | |
CompiledChunk compiledchunk = new CompiledChunk(); | |
int i = 1; | |
BlockPos blockpos = this.position; | |
BlockPos blockpos1 = blockpos.add(15, 15, 15); | |
World world = this.world; | |
if (world != null) { | |
generator.getLock().lock(); | |
try { | |
if (generator.getStatus() != ChunkRenderTask.Status.COMPILING) { | |
return; | |
} | |
generator.setCompiledChunk(compiledchunk); | |
} finally { | |
generator.getLock().unlock(); | |
} | |
ChunkCache lvt_10_1_ = createRegionRenderCache(this.world, blockpos.add(-1, -1, -1), blockpos.add(16, 16, 16), 1); | |
net.minecraftforge.client.MinecraftForgeClient.onRebuildChunk(this.world, this.position, lvt_10_1_); | |
VisGraph lvt_11_1_ = new VisGraph(); | |
HashSet lvt_12_1_ = Sets.newHashSet(); | |
if (!lvt_10_1_.isEmpty()) { | |
++renderChunksUpdated; | |
boolean[] aboolean = new boolean[BlockRenderLayer.values().length]; | |
BlockModelRenderer.enableCache(); | |
Random random = new Random(); | |
BlockRendererDispatcher blockrendererdispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); | |
for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos1)) { | |
IBlockState iblockstate = lvt_10_1_.getBlockState(blockpos$mutableblockpos); | |
Block block = iblockstate.getBlock(); | |
if (iblockstate.isOpaqueCube(lvt_10_1_, blockpos$mutableblockpos)) { | |
lvt_11_1_.setOpaqueCube(blockpos$mutableblockpos); | |
} | |
if (block.hasTileEntity(iblockstate)) { | |
TileEntity tileentity = lvt_10_1_.getTileEntity(blockpos$mutableblockpos, Chunk.EnumCreateEntityType.CHECK); | |
if (tileentity != null) { | |
TileEntityRenderer<TileEntity> tileentityrenderer = TileEntityRendererDispatcher.instance.<TileEntity>getRenderer(tileentity); | |
if (tileentityrenderer != null) { | |
if (tileentityrenderer.isGlobalRenderer(tileentity)) { | |
lvt_12_1_.add(tileentity); | |
} else compiledchunk.addTileEntity(tileentity); // FORGE: Fix MC-112730 | |
} | |
} | |
} | |
IFluidState ifluidstate = lvt_10_1_.getFluidState(blockpos$mutableblockpos); | |
for (BlockRenderLayer blockrenderlayer1 : BlockRenderLayer.values()) { | |
net.minecraftforge.client.ForgeHooksClient.setRenderLayer(blockrenderlayer1); | |
if (!ifluidstate.isEmpty() && ifluidstate.canRenderInLayer(blockrenderlayer1)) { | |
int j = blockrenderlayer1.ordinal(); | |
BufferBuilder bufferbuilder = generator.getRegionRenderCacheBuilder().getBuilder(j); | |
if (!compiledchunk.isLayerStarted(blockrenderlayer1)) { | |
compiledchunk.setLayerStarted(blockrenderlayer1); | |
this.preRenderBlocks(bufferbuilder, blockpos); | |
} | |
aboolean[j] |= blockrendererdispatcher.renderFluid(blockpos$mutableblockpos, lvt_10_1_, bufferbuilder, ifluidstate); | |
} | |
if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE && iblockstate.canRenderInLayer(blockrenderlayer1)) { | |
int k = blockrenderlayer1.ordinal(); | |
BufferBuilder bufferbuilder1 = generator.getRegionRenderCacheBuilder().getBuilder(k); | |
if (!compiledchunk.isLayerStarted(blockrenderlayer1)) { | |
compiledchunk.setLayerStarted(blockrenderlayer1); | |
this.preRenderBlocks(bufferbuilder1, blockpos); | |
} | |
aboolean[k] |= blockrendererdispatcher.renderBlock(iblockstate, blockpos$mutableblockpos, lvt_10_1_, bufferbuilder1, random); | |
} | |
} | |
net.minecraftforge.client.ForgeHooksClient.setRenderLayer(null); | |
} | |
for (BlockRenderLayer blockrenderlayer : BlockRenderLayer.values()) { | |
if (aboolean[blockrenderlayer.ordinal()]) { | |
compiledchunk.setLayerUsed(blockrenderlayer); | |
} | |
if (compiledchunk.isLayerStarted(blockrenderlayer)) { | |
this.postRenderBlocks(blockrenderlayer, x, y, z, generator.getRegionRenderCacheBuilder().getBuilder(blockrenderlayer), compiledchunk); | |
} | |
} | |
BlockModelRenderer.disableCache(); | |
} | |
compiledchunk.setVisibility(lvt_11_1_.computeVisibility()); | |
this.lockCompileTask.lock(); | |
try { | |
Set<TileEntity> set = Sets.newHashSet(lvt_12_1_); | |
Set<TileEntity> set1 = Sets.newHashSet(this.setTileEntities); | |
set.removeAll(this.setTileEntities); | |
set1.removeAll(lvt_12_1_); | |
this.setTileEntities.clear(); | |
this.setTileEntities.addAll(lvt_12_1_); | |
this.renderGlobal.updateTileEntities(set1, set); | |
} finally { | |
this.lockCompileTask.unlock(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment