Package net.minecraft.server.level
Class ChunkMap
java.lang.Object
net.minecraft.world.level.chunk.storage.ChunkStorage
net.minecraft.server.level.ChunkMap
- All Implemented Interfaces:
AutoCloseable
,ChunkHolder.PlayerProvider
,GeneratingChunkMap
public class ChunkMap
extends ChunkStorage
implements ChunkHolder.PlayerProvider, GeneratingChunkMap
-
Nested Class Summary
Modifier and TypeClassDescription(package private) class
(package private) class
-
Field Summary
Modifier and TypeFieldDescriptionprivate static final int
private static final int
private static final byte
private static final byte
private static final byte
private final ChunkGeneratorStructureState
private final it.unimi.dsi.fastutil.longs.Long2LongMap
private final ChunkStatusUpdateListener
private final it.unimi.dsi.fastutil.longs.Long2ByteMap
private final ChunkMap.DistanceManager
private static final int
private final it.unimi.dsi.fastutil.ints.Int2ObjectMap
<ChunkMap.TrackedEntity> static final int
(package private) final ServerLevel
private final ThreadedLevelLightEngine
private static final org.slf4j.Logger
private final BlockableEventLoop
<Runnable> private final ProcessorHandle
<ChunkTaskPriorityQueueSorter.Message<Runnable>> static final int
static final int
private boolean
private final Supplier
<DimensionDataStorage> private final List
<ChunkGenerationTask> private final it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap
<ChunkHolder> private final PlayerMap
private final PoiManager
private final ChunkProgressListener
private final ChunkTaskPriorityQueueSorter
private final RandomState
private int
private final String
private final AtomicInteger
(package private) final it.unimi.dsi.fastutil.longs.LongSet
private static final CompletableFuture
<ChunkResult<List<ChunkAccess>>> private static final ChunkResult
<List<ChunkAccess>> private final it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap
<ChunkHolder> private it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap
<ChunkHolder> private final WorldGenContext
private final ProcessorHandle
<ChunkTaskPriorityQueueSorter.Message<Runnable>> Fields inherited from class net.minecraft.world.level.chunk.storage.ChunkStorage
fixerUpper, LAST_MONOLYTH_STRUCTURE_DATA_VERSION
-
Constructor Summary
ConstructorDescriptionChunkMap
(ServerLevel p_214836_, LevelStorageSource.LevelStorageAccess p_214837_, com.mojang.datafixers.DataFixer p_214838_, StructureTemplateManager p_214839_, Executor p_214840_, BlockableEventLoop<Runnable> p_214841_, LightChunkGetter p_214842_, ChunkGenerator p_214843_, ChunkProgressListener p_214844_, ChunkStatusUpdateListener p_214845_, Supplier<DimensionDataStorage> p_214846_, int p_214847_, boolean p_214848_) -
Method Summary
Modifier and TypeMethodDescriptionacquireGeneration
(long p_347661_) protected void
(package private) boolean
anyPlayerCloseEnoughForSpawning
(ChunkPos p_183880_) private void
applyChunkTrackingView
(ServerPlayer p_294188_, ChunkTrackingView p_294174_) applyStep
(GenerationChunkHolder p_347627_, ChunkStep p_347638_, StaticCache2D<GenerationChunkHolder> p_347552_) void
protected void
broadcastAndSend
(Entity p_140334_, Packet<?> p_140335_) void
close()
private ChunkAccess
createEmptyChunk
(ChunkPos p_214962_) debugFuturesAndCreateReportedException
(IllegalStateException p_203752_, String p_203753_) private static void
dropChunk
(ServerPlayer p_294215_, ChunkPos p_294758_) (package private) void
dumpChunks
(Writer p_140275_) private static double
euclideanDistanceSquared
(ChunkPos p_140227_, Entity p_140228_) protected ChunkGenerator
protected ChunkGeneratorStructureState
getChunkDebugData
(ChunkPos p_140205_) protected IntSupplier
getChunkQueueLevel
(long p_140372_) private CompletableFuture
<ChunkResult<List<ChunkAccess>>> getChunkRangeFuture
(ChunkHolder p_281446_, int p_282030_, IntFunction<ChunkStatus> p_282923_) protected Iterable
<ChunkHolder> getChunkToSend
(long p_300929_) protected ThreadedLevelLightEngine
getPlayers
(ChunkPos p_183801_, boolean p_183802_) getPlayersCloseForSpawning
(ChunkPos p_183889_) (package private) int
getPlayerViewDistance
(ServerPlayer p_295024_) protected PoiManager
int
protected ChunkHolder
getUpdatingChunkIfPresent
(long p_140175_) getVisibleChunkIfPresent
(long p_140328_) private ChunkAccess
handleChunkLoadFailure
(Throwable p_214902_, ChunkPos p_214903_) boolean
hasWork()
private static boolean
isChunkDataValid
(CompoundTag p_214941_) private boolean
isChunkOnTrackedBorder
(ServerPlayer p_295596_, int p_294838_, int p_295212_) (package private) boolean
isChunkTracked
(ServerPlayer p_295366_, int p_294911_, int p_296247_) private boolean
isExistingChunkFull
(ChunkPos p_140426_) private static void
markChunkPendingToSend
(ServerPlayer p_295834_, LevelChunk p_296281_) private void
markChunkPendingToSend
(ServerPlayer p_294638_, ChunkPos p_296183_) private byte
markPosition
(ChunkPos p_140230_, ChunkType p_332120_) private void
markPositionReplaceable
(ChunkPos p_140423_) void
move
(ServerPlayer p_140185_) private void
onChunkReadyToSend
(LevelChunk p_296003_) (package private) void
onFullChunkStatusChange
(ChunkPos p_287612_, FullChunkStatus p_287685_) private boolean
playerIsCloseEnoughForSpawning
(ServerPlayer p_183752_, ChunkPos p_183753_) prepareAccessibleChunk
(ChunkHolder p_143110_) prepareEntityTickingChunk
(ChunkHolder p_281455_) prepareTickingChunk
(ChunkHolder p_143054_) private static String
printFuture
(CompletableFuture<ChunkResult<LevelChunk>> p_140279_) private void
processUnloads
(BooleanSupplier p_140354_) protected boolean
protected RandomState
private CompletableFuture
<Optional<CompoundTag>> void
releaseGeneration
(GenerationChunkHolder p_347698_) protected void
removeEntity
(Entity p_140332_) void
resendBiomesForChunks
(List<ChunkAccess> p_275577_) private void
runGenerationTask
(ChunkGenerationTask p_347721_) void
private boolean
save
(ChunkAccess p_140259_) protected void
saveAllChunks
(boolean p_140319_) private boolean
saveChunkIfNeeded
(ChunkHolder p_198875_) private CompletableFuture
<ChunkAccess> scheduleChunkLoad
(ChunkPos p_140418_) scheduleGenerationTask
(ChunkStatus p_347605_, ChunkPos p_347675_) void
Neo: PR #937 This is for mainly pre-generation usage such as Neoforge's generate command.private void
scheduleUnload
(long p_140182_, ChunkHolder p_140183_) protected void
setServerViewDistance
(int p_295758_) int
size()
private boolean
skipPlayer
(ServerPlayer p_140330_) protected void
tick()
protected void
tick
(BooleanSupplier p_140281_) (package private) ChunkHolder
updateChunkScheduling
(long p_140177_, int p_140178_, ChunkHolder p_140179_, int p_140180_) private void
updateChunkTracking
(ServerPlayer p_183755_) private void
updatePlayerPos
(ServerPlayer p_140374_) (package private) void
updatePlayerStatus
(ServerPlayer p_140193_, boolean p_140194_) private CompoundTag
upgradeChunkTag
(CompoundTag p_214948_) void
waitForLightBeforeSending
(ChunkPos p_301194_, int p_301130_) Methods inherited from class net.minecraft.world.level.chunk.storage.ChunkStorage
chunkScanner, flushWorker, getVersion, handleLegacyStructureIndex, injectDatafixingContext, isOldChunkAround, read, storageInfo, upgradeChunkTag, write
-
Field Details
-
UNLOADED_CHUNK_LIST_RESULT
-
UNLOADED_CHUNK_LIST_FUTURE
-
CHUNK_TYPE_REPLACEABLE
private static final byte CHUNK_TYPE_REPLACEABLE- See Also:
-
CHUNK_TYPE_UNKNOWN
private static final byte CHUNK_TYPE_UNKNOWN- See Also:
-
CHUNK_TYPE_FULL
private static final byte CHUNK_TYPE_FULL- See Also:
-
LOGGER
private static final org.slf4j.Logger LOGGER -
CHUNK_SAVED_PER_TICK
private static final int CHUNK_SAVED_PER_TICK- See Also:
-
CHUNK_SAVED_EAGERLY_PER_TICK
private static final int CHUNK_SAVED_EAGERLY_PER_TICK- See Also:
-
EAGER_CHUNK_SAVE_COOLDOWN_IN_MILLIS
private static final int EAGER_CHUNK_SAVE_COOLDOWN_IN_MILLIS- See Also:
-
MIN_VIEW_DISTANCE
public static final int MIN_VIEW_DISTANCE- See Also:
-
MAX_VIEW_DISTANCE
public static final int MAX_VIEW_DISTANCE- See Also:
-
FORCED_TICKET_LEVEL
public static final int FORCED_TICKET_LEVEL -
updatingChunkMap
private final it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap<ChunkHolder> updatingChunkMap -
visibleChunkMap
private volatile it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap<ChunkHolder> visibleChunkMap -
pendingUnloads
-
pendingGenerationTasks
-
level
-
lightEngine
-
mainThreadExecutor
-
randomState
-
chunkGeneratorState
-
overworldDataStorage
-
poiManager
-
toDrop
final it.unimi.dsi.fastutil.longs.LongSet toDrop -
modified
private boolean modified -
queueSorter
-
worldgenMailbox
-
mainThreadMailbox
-
progressListener
-
chunkStatusListener
-
distanceManager
-
tickingGenerated
-
storageName
-
playerMap
-
entityMap
-
chunkTypeCache
private final it.unimi.dsi.fastutil.longs.Long2ByteMap chunkTypeCache -
chunkSaveCooldowns
private final it.unimi.dsi.fastutil.longs.Long2LongMap chunkSaveCooldowns -
unloadQueue
-
serverViewDistance
private int serverViewDistance -
worldGenContext
-
-
Constructor Details
-
ChunkMap
public ChunkMap(ServerLevel p_214836_, LevelStorageSource.LevelStorageAccess p_214837_, com.mojang.datafixers.DataFixer p_214838_, StructureTemplateManager p_214839_, Executor p_214840_, BlockableEventLoop<Runnable> p_214841_, LightChunkGetter p_214842_, ChunkGenerator p_214843_, ChunkProgressListener p_214844_, ChunkStatusUpdateListener p_214845_, Supplier<DimensionDataStorage> p_214846_, int p_214847_, boolean p_214848_)
-
-
Method Details
-
generator
-
generatorState
-
randomState
-
euclideanDistanceSquared
-
isChunkTracked
-
isChunkOnTrackedBorder
-
getLightEngine
-
getUpdatingChunkIfPresent
-
getVisibleChunkIfPresent
-
getChunkQueueLevel
-
getChunkDebugData
-
getChunkRangeFuture
private CompletableFuture<ChunkResult<List<ChunkAccess>>> getChunkRangeFuture(ChunkHolder p_281446_, int p_282030_, IntFunction<ChunkStatus> p_282923_) -
debugFuturesAndCreateReportedException
public ReportedException debugFuturesAndCreateReportedException(IllegalStateException p_203752_, String p_203753_) -
prepareEntityTickingChunk
-
updateChunkScheduling
@Nullable ChunkHolder updateChunkScheduling(long p_140177_, int p_140178_, @Nullable ChunkHolder p_140179_, int p_140180_) -
close
- Specified by:
close
in interfaceAutoCloseable
- Overrides:
close
in classChunkStorage
- Throws:
IOException
-
saveAllChunks
protected void saveAllChunks(boolean p_140319_) -
tick
-
hasWork
public boolean hasWork() -
processUnloads
-
scheduleUnload
-
promoteChunkMap
protected boolean promoteChunkMap() -
scheduleChunkLoad
-
isChunkDataValid
-
handleChunkLoadFailure
-
createEmptyChunk
-
markPositionReplaceable
-
markPosition
-
acquireGeneration
- Specified by:
acquireGeneration
in interfaceGeneratingChunkMap
-
releaseGeneration
- Specified by:
releaseGeneration
in interfaceGeneratingChunkMap
-
applyStep
public CompletableFuture<ChunkAccess> applyStep(GenerationChunkHolder p_347627_, ChunkStep p_347638_, StaticCache2D<GenerationChunkHolder> p_347552_) - Specified by:
applyStep
in interfaceGeneratingChunkMap
-
scheduleGenerationTask
- Specified by:
scheduleGenerationTask
in interfaceGeneratingChunkMap
-
runGenerationTask
-
runGenerationTasks
public void runGenerationTasks()- Specified by:
runGenerationTasks
in interfaceGeneratingChunkMap
-
prepareTickingChunk
-
onChunkReadyToSend
-
prepareAccessibleChunk
-
getTickingGenerated
public int getTickingGenerated() -
saveChunkIfNeeded
-
save
-
isExistingChunkFull
-
setServerViewDistance
protected void setServerViewDistance(int p_295758_) -
getPlayerViewDistance
-
markChunkPendingToSend
-
markChunkPendingToSend
-
dropChunk
-
getChunkToSend
-
size
public int size() -
getDistanceManager
-
getChunks
-
dumpChunks
- Throws:
IOException
-
printFuture
-
readChunk
-
upgradeChunkTag
-
anyPlayerCloseEnoughForSpawning
-
getPlayersCloseForSpawning
-
playerIsCloseEnoughForSpawning
-
skipPlayer
-
updatePlayerStatus
-
updatePlayerPos
-
move
-
updateChunkTracking
-
applyChunkTrackingView
-
getPlayers
- Specified by:
getPlayers
in interfaceChunkHolder.PlayerProvider
-
addEntity
-
removeEntity
-
tick
protected void tick() -
broadcast
-
broadcastAndSend
-
resendBiomesForChunks
-
getPoiManager
-
getStorageName
-
onFullChunkStatusChange
-
waitForLightBeforeSending
-
scheduleOnMainThreadMailbox
Neo: PR #937 This is for mainly pre-generation usage such as Neoforge's generate command. Use this to schedule chunk load tasks into ChunkTaskPriorityQueueSorter so a chunk is fully finished all of their tasks before scheduling more chunks to load. Reason for this is when scheduling a huge ton of Full Status chunk tasks to the server (to load chunks), you could cause the server to only process those loading tasks and never reach the two chunk tasks that are automatically scheduled to run after the chunk is loaded to Full. As a result of flooding the system with Full Status chunk tasks, the queue for the two kind of successor chunk tasks will grow and become a memory leak of lambdas and chunk references. Use this method to schedule tasks for loading chunks in your whenCompleteAsync method call so the tasks gets processed properly over time and not leak. SeeGenerationTask.enqueueChunks(it.unimi.dsi.fastutil.longs.LongList)
as an example usage of this method.
-