Spaces:
Build error
Build error
package net.minecraft.client.renderer.chunk; | |
import it.unimi.dsi.fastutil.longs.Long2ObjectMap; | |
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; | |
import javax.annotation.Nullable; | |
import net.minecraft.core.SectionPos; | |
import net.minecraft.world.level.ChunkPos; | |
import net.minecraft.world.level.Level; | |
import net.minecraft.world.level.chunk.LevelChunk; | |
import net.minecraftforge.api.distmarker.Dist; | |
import net.minecraftforge.api.distmarker.OnlyIn; | |
public class RenderRegionCache { | |
private final Long2ObjectMap<RenderRegionCache.ChunkInfo> chunkInfoCache = new Long2ObjectOpenHashMap<>(); | |
public RenderChunkRegion createRegion(Level p_200466_, SectionPos p_343190_) { | |
RenderRegionCache.ChunkInfo renderregioncache$chunkinfo = this.getChunkInfo(p_200466_, p_343190_.x(), p_343190_.z()); | |
if (renderregioncache$chunkinfo.chunk().isSectionEmpty(p_343190_.y())) { | |
return null; | |
} else { | |
int i = p_343190_.x() - 1; | |
int j = p_343190_.z() - 1; | |
int k = p_343190_.x() + 1; | |
int l = p_343190_.z() + 1; | |
RenderChunk[] arenderchunk = new RenderChunk[9]; | |
for (int i1 = j; i1 <= l; i1++) { | |
for (int j1 = i; j1 <= k; j1++) { | |
int k1 = RenderChunkRegion.index(i, j, j1, i1); | |
RenderRegionCache.ChunkInfo renderregioncache$chunkinfo1 = j1 == p_343190_.x() && i1 == p_343190_.z() | |
? renderregioncache$chunkinfo | |
: this.getChunkInfo(p_200466_, j1, i1); | |
arenderchunk[k1] = renderregioncache$chunkinfo1.renderChunk(); | |
} | |
} | |
return new RenderChunkRegion(p_200466_, i, j, arenderchunk); | |
} | |
} | |
private RenderRegionCache.ChunkInfo getChunkInfo(Level p_344202_, int p_345234_, int p_342074_) { | |
return this.chunkInfoCache | |
.computeIfAbsent( | |
ChunkPos.asLong(p_345234_, p_342074_), | |
p_200464_ -> new RenderRegionCache.ChunkInfo(p_344202_.getChunk(ChunkPos.getX(p_200464_), ChunkPos.getZ(p_200464_))) | |
); | |
} | |
static final class ChunkInfo { | |
private final LevelChunk chunk; | |
private RenderChunk renderChunk; | |
ChunkInfo(LevelChunk p_200479_) { | |
this.chunk = p_200479_; | |
} | |
public LevelChunk chunk() { | |
return this.chunk; | |
} | |
public RenderChunk renderChunk() { | |
if (this.renderChunk == null) { | |
this.renderChunk = new RenderChunk(this.chunk); | |
} | |
return this.renderChunk; | |
} | |
} | |
} |