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]>
21 KiB
21 KiB
| 1 | FlowingFluid.getFlow | port | crates/horizon-world/src/fluid_flow.rs::flow_at | neighbour currents and falling wall deflection |
|---|---|---|---|---|
| 2 | FlowingFluid.affectsFlow | port | crates/horizon-world/src/fluid_flow.rs::affects_flow | - |
| 3 | FlowingFluid.isSolidFace | port | crates/horizon-world/src/fluid_flow.rs::solid_face | - |
| 4 | FlowingFluid.getFlowing | port | crates/horizon-world/src/fluid.rs::FluidState::new | kind chosen by flowing_of (level/fluids.rs) at the call sites; this builds the state from amount and falling |
| 5 | FlowingFluid.isSourceBlockOfThisType | port | crates/horizon-world/src/level/fluids.rs::Sim::is_source_of | - |
| 6 | FlowingFluid.sourceNeighborCount | port | crates/horizon-world/src/level/fluids.rs::Sim::source_neighbour_count | - |
| 7 | FlowingFluid.getLegacyLevel | inline | crates/horizon-world/src/fluid.rs::FluidBlockBindings::block | the level number (0 for sources, else 8 minus amount plus 8 when falling) is computed inline when picking the liquid block |
| 8 | FlowingFluid.getShape | port | crates/horizon-world/src/fluid_shape.rs::FluidShapeCache::shape | gap: minor: no full-block branch for amount 9 with the same fluid above; the pinned registry has no amount-nine state |
| 9 | FlowingFluid.BlockStatePairKey.equals | skip:java | - | cache key record equality |
| 10 | FlowingFluid.BlockStatePairKey.hashCode | skip:java | - | cache key record hash |
| 11 | FlowingFluid.SpreadContext.getBlockState | port | crates/horizon-world/src/level/fluids.rs::Sim::context_state | - |
| 12 | FlowingFluid.SpreadContext.isHole | port | crates/horizon-world/src/level/fluids.rs::Sim::context_is_hole | - |
| 13 | Fluid.getAABB | inline | crates/horizon-client/src/arrows.rs::Ticker::collided_with_fluid | the fluid box (block to block plus height) is built inside collided_with_fluid for the sweep test |
| 14 | FluidState.isSourceOfType | port | crates/horizon-world/src/level/fluids.rs::Sim::is_source_of | family comparison instead of owner identity; same result for source states |
| 15 | LavaFluid.hasFlammableNeighbours | inline | crates/horizon-world/src/level/fluids.rs::Sim::lava_random_tick | the six-neighbour check is folded into the random tick; uses the plain IGNITED_BY_LAVA flag, no face argument |
| 16 | LavaFluid.isFlammable | port | crates/horizon-world/src/level/fluids.rs::Sim::lava_flammable | deprecated no-face overload; same build-height and chunk check and flag |
| 17 | LavaFluid.canBeReplacedWith | port | crates/horizon-world/src/level/fluids.rs::Sim::can_be_replaced_with | - |
| 18 | LavaFluid.getSpreadDelay | port | crates/horizon-world/src/level/fluids.rs::Sim::spread_delay | - |
| 19 | LavaFluid.spreadTo | port | crates/horizon-world/src/level/fluids.rs::Sim::spread_to | includes the lava-into-water stone conversion and fizz event |
| 20 | LavaFluid.Flowing.createFluidStateDefinition | skip:data | - | state property list, read from data tables |
| 21 | WaterFluid.beforeDestroyingBlock | port | crates/horizon-world/src/level/update.rs::Sim::drop_resources | called from spread_to for water only |
| 22 | WaterFluid.canBeReplacedWith | port | crates/horizon-world/src/level/fluids.rs::Sim::can_be_replaced_with | - |
| 23 | WaterFluid.Flowing.createFluidStateDefinition | skip:data | - | state property list, read from data tables |
| 24 | MapColor.calculateARGBColor | port | crates/horizon-client/src/game/maps.rs::packed_rgba | packed id with brightness in, ARGB out; id 0 is transparent as in vanilla NONE |
| 25 | MapColor.getPackedId | inline | crates/horizon-client/src/game/maps.rs::Game::render_biome_preview | the packed id (color << 2 | brightness) is built where map pixels are written (maps.rs:682 and in update_map) |
| 26 | AmphibiousNodeEvaluator.done | skip:other | - | vanilla sets the mob malus for WATER, WALKABLE and WATER_BORDER in prepare and restores it here; Horizon never writes the mob malus, Finder::malus applies the amphibious values per search |
| 27 | AmphibiousNodeEvaluator.isVerticalNeighborValid | inline | crates/horizon-client/src/mobs/path.rs::Finder::walk_neighbors | the amphibious up and down neighbours need a valid node that is WATER; folded into the amphibious branch |
| 28 | BinaryHeap.remove | skip:other | - | no vanilla caller: the search only uses insert, pop and changeCost, Horizon has heap_insert, heap_pop and change_cost |
| 29 | FlyNodeEvaluator.getNeighbors | port | crates/horizon-client/src/mobs/path.rs::Finder::fly_neighbors | fly neighbours |
| 30 | FlyNodeEvaluator.hasMalus | inline | crates/horizon-client/src/mobs/path.rs::Finder::fly_neighbors | the cost_malus >= 0 test is a closure inside fly_neighbors |
| 31 | FlyNodeEvaluator.getCachedPathType | port | crates/horizon-client/src/mobs/path.rs::Finder::fly_path_type | - |
| 32 | FlyNodeEvaluator.iteratePathfindingStartNodeCandidatePositions | inline | crates/horizon-client/src/mobs/path.rs::Finder::start | gap: minor: flying start candidates are the four corners only; the small-mob branch (ten random positions in the inflated box) is not ported |
| 33 | pathfinder/Node.createDebugStreamCodec | skip:debug | - | stream codec for the debug path overlay |
| 34 | pathfinder/Node.cloneAndMove | missing | - | minor: only used by PathNavigation.trimPath to raise path nodes over cauldrons by one block; that trim is not ported, so mobs may bump on cauldron rims |
| 35 | pathfinder/Node.createHash | skip:java | - | Java map key; Horizon indexes nodes inside Finder |
| 36 | pathfinder/Node.distanceTo | port | crates/horizon-client/src/mobs/path.rs::Node::distance | both overloads: node to node and node to block position |
| 37 | pathfinder/Node.distanceToXZ | missing | - | minor: only the Warden path finder uses horizontal distance as its cost; Horizon costs use 3D distance everywhere (Finder::find) |
| 38 | pathfinder/Node.distanceToSqr | skip:other | - | no vanilla caller in pathfinding or navigation; Horizon has no squared node distance |
| 39 | pathfinder/Node.distanceManhattan | port | crates/horizon-client/src/mobs/path.rs::Node::manhattan | - |
| 40 | pathfinder/Node.asVec3 | skip:debug | - | only the pathfinding debug renderer calls it |
| 41 | pathfinder/Node.equals | port | crates/horizon-client/src/mobs/path.rs::Path::same_as | compares the node lists; Horizon nodes are PathNode values that also compare kind, vanilla compares position only |
| 42 | Path.getEndNode | port | crates/horizon-client/src/mobs/path.rs::Path::end | - |
| 43 | Path.truncateNodes | port | crates/horizon-client/src/mobs/nav.rs::trim_path | GroundPathNavigation.trimPath with avoidSun: the path stops before the first node the sky sees |
| 44 | Path.getPreviousNode | inline | crates/horizon-client/src/mobs/villager_brain.rs::B::try_start | path.nodes[path.next - 1] is read directly for the door check (InteractWithDoor) |
| 45 | Path.equals | skip:java | - | Java equals; Path derives PartialEq and navigation compares paths with same_as |
| 46 | Path.copy | skip:java | - | Path derives Clone |
| 47 | PathFinder.reconstructPath | inline | crates/horizon-client/src/mobs/path.rs::Finder::find | the came_from walk is the build closure inside find |
| 48 | Target.updateBest | port | crates/horizon-client/src/mobs/path.rs::Finder::best_h | keeps the best heuristic per target |
| 49 | WalkNodeEvaluator.done | inline | crates/horizon-client/src/mobs/sniffer.rs::ai_step | gap: minor: the per-search caches need no clearing (Horizon caches live in one search); the Sniffer water malus is set from the wet state each tick, while vanilla also sets it to -1 right after each search in onPathfindingDone |
| 50 | WalkNodeEvaluator.doesBlockHavePartialCollision | port | crates/horizon-client/src/mobs/path.rs::Finder::partial_collision | - |
| 51 | WalkNodeEvaluator.getCachedPathType | port | crates/horizon-client/src/mobs/path.rs::Finder::path_type | - |
| 52 | WalkNodeEvaluator.getPathTypeWithinMobBB | port | crates/horizon-client/src/mobs/path.rs::Finder::within_bb | - |
| 53 | MapItemSavedData.type | skip:data | - | saved-data type and codec; Horizon saves map files in save_maps |
| 54 | MapItemSavedData.<init> | port | crates/horizon-client/src/game/maps.rs::MapData::fresh | gap: minor: sets the grid cell, scale and dimension; locked and the tracking flags are set by the caller or the NBT load |
| 55 | MapItemSavedData.createForClient | port | crates/horizon-client/src/game/maps.rs::Game::remote_map_item_data | the client map is created from the packet (fresh map, locked flag from the packet) |
| 56 | MapItemSavedData.mapMatcher | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | the carried maps are the map ids in the inventory and offhand, which is what the matcher finds |
| 57 | MapItemSavedData.tickCarriedBy | port | crates/horizon-client/src/game/maps.rs::Game::tick_maps | gap: player: no framed-map marker when the map hangs in an item frame, and no removal of a player who wears map-invisibility gear |
| 58 | MapItemSavedData.hasMapInvisibilityItemEquipped | port | crates/horizon-client/src/game/maps.rs::Holder::new | ticked in #3517; `MapItemSavedData.hasMapInvisibilityItemEquipped` is cited at crates/horizon-client/src/game/maps.rs:161 |
| 59 | MapItemSavedData.removeDecoration | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | decorations are rebuilt each tick (holder markers kept, the rest replaced) instead of removed by key |
| 60 | MapItemSavedData.addDecoration | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | gap: player: only the item target decorations go through here; banner and frame markers never reach it |
| 61 | MapItemSavedData.calculateDecorationLocationAndType | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | player branch and item branch both done inline, with clamping |
| 62 | MapItemSavedData.playerDecorationTypeAndRotation | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | player marker sprite and rotation chosen inline (decoration_rotation for the rotation) |
| 63 | MapItemSavedData.isInsideMap | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | the plus or minus 63 range test is inline |
| 64 | MapItemSavedData.decorationTypeForPlayerOutsideMap | inline | crates/horizon-client/src/game/maps.rs::Game::tick_maps | off-map and off-limits sprite choice inline |
| 65 | MapItemSavedData.setColorsDirty | inline | crates/horizon-client/src/game/maps.rs::MapData::update_color | the holders dirty rectangle is updated in update_color |
| 66 | MapItemSavedData.getHoldingPlayer | port | crates/horizon-client/src/game/maps.rs::MapData::holder | - |
| 67 | MapItemSavedData.toggleBanner | port | crates/horizon-client/src/game/maps.rs::MapData::toggle_banner | ticked in #3517; `MapItemSavedData.toggleBanner` is cited at crates/horizon-client/src/game/maps.rs:403 |
| 68 | MapItemSavedData.checkBanners | port | crates/horizon-client/src/game/maps.rs::MapData::check_banners | ticked in #3517; `MapItemSavedData.checkBanners` is cited at crates/horizon-client/src/game/maps.rs:443 |
| 69 | MapItemSavedData.removedFromFrame | port | crates/horizon-client/src/game/maps.rs::MapData::removed_from_frame | ticked in #3517; `MapItemSavedData.removedFromFrame` is cited at crates/horizon-client/src/game/maps.rs:387 |
| 70 | MapItemSavedData.setColor | port | crates/horizon-client/src/game/maps.rs::MapData::update_color | - |
| 71 | MapItemSavedData.addClientSideDecorations | port | crates/horizon-client/src/game/maps.rs::Game::remote_map_item_data | decorations are replaced from the packet list |
| 72 | MapItemSavedData.HoldingPlayer.createPatch | port | crates/horizon-client/src/game/maps.rs::MapData::update_packet | the dirty rectangle is copied into the patch |
| 73 | MapItemSavedData.HoldingPlayer.markColorsDirty | inline | crates/horizon-client/src/game/maps.rs::MapData::update_color | the holder dirty rectangle is widened in update_color |
| 74 | MapItemSavedData.MapPatch.applyToMap | port | crates/horizon-client/src/game/maps.rs::Game::remote_map_item_data | the patch loop writes each colour through update_color |
| 75 | LootContext.createVisitedEntry | inline | crates/horizon-world/src/loot.rs::Context::table_raw | gap: minor: only the loot-table cycle guard (visited list); predicates and modifiers are not tracked |
| 76 | LootContext.EntityTarget.getByName | port | crates/horizon-world/src/loot.rs::Context::target | - |
| 77 | LootPool.addRandomItems | inline | crates/horizon-world/src/loot.rs::Context::table_raw | pool condition, bonus rolls, the rolls loop and the pool modifier are in table_raw |
| 78 | LootPool.validate | skip:data | - | validation of references in datagen tables |
| 79 | LootPool.Builder.addAll | skip:java | - | builder |
| 80 | LootPool.Builder.build | skip:java | - | builder |
| 81 | LootTable.validate | skip:data | - | validation of references in datagen tables |
| 82 | LootTable.getAvailableSlots | inline | crates/horizon-world/src/loot.rs::LootData::fill_with | gap: minor: every slot index is shuffled, not only the empty ones; the callers fill empty containers |
| 83 | LootTable.Builder.build | skip:java | - | builder |
| 84 | LootItem.lootTableItem | skip:java | - | builder factory for a loot entry |
| 85 | LootPoolEntryContainer.commonFields | skip:java | - | codec field group |
| 86 | LootPoolEntryContainer.validate | skip:data | - | validation of references in datagen tables |
| 87 | LootPoolEntryContainer.adjustOutput | inline | crates/horizon-world/src/loot.rs::Context::create | the entry modifier is applied to each created stack |
| 88 | LootPoolEntryContainer.canRun | inline | crates/horizon-world/src/loot.rs::Context::expand | the entry condition check is the first step of expand |
| 89 | LootPoolEntryContainer.Builder.otherwise | skip:java | - | builder |
| 90 | LootPoolEntryContainer.Builder.append | skip:java | - | builder, no vanilla caller |
| 91 | LootPoolEntryContainer.Builder.then | skip:java | - | builder, no vanilla caller |
| 92 | entries/TagEntry.addExpandedEntries | port | crates/horizon-world/src/loot.rs::Context::expand | one choice per tag member when expand is set |
| 93 | entries/TagEntry.tagContents | skip:java | - | builder |
| 94 | entries/TagEntry.expandTag | skip:java | - | builder |
| 95 | EnchantRandomlyFunction.run | inline | crates/horizon-items/src/items.rs::LootContext::modifiers | gap: minor: no ADDITIONAL_TRADE_COST component when includeAdditionalCostComponent is set |
| 96 | EnchantRandomlyFunction.enchantItem | inline | crates/horizon-items/src/items.rs::LootContext::modifiers | gap: minor: book conversion, level roll and enchant are inline; no ADDITIONAL_TRADE_COST component |
| 97 | EnchantRandomlyFunction.Builder.withEnchantment | skip:java | - | builder |
| 98 | EnchantRandomlyFunction.Builder.build | skip:java | - | builder |
| 99 | EnchantWithLevelsFunction.run | inline | crates/horizon-items/src/items.rs::LootContext::modifiers | gap: minor: no ADDITIONAL_TRADE_COST component when the parameter is present |
| 100 | EnchantWithLevelsFunction.Builder.withOptions | skip:java | - | builder |
| 101 | EnchantWithLevelsFunction.Builder.build | skip:java | - | builder |
| 102 | ExplorationMapFunction.claimStructureAt | missing | - | minor: no structure reference is added for the explored structure when the map is filled; Horizon keeps chunk references only (vanillagen.rs) |
| 103 | ExplorationMapFunction.Builder.build | skip:java | - | builder |
| 104 | ListOperation.codec | skip:data | - | codec |
| 105 | ListOperation.Append.apply | inline | crates/horizon-client/src/game/commands/items.rs::list_operation | gap: minor: an append over 256 entries is truncated to 256, vanilla logs an error and keeps the original list |
| 106 | CommandStorage.get | port | crates/horizon-client/src/command_storage.rs::CommandStorage::get | - |
| 107 | CommandStorage.getContainer | inline | crates/horizon-client/src/command_storage.rs::CommandStorage::get | namespace lookup; Horizon keeps every namespace in one map, so no container load |
| 108 | CommandStorage.getOrCreateContainer | inline | crates/horizon-client/src/command_storage.rs::CommandStorage::set | the namespace entry is created on write |
| 109 | CommandStorage.Container.get | port | crates/horizon-client/src/command_storage.rs::CommandStorage::get | - |
| 110 | CommandStorage.Container.put | port | crates/horizon-client/src/command_storage.rs::CommandStorage::set | empty contents remove the entry |
| 111 | CommandStorage.Container.getKeys | port | crates/horizon-client/src/command_storage.rs::CommandStorage::keys | - |
| 112 | LevelStorageSource.LevelStorageAccess.releaseTemporarilyAndRun | skip:other | - | used only by the external datafixer tool (FileFixerUpper); Horizon does not run it |
| 113 | LevelStorageSource.LevelStorageAccess.safeClose | skip:other | - | closes the session lock and logs a failure; Horizon releases its lock when the session drops |
| 114 | LevelStorageSource.LevelStorageAccess.getLevelPath | skip:other | - | path helper for level resources; Horizon builds these paths where they are used (save.rs::saved_data_path) |
| 115 | LevelStorageSource.LevelStorageAccess.collectIssues | port | crates/horizon-client/src/save.rs::level_dat_issue | the issue line of each file on RecoverWorldDataScreen (title.rs) |
| 116 | LevelStorageSource.LevelStorageAccess.fixAndGetSummaryFromTag | port | crates/horizon-client/src/title.rs::list_worlds | gap: minor: the world list reads name and last played directly, without a data fix first |
| 117 | LevelStorageSource.LevelStorageAccess.getUnfixedDataTagWithFallback | port | crates/horizon-client/src/save.rs::fall_back_to_level_dat_old | the dedicated server (Main) takes level.dat_old and restores it; the client asks on RecoverWorldDataScreen instead (WorldOpenFlows) |
| 118 | LevelStorageSource.LevelStorageAccess.getUnfixedDataTag | inline | crates/horizon-client/src/save.rs::Level::read | the Data compound of level.dat is read inside Level::read |
| 119 | LevelStorageSource.LevelStorageAccess.saveDataTag | inline | crates/horizon-client/src/save.rs::Level::write | level.dat is written inside Level::write |
| 120 | LevelStorageSource.LevelStorageAccess.saveLevelData | port | crates/horizon-client/src/save.rs::write_dat | the temp file, the level.dat_old swap and the write are in write_dat |
| 121 | LevelStorageSource.LevelStorageAccess.getIconFile | port | crates/horizon-client/src/title.rs::Title::icon | gap: minor: no session-lock check; Horizon reads icon.png whenever it is there |
| 122 | LevelStorageSource.LevelStorageAccess.renameLevel | port | crates/horizon-client/src/title/world_management.rs::rename | - |
| 123 | LevelStorageSource.LevelStorageAccess.renameAndDropPlayer | skip:other | - | no caller in the decompiled sources |
| 124 | LevelStorageSource.LevelStorageAccess.modifyLevelDataWithoutDatafix | inline | crates/horizon-client/src/title/world_management.rs::rename | read, change the Data compound and write back; rename is the only edit Horizon makes |
| 125 | LevelStorageSource.LevelStorageAccess.makeWorldBackup | port | crates/horizon-client/src/title/world_management.rs::backup | - |
| 126 | LevelStorageSource.LevelStorageAccess.hasWorldData | inline | crates/horizon-client/src/title.rs::list_worlds | gap: minor: a folder counts as a world only when its level.dat reads; level.dat_old is not checked |
| 127 | LevelStorageSource.LevelStorageAccess.restoreLevelDataFromOld | port | crates/horizon-client/src/save.rs::restore_level_data_from_old | keeps the broken file as level.dat_corrupted_<time>; gap: minor: a failed move puts level.dat back and reports the failure (vanilla reports success with noRollback) |
| 128 | PlayerDataStorage.backup | missing | - | minor: a player file that fails to load is not copied to a _corrupted_ backup first; Horizon leaves it in place |
| 129 | SavedDataStorage.getDataFile | port | crates/horizon-client/src/save.rs::saved_data_path | gap: minor: no check that the path stays inside the data folder; the names come from fixed callers |
| 130 | SavedDataStorage.computeIfAbsent | inline | crates/horizon-client/src/save.rs::compound_or_empty | the default is an empty compound when the file is absent |
| 131 | SavedDataStorage.get | port | crates/horizon-client/src/save.rs::read_saved_data | gap: minor: reads the file on each call; vanilla caches the read per type |
| 132 | SavedDataStorage.isGzip | inline | crates/horizon-world/src/datafix/files.rs::read_saved_dat | the gzip magic test is inline |
| 133 | SavedDataStorage.collectDirtyTagsToSave | skip:other | - | Horizon writes each saved-data file when its owner saves; there is no dirty set |
| 134 | SavedDataStorage.encodeUnchecked | inline | crates/horizon-client/src/save.rs::write_saved_data | DataVersion is added in write_saved_data; callers encode the data |
| 135 | SavedDataStorage.tryWrite | port | crates/horizon-client/src/save.rs::write_saved_data | - |
| 136 | SavedDataStorage.close | inline | crates/horizon-client/src/save.rs::Level::write | the final save of the saved data happens in Level::write |
| 137 | TagValueInput.DecodeFromListFailedProblem.description | skip:debug | - | error text for logs only |
| 138 | TagValueInput.UnexpectedListElementTypeProblem.description | skip:debug | - | error text for logs only |
| 139 | PortalShape.findPortalShape | port | crates/horizon-world/src/level/portal.rs::Sim::find_empty_portal_shape | preferred axis first, then the other; here the predicate is an empty frame with no portal block |
| 140 | PortalShape.calculateBottomLeft | inline | crates/horizon-world/src/level/portal.rs::Sim::find_portal_shape | the fall to the bottom row and the left edge search are inline |
| 141 | PortalShape.calculateWidth | inline | crates/horizon-world/src/level/portal.rs::Sim::find_portal_shape | width check between 2 and 21 is inline |
| 142 | PortalShape.getDistanceUntilEdgeAboveFrame | port | crates/horizon-world/src/level/portal.rs::Sim::portal_distance_until_edge_above_frame | - |
| 143 | PortalShape.calculateHeight | inline | crates/horizon-world/src/level/portal.rs::Sim::find_portal_shape | height rows loop and the 3 to 21 check are inline |
| 144 | PortalShape.hasTopFrame | inline | crates/horizon-world/src/level/portal.rs::Sim::find_portal_shape | the top frame row check is inline |
| 145 | PortalShape.getDistanceUntilTop | inline | crates/horizon-world/src/level/portal.rs::Sim::find_portal_shape | rows loop counts portal blocks as it goes, inline |
| 146 | TeleportTransition.playPortalSound | inline | crates/horizon-client/src/lan/hub.rs::Hub::land | level event 1032 is sent on arrival |
| 147 | TeleportTransition.withRotation | inline | crates/horizon-client/src/lan/hub.rs::Hub::change_level | the turned yaw is applied with the level change |
| 148 | TeleportTransition.withPosition | inline | crates/horizon-client/src/lan/hub.rs::Hub::land | the exit position is applied on arrival |
| 149 | TeleportTransition.transitionAsPassenger | port | crates/horizon-client/src/game/server_travel.rs::Game::carry_riders_through_portals | riders travel with the vehicle and ride it again on arrival |
| 150 | DefaultRedstoneWireEvaluator.calculateTargetStrength | inline | crates/horizon-world/src/level/redstone.rs::Sim::wire_update_power | the 15 shortcut and the max with the incoming signal are inline |