package net.minecraft.world.level.chunk; import it.unimi.dsi.fastutil.longs.LongSet; import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Predicate; import javax.annotation.Nullable; import net.minecraft.Util; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeResolver; import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.status.ChunkStatus; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.blending.BlendingData; import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.lighting.ChunkSkyLightSources; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.ticks.BlackholeTickAccess; import net.minecraft.world.ticks.TickContainerAccess; public class ImposterProtoChunk extends ProtoChunk { private final LevelChunk wrapped; private final boolean allowWrites; public ImposterProtoChunk(LevelChunk p_187920_, boolean p_187921_) { super( p_187920_.getPos(), UpgradeData.EMPTY, p_187920_.levelHeightAccessor, p_187920_.getLevel().registryAccess().lookupOrThrow(Registries.BIOME), p_187920_.getBlendingData() ); this.wrapped = p_187920_; this.allowWrites = p_187921_; } @Nullable @Override public BlockEntity getBlockEntity(BlockPos p_62744_) { return this.wrapped.getBlockEntity(p_62744_); } @Override public BlockState getBlockState(BlockPos p_62749_) { return this.wrapped.getBlockState(p_62749_); } @Override public FluidState getFluidState(BlockPos p_62736_) { return this.wrapped.getFluidState(p_62736_); } @Override public LevelChunkSection getSection(int p_187932_) { return this.allowWrites ? this.wrapped.getSection(p_187932_) : super.getSection(p_187932_); } @Nullable @Override public BlockState setBlockState(BlockPos p_62722_, BlockState p_62723_, int p_393892_) { return this.allowWrites ? this.wrapped.setBlockState(p_62722_, p_62723_, p_393892_) : null; } @Override public void setBlockEntity(BlockEntity p_156358_) { if (this.allowWrites) { this.wrapped.setBlockEntity(p_156358_); } } @Override public void addEntity(Entity p_62692_) { if (this.allowWrites) { this.wrapped.addEntity(p_62692_); } } @Override public void setPersistedStatus(ChunkStatus p_342322_) { if (this.allowWrites) { super.setPersistedStatus(p_342322_); } } @Override public LevelChunkSection[] getSections() { return this.wrapped.getSections(); } @Override public void setHeightmap(Heightmap.Types p_62706_, long[] p_62707_) { } private Heightmap.Types fixType(Heightmap.Types p_62742_) { if (p_62742_ == Heightmap.Types.WORLD_SURFACE_WG) { return Heightmap.Types.WORLD_SURFACE; } else { return p_62742_ == Heightmap.Types.OCEAN_FLOOR_WG ? Heightmap.Types.OCEAN_FLOOR : p_62742_; } } @Override public Heightmap getOrCreateHeightmapUnprimed(Heightmap.Types p_187928_) { return this.wrapped.getOrCreateHeightmapUnprimed(p_187928_); } @Override public int getHeight(Heightmap.Types p_62702_, int p_62703_, int p_62704_) { return this.wrapped.getHeight(this.fixType(p_62702_), p_62703_, p_62704_); } @Override public Holder getNoiseBiome(int p_204430_, int p_204431_, int p_204432_) { return this.wrapped.getNoiseBiome(p_204430_, p_204431_, p_204432_); } @Override public ChunkPos getPos() { return this.wrapped.getPos(); } @Nullable @Override public StructureStart getStartForStructure(Structure p_223400_) { return this.wrapped.getStartForStructure(p_223400_); } @Override public void setStartForStructure(Structure p_223405_, StructureStart p_223406_) { } @Override public Map getAllStarts() { return this.wrapped.getAllStarts(); } @Override public void setAllStarts(Map p_62726_) { } @Override public LongSet getReferencesForStructure(Structure p_223408_) { return this.wrapped.getReferencesForStructure(p_223408_); } @Override public void addReferenceForStructure(Structure p_223402_, long p_223403_) { } @Override public Map getAllReferences() { return this.wrapped.getAllReferences(); } @Override public void setAllReferences(Map p_62738_) { } @Override public void markUnsaved() { this.wrapped.markUnsaved(); } @Override public boolean canBeSerialized() { return false; } @Override public boolean tryMarkSaved() { return false; } @Override public boolean isUnsaved() { return false; } @Override public ChunkStatus getPersistedStatus() { return this.wrapped.getPersistedStatus(); } @Override public void removeBlockEntity(BlockPos p_62747_) { } @Override public void markPosForPostprocessing(BlockPos p_62752_) { } @Override public void setBlockEntityNbt(CompoundTag p_62728_) { } @Nullable @Override public CompoundTag getBlockEntityNbt(BlockPos p_62757_) { return this.wrapped.getBlockEntityNbt(p_62757_); } @Nullable @Override public CompoundTag getBlockEntityNbtForSaving(BlockPos p_62760_, HolderLookup.Provider p_334460_) { return this.wrapped.getBlockEntityNbtForSaving(p_62760_, p_334460_); } @Override public void findBlocks(Predicate p_285465_, BiConsumer p_285061_) { this.wrapped.findBlocks(p_285465_, p_285061_); } @Override public TickContainerAccess getBlockTicks() { return this.allowWrites ? this.wrapped.getBlockTicks() : BlackholeTickAccess.emptyContainer(); } @Override public TickContainerAccess getFluidTicks() { return this.allowWrites ? this.wrapped.getFluidTicks() : BlackholeTickAccess.emptyContainer(); } @Override public ChunkAccess.PackedTicks getTicksForSerialization(long p_363186_) { return this.wrapped.getTicksForSerialization(p_363186_); } @Nullable @Override public BlendingData getBlendingData() { return this.wrapped.getBlendingData(); } @Override public CarvingMask getCarvingMask() { if (this.allowWrites) { return super.getCarvingMask(); } else { throw (UnsupportedOperationException)Util.pauseInIde(new UnsupportedOperationException("Meaningless in this context")); } } @Override public CarvingMask getOrCreateCarvingMask() { if (this.allowWrites) { return super.getOrCreateCarvingMask(); } else { throw (UnsupportedOperationException)Util.pauseInIde(new UnsupportedOperationException("Meaningless in this context")); } } public LevelChunk getWrapped() { return this.wrapped; } @Override public boolean isLightCorrect() { return this.wrapped.isLightCorrect(); } @Override public void setLightCorrect(boolean p_62740_) { this.wrapped.setLightCorrect(p_62740_); } @Override public void fillBiomesFromNoise(BiomeResolver p_187923_, Climate.Sampler p_187924_) { if (this.allowWrites) { this.wrapped.fillBiomesFromNoise(p_187923_, p_187924_); } } @Override public void initializeLightSources() { this.wrapped.initializeLightSources(); } @Override public ChunkSkyLightSources getSkyLightSources() { return this.wrapped.getSkyLightSources(); } }