mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-07 02:56:17 -10:00
Single player only runs on its server thread now. --in-frame and --no-server-thread print a notice, and HORIZON_SERVER_THREAD is ignored. This deletes the code that only the in-frame path reached: the window's world loader and local player tick, its portal travel, the loading screen and ring-by-ring streaming, and the in-frame LAN host (the host player in the hub, its models of the guests, the reserved uuid). The world-upgrade progress screen with its Cancel button moves to the server-thread start. Tools, the harnesses and the docs no longer use the in-frame path. Closes #6473 Co-Authored-By: Claude Opus 5.5 <[email protected]>
20 KiB
20 KiB
| 1 | BlockDestructionProgress.equals | skip:java | identity by breaker id; Horizon keys cracks by breaker id in a map | |
|---|---|---|---|---|
| 2 | BlockDestructionProgress.compareTo | inline | crates/horizon-client/src/game.rs::Game::cracks | the furthest progress on a block wins (max per position) |
| 3 | ChunkGenerationTask.create | inline | crates/horizon-client-render/src/streaming.rs::Streaming::schedule_generation | a Job::Generate per column; neighbours are held as protos, not a claimed holder cache |
| 4 | ChunkGenerationTask.runUntilWait | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | stages advance as worker results come back, not by waiting on futures |
| 5 | ChunkGenerationTask.scheduleNextLayer | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | next stage is generate, then decorate, then finish |
| 6 | ChunkGenerationTask.releaseClaim | skip:other | generation claims keep a chunk from unloading while a task reads it; Horizon checks protos out (None) to the job instead | |
| 7 | ChunkGenerationTask.canLoadWithoutGeneration | inline | crates/horizon-client-render/src/streaming.rs::ChunkGenerator::load | the worker tries a saved final chunk first, else makes (or restores) a proto |
| 8 | ChunkGenerationTask.getCenter | skip:java | accessor | |
| 9 | ChunkGenerationTask.scheduleLayer | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | one stage over the 3x3 neighbourhoods |
| 10 | ChunkGenerationTask.getRadiusForLayer | inline | crates/horizon-client-render/src/streaming.rs::Ranges::margins | pyramid radius is two fixed margins (generate 3, decorate 2) |
| 11 | ChunkGenerationTask.scheduleChunkInLayer | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | decorate and finish jobs are queued per column when the 3x3 is ready |
| 12 | ChunkGenerationTask.waitForScheduledLayer | skip:java | future bookkeeping | |
| 13 | ChunkHolder.addSendDependency | skip:java | future combinator; chunks are only sent once lit (Hub::next_batch) | |
| 14 | ChunkHolder.addSaveDependency | skip:java | future combinator; saving snapshots resident chunks directly | |
| 15 | ChunkHolder.blockChanged | port | crates/horizon-client-render/src/world.rs::World::set | pushes the position to block_log; block entity only changes go through Game::mark_block_entity_updated |
| 16 | ChunkHolder.sectionLightChanged | port | crates/horizon-client-render/src/streaming.rs::Streaming::mark_light_changes | light_log bit per section; the unsaved mark is world.modified in the Lit result |
| 17 | ChunkHolder.hasChangesToBroadcast | inline | crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes | both broadcast fns return early when their log is empty |
| 18 | ChunkHolder.broadcastBlockEntity | port | crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes | BlockEntityData for changed positions with data the client shows |
| 19 | ChunkHolder.scheduleFullChunkPromotion | inline | crates/horizon-client/src/game.rs::Game::start_ticking_chunks | ticking promotion unpacks saved ticks; ticket levels are read directly |
| 20 | ChunkHolder.demoteFullChunk | skip:other | only tells the status listener (loading map), which Horizon reads from Streaming::latest_status | |
| 21 | ChunkHolder.updateFutures | inline | crates/horizon-client/src/game.rs::Game::start_ticking_chunks | promotion to ticking on level change; demotion needs no work as Levels is read each tick |
| 22 | ChunkLevel.getStatusAroundFullChunk | inline | crates/horizon-client-render/src/streaming.rs::Ranges::margins | fixed margins around the view instead of a status per distance |
| 23 | ChunkLevel.byStatus | skip:other | per status ticket levels; Horizon streams by distance (Ranges), not by level | |
| 24 | ChunkLevel.fullStatus | port | crates/horizon-client/src/ticket_levels.rs::Levels::loaded_ticking | 31 entity ticking, 32 block ticking, 33 full as predicates on Levels |
| 25 | ChunkLoadCounter.track | inline | crates/horizon-client/src/game/integrated.rs::Game::publish_load_view | gap: minor: counts only the spawn's 7x7 chunks, not the initial forced or ticketed chunks |
| 26 | ChunkLoadCounter.pendingChunks | inline | crates/horizon-client/src/game/integrated.rs::Game::publish_load_view | counts lit chunks in the 7x7 around the spawn |
| 27 | ChunkMap.<init> | inline | crates/horizon-client-render/src/streaming.rs::Streaming::new | worker pool and generator; light engine and POI storage are set up elsewhere |
| 28 | ChunkMap.isChunkTracked | inline | crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes | sent_chunks.contains: in the view and already sent |
| 29 | ChunkMap.getChunkQueueLevel | inline | crates/horizon-client-render/src/streaming.rs::Ranges::priority | job priority is a distance from the centre, not a ticket level |
| 30 | ChunkMap.getChunkDebugData | skip:debug | chunk debug renderer text | |
| 31 | ChunkMap.getChunkRangeFuture | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | neighbourhood waits: 3x3 protos to decorate, 3x3 decorated to finish, 3x3 lit to mesh |
| 32 | ChunkMap.debugFuturesAndCreateReportedException | skip:debug | crash report detail | |
| 33 | ChunkMap.prepareEntityTickingChunk | inline | crates/horizon-client/src/game/creatures.rs::Game::entity_ticking_area | entity ticking comes from the ticket levels alone |
| 34 | ChunkMap.updateChunkScheduling | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | columns past every kept range are unloaded in the update scan |
| 35 | ChunkMap.onLevelChange | port | crates/horizon-client-render/src/streaming.rs::Streaming::requeue | queued jobs are ranked again when the centre moves |
| 36 | ChunkMap.close | port | crates/horizon-client-render/src/streaming.rs::Streaming::drop | waits for saves in flight |
| 37 | ChunkMap.saveAllChunks | port | crates/horizon-client/src/game.rs::Game::save_level | modified chunks only; wait picks the flushing form |
| 38 | ChunkMap.hasWork | port | crates/horizon-client-render/src/streaming.rs::Streaming::busy | |
| 39 | ChunkMap.processUnloads | inline | crates/horizon-client/src/game.rs::Game::update_world | unloaded columns: modified ones saved, entities and block entities dropped |
| 40 | ChunkMap.saveChunksEagerly | inline | crates/horizon-client-render/src/streaming.rs::Streaming::receive_generated | gap: minor: fresh chunks are marked modified and written at the next autosave or unload, not within a few ticks |
| 41 | ChunkMap.scheduleUnload | inline | crates/horizon-client/src/game.rs::Game::update_world | save if modified, unload entities and block entities |
| 42 | ChunkMap.promoteChunkMap | skip:java | copy of the holder map for the main thread; Horizon has one chunk map | |
| 43 | ChunkMap.scheduleChunkLoad | port | crates/horizon-client-render/src/streaming.rs::ChunkGenerator::load | the Generate job loads a saved final chunk, else a proto is made |
| 44 | ChunkMap.handleChunkLoadFailure | inline | crates/horizon-client/src/save.rs::SaveDir::load | gap: minor: an unreadable record gives None and the column is generated again with no failure report |
| 45 | ChunkMap.createEmptyChunk | inline | crates/horizon-client-render/src/streaming.rs::Streaming::schedule_generation | no saved data: the Generate job makes a fresh proto |
| 46 | ChunkMap.markPosition | skip:java | chunk type cache for isExistingChunkFull | |
| 47 | ChunkMap.applyStep | inline | crates/horizon-client-render/src/streaming.rs::Streaming::new | the worker loop runs the Generate, Decorate and Finish jobs |
| 48 | ChunkMap.scheduleGenerationTask | port | crates/horizon-client-render/src/streaming.rs::Streaming::schedule_generation | |
| 49 | ChunkMap.runGenerationTask | port | crates/horizon-client-render/src/streaming.rs::Streaming::submit | queues the job by distance |
| 50 | ChunkMap.onChunkReadyToSend | inline | crates/horizon-client/src/lan/hub.rs::Hub::next_batch | queued columns are sent once lit |
| 51 | ChunkMap.prepareAccessibleChunk | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | a column finishes once its 3x3 is decorated |
| 52 | ChunkMap.allChunksWithAtLeastStatus | inline | crates/horizon-client/src/game/integrated.rs::Game::publish_load_view | only the loading screen asks: lit chunks around the spawn |
| 53 | ChunkMap.saveChunkIfNeeded | inline | crates/horizon-client/src/game.rs::Game::save_level | the modified set stands for the unsaved flag; autosave every 6000 ticks |
| 54 | ChunkMap.isExistingChunkFull | inline | crates/horizon-client-render/src/streaming.rs::Streaming::save_checked_out | protos exist only for columns not final, so one cannot overwrite a final chunk |
| 55 | ChunkMap.markChunkPendingToSend | port | crates/horizon-client/src/lan/hub.rs::requeue | chunks entering the view join the guest's queue, closest first |
| 56 | ChunkMap.getChunkToSend | inline | crates/horizon-client/src/lan/hub.rs::Hub::next_batch | only lit columns are taken |
| 57 | ChunkMap.dumpChunks | skip:debug | CSV chunk dump | |
| 58 | ChunkMap.printFuture | skip:debug | ||
| 59 | ChunkMap.readChunk | port | crates/horizon-client/src/save.rs::SaveDir::read_record | reads the raw record (pending writes first); the upgrade is done when the world opens |
| 60 | ChunkMap.upgradeChunkTag | inline | crates/horizon-world/src/datafix/files.rs::upgrade_world_data | chunks are upgraded all at once when an older world opens, not as each is read |
| 61 | ChunkMap.getChunkDataFixContextTag | inline | crates/horizon-world/src/datafix/files.rs::upgrade_world_data | dimension id and generator type passed to update_chunk per dimension folder |
| 62 | ChunkMap.forEachBlockTickingChunk | port | crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking | simulation entity ticking and a ticking chunk |
| 63 | ChunkMap.anyPlayerCloseEnoughForSpawningInternal | inline | crates/horizon-client/src/game/natural_spawning.rs::Game::spawning_chunks | any non-spectator within 128 blocks of the chunk centre |
| 64 | ChunkMap.playerIsCloseEnoughForSpawning | port | crates/horizon-client/src/game/natural_spawning.rs::close_enough_for_spawning | |
| 65 | ChunkMap.playerIsCloseEnoughTo | inline | crates/horizon-client/src/game.rs::GameLevel::can_spread_fire_around | the only caller (fire spread radius), spectators left out |
| 66 | ChunkMap.skipPlayer | port | crates/horizon-client/src/game/game_mode.rs::loads_chunks | a skipped player holds no ticket and streams no chunks; sending chunks to a spectator is unchanged |
| 67 | ChunkMap.updatePlayerStatus | inline | crates/horizon-client/src/game.rs::Game::update_chunk_tickets | tickets follow every player in the level each tick; a leaving guest's view is dropped by the hub |
| 68 | ChunkMap.updateChunkTracking | port | crates/horizon-client/src/lan/hub.rs::Hub::update_view | a new centre or view distance (center reset) re-applies the view |
| 69 | ChunkMap.applyChunkTrackingView | inline | crates/horizon-client/src/lan/hub.rs::Hub::update_view | SetChunkCacheCenter, then forget and queue the difference |
| 70 | ChunkMap.getPlayers | inline | crates/horizon-client/src/lan/hub.rs::Hub::broadcast_block_changes | guests whose sent_chunks hold the column; the border form is in broadcast_light_changes |
| 71 | ChunkMap.removeEntity | inline | crates/horizon-client/src/lan/entity.rs::Entities::tick | entities gone from the level leave each client in one RemoveEntities at the next tick |
| 72 | ChunkMap.sendToTrackingPlayers | port | crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near | gap: minor: goes to guests within a fixed distance, not to the clients that track the entity |
| 73 | ChunkMap.sendToTrackingPlayersFiltered | port | crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near | gap: minor: only an except-one-guest filter, same distance rule |
| 74 | ChunkMap.sendToTrackingPlayersAndSelf | port | crates/horizon-client/src/lan/containers.rs::Hub::critical_hit | the one caller, the crit animation, goes to the attacker and the clients tracking them |
| 75 | ChunkMap.isTrackedByAnyPlayer | skip:debug | only the debug synchronizers ask | |
| 76 | ChunkMap.forEachEntityTrackedBy | skip:debug | only the debug synchronizers ask | |
| 77 | ChunkMap.resendBiomesForChunks | missing | minor: /fillbiome changes the host's biomes but sends guests no ChunksBiomes packet, so LAN guests keep the old biome tints until their chunks are sent again | |
| 78 | ChunkMap.waitForLightBeforeSending | inline | crates/horizon-client/src/lan/hub.rs::Hub::next_batch | columns are sent only once lit |
| 79 | ChunkMap.forEachReadyToSendChunk | skip:debug | only the debug synchronizers ask | |
| 80 | ChunkMap.TrackedEntity.equals | skip:java | identity by entity id; Horizon keys tracked entities by id | |
| 81 | ChunkMap.TrackedEntity.sendToTrackingPlayers | port | crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near | gap: minor: distance based, see ChunkMap.sendToTrackingPlayers |
| 82 | ChunkMap.TrackedEntity.sendToTrackingPlayersAndSelf | port | crates/horizon-client/src/lan/containers.rs::Hub::critical_hit | the attacker plus clients tracking them |
| 83 | ChunkMap.TrackedEntity.sendToTrackingPlayersFiltered | port | crates/horizon-client/src/lan/containers.rs::Hub::broadcast_near | gap: minor: only an except-one-guest filter |
| 84 | ChunkMap.TrackedEntity.broadcastRemoved | inline | crates/horizon-client/src/lan/entity.rs::Entities::tick | removed entities leave each client in one RemoveEntities |
| 85 | ChunkMap.TrackedEntity.removePlayer | inline | crates/horizon-client/src/lan/entity.rs::Entities::tick | the client's tracker loses entities out of range or level |
| 86 | ChunkMap.TrackedEntity.updatePlayers | port | crates/horizon-client/src/lan/entity.rs::Entities::tick | gap: player: broadcastToPlayer is not checked, so a spectating player is tracked and shown to non-spectators as a normal player model |
| 87 | ChunkResult.error | skip:java | result type | |
| 88 | ChunkTaskDispatcher.hasWork | port | crates/horizon-client-render/src/streaming.rs::Streaming::busy | |
| 89 | ChunkTaskDispatcher.onLevelChange | port | crates/horizon-client-render/src/streaming.rs::Streaming::requeue | |
| 90 | ChunkTaskDispatcher.release | missing | minor: queued jobs of a column that lost its ticket are not cancelled; their results are dropped on arrival (Done::Proto range check) | |
| 91 | ChunkTaskDispatcher.submit | port | crates/horizon-client-render/src/streaming.rs::Streaming::submit | |
| 92 | ChunkTaskDispatcher.pollTask | inline | crates/horizon-client-render/src/streaming.rs::Streaming::new | each worker pops the most urgent job |
| 93 | ChunkTaskDispatcher.scheduleForExecution | inline | crates/horizon-client-render/src/streaming.rs::Streaming::new | the worker runs the job it popped |
| 94 | ChunkTaskPriorityQueue.resortChunkTasks | port | crates/horizon-client-render/src/streaming.rs::rank_again | |
| 95 | ChunkTaskPriorityQueue.release | missing | minor: no per column release; queued jobs stay queued until run | |
| 96 | ChunkTaskPriorityQueue.pop | inline | crates/horizon-client-render/src/streaming.rs::Streaming::new | BinaryHeap pop in the worker loop |
| 97 | ChunkTracker.checkNeighborsAfterUpdate | inline | crates/horizon-client/src/ticket_levels.rs::compute | closed form: ticket level plus Chebyshev distance, rebuilt when sources change |
| 98 | ChunkTracker.getComputedLevel | inline | crates/horizon-client/src/ticket_levels.rs::compute | lowest ticket level plus distance, per cell |
| 99 | ChunkTracker.computeLevelFromNeighbor | inline | crates/horizon-client/src/ticket_levels.rs::compute | one level per chunk of distance |
| 100 | ChunkTrackingView.difference | inline | crates/horizon-client/src/lan/hub.rs::Hub::update_view | forget what left (scan of sent chunks), queue what entered (requeue) |
| 101 | ChunkTrackingView.isWithinDistance | port | crates/horizon-client/src/lan/hub.rs::tracked | buffer 2 form; the buffer 1 form is streaming.rs in_view_distance |
| 102 | ChunkTrackingView.Positioned.squareIntersects | skip:java | optimisation that picks a box scan over a full enumeration | |
| 103 | ChunkTrackingView.Positioned.contains | port | crates/horizon-client/src/lan/hub.rs::tracked | |
| 104 | ChunkTrackingView.Positioned.forEach | inline | crates/horizon-client/src/lan/hub.rs::requeue | loops the view's square around the centre |
| 105 | ColumnPos.asLong | skip:java | key packing | |
| 106 | DemoMode | missing | minor: no demo mode: no demo timer, intro hints or five day limit (the dedicated server's --demo argument is accepted and ignored) | |
| 107 | DistanceManager.runAllUpdates | port | crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update | levels rebuilt when sources change |
| 108 | DistanceManager.addPlayer | inline | crates/horizon-client/src/game.rs::Game::update_chunk_tickets | players are tickets sources each tick |
| 109 | DistanceManager.removePlayer | inline | crates/horizon-client/src/game.rs::Game::update_chunk_tickets | a player gone from the level drops out of the sources |
| 110 | DistanceManager.getChunkLevel | port | crates/horizon-client/src/ticket_levels.rs::Levels::get | loading and simulation level as a pair |
| 111 | DistanceManager.updateSimulationDistance | inline | crates/horizon-client/src/game.rs::Game::update_chunk_tickets | simulation_distance read from settings into Sources |
| 112 | DistanceManager.hasPlayersNearby | inline | crates/horizon-client/src/mobs/spawn_selection.rs::SpawnState::players_near | the 8 chunk gate; the 5 chunk shortcut is skipped |
| 113 | DistanceManager.forEachEntityTickingChunk | inline | crates/horizon-client/src/ticket_levels.rs::Levels::random_ticking | the simulation half of the random tick test |
| 114 | DistanceManager.FixedPlayerDistanceChunkTracker.setLevel | inline | crates/horizon-client/src/ticket_levels.rs::compute | cells are filled by compute |
| 115 | DistanceManager.FixedPlayerDistanceChunkTracker.havePlayer | inline | crates/horizon-client/src/game.rs::Game::update_chunk_tickets | players' chunks are the sources |
| 116 | DistanceManager.PlayerTicketTracker.onLevelChange | inline | crates/horizon-client/src/ticket_levels.rs::compute | loading level 31 plus distance beyond the view; no throttle of 4 loads at a time |
| 117 | DistanceManager.PlayerTicketTracker.updateViewDistance | inline | crates/horizon-client/src/ticket_levels.rs::reach | view distance sets how far the loading levels reach |
| 118 | DistanceManager.PlayerTicketTracker.runAllUpdates | inline | crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update | |
| 119 | GenerationChunkHolder.scheduleChunkGenerationTask | inline | crates/horizon-client-render/src/streaming.rs::Streaming::schedule_generation | the scan picks the columns that need a job |
| 120 | GenerationChunkHolder.applyStep | inline | crates/horizon-client-render/src/streaming.rs::Streaming::update | queues the Decorate and Finish jobs |
| 121 | GenerationChunkHolder.updateHighestAllowedStatus | inline | crates/horizon-client-render/src/streaming.rs::Ranges::requested | how far a column may be generated follows the ranges |
| 122 | GenerationChunkHolder.replaceProtoChunk | inline | crates/horizon-client-render/src/streaming.rs::Streaming::receive_generated | the proto becomes the final column |
| 123 | GenerationChunkHolder.rescheduleChunkTask | inline | crates/horizon-client-render/src/streaming.rs::GenerationScan::candidates | wanted columns are scanned again when ranges change |
| 124 | GenerationChunkHolder.getOrCreateFuture | skip:java | per status future | |
| 125 | GenerationChunkHolder.failAndClearPendingFuturesBetween | skip:java | future bookkeeping | |
| 126 | GenerationChunkHolder.failAndClearPendingFuture | skip:java | future bookkeeping | |
| 127 | GenerationChunkHolder.completeFuture | skip:java | future bookkeeping | |
| 128 | GenerationChunkHolder.findHighestStatusWithPendingFuture | skip:java | future bookkeeping | |
| 129 | GenerationChunkHolder.acquireStatusBump | skip:java | future bookkeeping | |
| 130 | GenerationChunkHolder.isStatusDisallowed | inline | crates/horizon-client-render/src/streaming.rs::Ranges::requested | |
| 131 | GenerationChunkHolder.increaseGenerationRefCount | skip:other | keeps a chunk from saving or unloading under a task; Horizon checks protos out to the job instead | |
| 132 | GenerationChunkHolder.decreaseGenerationRefCount | skip:other | see increaseGenerationRefCount | |
| 133 | GenerationChunkHolder.getChunkIfPresentUnchecked | skip:java | future lookup; Horizon reads protos and world.chunks | |
| 134 | GenerationChunkHolder.getLatestChunk | skip:java | future lookup; Horizon reads protos and world.chunks | |
| 135 | GenerationChunkHolder.getPersistedStatus | skip:other | Horizon tells proto and final apart by type (SavedProto or Chunk) | |
| 136 | GenerationChunkHolder.getAllFutures | skip:debug | ||
| 137 | GenerationChunkHolder.getLatestStatus | port | crates/horizon-client-render/src/streaming.rs::Streaming::latest_status | furthest step reached, for the loading map |
| 138 | LoadingChunkTracker.getLevel | port | crates/horizon-client/src/ticket_levels.rs::Levels::get | the loading half of the pair |
| 139 | LoadingChunkTracker.setLevel | inline | crates/horizon-client/src/ticket_levels.rs::ChunkTickets::update | levels are rebuilt when sources change |
| 140 | PlayerSpawnFinder.scheduleNext | port | crates/horizon-client/src/world_spawn.rs::PlayerSpawnFinder::next_candidate | coprime stride order, then the suggestion |
| 141 | PlayerSpawnFinder.scheduleCandidate | port | crates/horizon-client/src/game/initial_spawn.rs::Game::search_spawn | gap: minor: a server tick passes over candidates in unloaded chunks instead of waiting for the candidate's chunk, so a new player can stand on another spot of the radius |
| 142 | SectionTracker.checkNeighborsAfterUpdate | inline | crates/horizon-client/src/game/raids.rs::sections_to_village | its only subclass is the POI village distance: Chebyshev distance in sections, 7 when farther than 6 |
| 143 | SectionTracker.getComputedLevel | inline | crates/horizon-client/src/game/raids.rs::sections_to_village | |
| 144 | SectionTracker.computeLevelFromNeighbor | inline | crates/horizon-client/src/game/raids.rs::sections_to_village |