Skip to content

Instantly share code, notes, and snippets.

@Cadiboo
Created February 3, 2019 02:56
Show Gist options
  • Save Cadiboo/206c2962eac7b1ed18ff2a911f5c5528 to your computer and use it in GitHub Desktop.
Save Cadiboo/206c2962eac7b1ed18ff2a911f5c5528 to your computer and use it in GitHub Desktop.
1.13 RenderChunk#rebuildChunk
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