Package net.minecraft.server.world
Class ThreadedAnvilChunkStorage
java.lang.Object
net.minecraft.world.storage.VersionedChunkStorage
net.minecraft.server.world.ThreadedAnvilChunkStorage
- All Implemented Interfaces:
AutoCloseable,ChunkHolder.PlayersWatchingChunkProvider
public class ThreadedAnvilChunkStorage extends VersionedChunkStorage implements ChunkHolder.PlayersWatchingChunkProvider
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) classThreadedAnvilChunkStorage.EntityTracker(package private) classThreadedAnvilChunkStorage.TicketManager -
Field Summary
Fields inherited from class net.minecraft.world.storage.VersionedChunkStorage
dataFixer -
Constructor Summary
Constructors Constructor Description ThreadedAnvilChunkStorage(ServerWorld serverWorld, LevelStorage.Session session, com.mojang.datafixers.DataFixer dataFixer, StructureManager structureManager, Executor workerExecutor, ThreadExecutor<Runnable> mainThreadExecutor, ChunkProvider chunkProvider, ChunkGenerator chunkGenerator, WorldGenerationProgressListener worldGenerationProgressListener, Supplier<PersistentStateManager> supplier, int int2, boolean bool) -
Method Summary
Modifier and Type Method Description voidclose()private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>>convertToFullChunk(ChunkHolder chunkHolder)private booleandoesNotGenerateChunks(ServerPlayerEntity player)(package private) voiddump(Writer writer)CompletableFuture<Void>enableTickSchedulers(WorldChunk worldChunk)protected Iterable<ChunkHolder>entryIterator()private static intgetChebyshevDistance(ChunkPos pos, int x, int z)private static intgetChebyshevDistance(ChunkPos pos, ServerPlayerEntity player, boolean useWatchedPosition)CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>>getChunk(ChunkHolder holder, ChunkStatus requiredStatus)protected ChunkHoldergetChunkHolder(long pos)StringgetChunkLoadingDebugInfo(ChunkPos chunkPos)protected IntSuppliergetCompletedLevelSupplier(long pos)protected ChunkHoldergetCurrentChunkHolder(long pos)private static StringgetFutureStatus(CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>> completableFuture)protected ServerLightingProvidergetLightProvider()intgetLoadedChunkCount()Stream<ServerPlayerEntity>getPlayersWatchingChunk(ChunkPos chunkPos, boolean onlyOnWatchDistanceEdge)protected PointOfInterestStoragegetPointOfInterestStorage()private CompletableFuture<com.mojang.datafixers.util.Either<List<Chunk>,ChunkHolder.Unloaded>>getRegion(ChunkPos centerChunk, int margin, IntFunction<ChunkStatus> distanceToStatus)private ChunkStatusgetRequiredStatusForGeneration(ChunkStatus centerChunkTargetStatus, int distance)private static doublegetSquaredDistance(ChunkPos pos, Entity entity)protected ThreadedAnvilChunkStorage.TicketManagergetTicketManager()intgetTotalChunksLoadedCount()private NbtCompoundgetUpdatedChunkNbt(ChunkPos pos)(package private) voidhandlePlayerAddedOrRemoved(ServerPlayerEntity player, boolean added)(package private) booleanisTooFarFromPlayersToSpawnMobs(ChunkPos chunkPos)private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>>loadChunk(ChunkPos pos)protected voidloadEntity(Entity entity)CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>>makeChunkAccessible(ChunkHolder holder)CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>>makeChunkEntitiesTickable(ChunkPos pos)CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>>makeChunkTickable(ChunkHolder holder)private ChunkSectionPosmethod_20726(ServerPlayerEntity serverPlayerEntity)private bytemethod_27053(ChunkPos chunkPos, ChunkStatus.ChunkType chunkType)private voidmethod_27054(ChunkPos chunkPos)private booleanmethod_27055(ChunkPos chunkPos)protected voidreleaseLightTicket(ChunkPos pos)protected voidsave(boolean flush)private booleansave(Chunk chunk)private voidsendChunkDataPackets(ServerPlayerEntity player, Packet<?>[] packets, WorldChunk chunk)protected voidsendToNearbyPlayers(Entity entity, Packet<?> packet)protected voidsendToOtherNearbyPlayers(Entity entity, Packet<?> packet)protected voidsendWatchPackets(ServerPlayerEntity player, ChunkPos pos, Packet<?>[] packets, boolean withinMaxWatchDistance, boolean withinViewDistance)private ChunkHoldersetLevel(long pos, int level, ChunkHolder holder, int int2)protected voidsetViewDistance(int watchDistance)protected voidtick(BooleanSupplier shouldKeepTicking)protected voidtickEntityMovement()Ticks and updates the tracked status of each tracker.private voidtryUnloadChunk(long pos, ChunkHolder chunkHolder)private voidunloadChunks(BooleanSupplier shouldKeepTicking)protected voidunloadEntity(Entity entity)protected booleanupdateHolderMap()voidupdatePosition(ServerPlayerEntity player)Updates the chunk section position of theplayer.private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>>upgradeChunk(ChunkHolder holder, ChunkStatus requiredStatus)Methods inherited from class net.minecraft.world.storage.VersionedChunkStorage
completeAll, getDataVersion, getNbt, setNbt, updateChunkNbt
-
Field Details
-
LOGGER
-
MAX_LEVEL
public static final int MAX_LEVELSpecifies the maximum ticket level a chunk can be before a chunk'sChunkHolder.LevelTypeisChunkHolder.LevelType.BORDER. -
currentChunkHolders
-
chunkHolders
-
chunksToUnload
-
loadedChunks
-
world
-
serverLightingProvider
-
mainThreadExecutor
-
chunkGenerator
-
persistentStateManagerFactory
-
pointOfInterestStorage
-
unloadedChunks
-
chunkHolderListDirty
private boolean chunkHolderListDirty -
chunkTaskPrioritySystem
-
worldGenExecutor
-
mainExecutor
-
worldGenerationProgressListener
-
ticketManager
-
totalChunksLoadedCount
-
structureManager
-
saveDir
-
playerChunkWatchingManager
-
entityTrackers
-
chunkToType
-
unloadTaskQueue
-
watchDistance
private int watchDistance
-
-
Constructor Details
-
ThreadedAnvilChunkStorage
public ThreadedAnvilChunkStorage(ServerWorld serverWorld, LevelStorage.Session session, com.mojang.datafixers.DataFixer dataFixer, StructureManager structureManager, Executor workerExecutor, ThreadExecutor<Runnable> mainThreadExecutor, ChunkProvider chunkProvider, ChunkGenerator chunkGenerator, WorldGenerationProgressListener worldGenerationProgressListener, Supplier<PersistentStateManager> supplier, int int2, boolean bool)
-
-
Method Details
-
getSquaredDistance
-
getChebyshevDistance
private static int getChebyshevDistance(ChunkPos pos, ServerPlayerEntity player, boolean useWatchedPosition) -
getChebyshevDistance
-
getLightProvider
-
getCurrentChunkHolder
-
getChunkHolder
-
getCompletedLevelSupplier
-
getChunkLoadingDebugInfo
-
getRegion
private CompletableFuture<com.mojang.datafixers.util.Either<List<Chunk>,ChunkHolder.Unloaded>> getRegion(ChunkPos centerChunk, int margin, IntFunction<ChunkStatus> distanceToStatus) -
makeChunkEntitiesTickable
public CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>> makeChunkEntitiesTickable(ChunkPos pos) -
setLevel
@Nullable private ChunkHolder setLevel(long pos, int level, @Nullable ChunkHolder holder, int int2) -
close
- Specified by:
closein interfaceAutoCloseable- Overrides:
closein classVersionedChunkStorage- Throws:
IOException
-
save
protected void save(boolean flush) -
tick
-
unloadChunks
-
tryUnloadChunk
-
updateHolderMap
protected boolean updateHolderMap() -
getChunk
public CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>> getChunk(ChunkHolder holder, ChunkStatus requiredStatus) -
loadChunk
private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>> loadChunk(ChunkPos pos) -
method_27054
-
method_27053
-
upgradeChunk
private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>> upgradeChunk(ChunkHolder holder, ChunkStatus requiredStatus) -
releaseLightTicket
-
getRequiredStatusForGeneration
private ChunkStatus getRequiredStatusForGeneration(ChunkStatus centerChunkTargetStatus, int distance) -
convertToFullChunk
private CompletableFuture<com.mojang.datafixers.util.Either<Chunk,ChunkHolder.Unloaded>> convertToFullChunk(ChunkHolder chunkHolder) -
makeChunkTickable
public CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>> makeChunkTickable(ChunkHolder holder) -
makeChunkAccessible
public CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>> makeChunkAccessible(ChunkHolder holder) -
getTotalChunksLoadedCount
public int getTotalChunksLoadedCount() -
save
-
method_27055
-
setViewDistance
protected void setViewDistance(int watchDistance) -
sendWatchPackets
protected void sendWatchPackets(ServerPlayerEntity player, ChunkPos pos, Packet<?>[] packets, boolean withinMaxWatchDistance, boolean withinViewDistance) -
getLoadedChunkCount
public int getLoadedChunkCount() -
getTicketManager
-
entryIterator
-
dump
- Throws:
IOException
-
getFutureStatus
private static String getFutureStatus(CompletableFuture<com.mojang.datafixers.util.Either<WorldChunk,ChunkHolder.Unloaded>> completableFuture) -
getUpdatedChunkNbt
- Throws:
IOException
-
isTooFarFromPlayersToSpawnMobs
-
doesNotGenerateChunks
-
handlePlayerAddedOrRemoved
-
method_20726
-
updatePosition
Updates the chunk section position of theplayer. This updates the player position for both entity tracking and chunk loading (watching) logic. -
getPlayersWatchingChunk
public Stream<ServerPlayerEntity> getPlayersWatchingChunk(ChunkPos chunkPos, boolean onlyOnWatchDistanceEdge)- Specified by:
getPlayersWatchingChunkin interfaceChunkHolder.PlayersWatchingChunkProvider
-
loadEntity
-
unloadEntity
-
tickEntityMovement
protected void tickEntityMovement()Ticks and updates the tracked status of each tracker.This first checks if entities have changed chunk sections, and updates tracking status of those entities to all players. It then checks if any player has changed chunk sections, and updates all entities tracking status to those players. This ensures all possible updates are accounted for.
-
sendToOtherNearbyPlayers
-
sendToNearbyPlayers
-
sendChunkDataPackets
private void sendChunkDataPackets(ServerPlayerEntity player, Packet<?>[] packets, WorldChunk chunk) -
getPointOfInterestStorage
-
enableTickSchedulers
-