port map: clear game2-002 rows main already implements

Eight rows said missing for behaviour the tree has, two noted gaps that
have closed, and four citations pointed at nothing.
This commit is contained in:
MSedgeMC committed 2026-11-02 09:43:01 +00:00
1 parent c76657fb11
commit acfd992b34
1 file changed
+14 -14
+14 -14
View File
@@ -5,7 +5,7 @@ ItemFrame.shouldDamageDropItem inline crates/horizon-client/src/game/explosion.r
ItemFrame.canHurtWhenFixed port crates/horizon-client/src/game/frames.rs::attack_frame a fixed frame refuses a non-creative hit (attack_ticks reset, no break) and lets a creative player break it
ItemFrame.hurtClient inline crates/horizon-client/src/game/frames.rs::Game::attack_frame gap: minor: no separate client-side fixed-frame gate; the creative exception is missing
ItemFrame.removeFramedMap inline crates/horizon-client/src/game/maps.rs::Game::lan_map_updates frame map markers come from item_frames each tick, so a removed frame needs no step
ItemFrame.getSlot missing minor: no slot 0 access for item frames in the item command path
ItemFrame.getSlot inline crates/horizon-client/src/game/commands/items.rs::Game::slot_get slots_named maps container.0 and contents on a frame to Slot::Frame; slot_get reads the frame's item and slot_set writes it
ItemFrame.onSyncedDataUpdated skip:other network data-sync hook; the item is read from the frame field on demand
ItemFrame.setRotation inline crates/horizon-client/src/game/frames.rs::Game::interact_frame the rotate-by-one step; the neighbour update is in frame_output_changed
ItemFrame.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_frame_from_nbt gap: minor: Facing defaults to 2 where vanilla defaults to DOWN
@@ -17,7 +17,7 @@ LeashFenceKnotEntity.getKnot inline crates/horizon-client/src/game/leads.rs::Gam
LeashFenceKnotEntity.createKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot no in-game knot entity is created; LAN knot ids are assigned in lan_assign_ids
Painting.defineSynchedData skip:other entity data default variant; Horizon picks the variant in place_painting
Painting.get port crates/horizon-client/src/game/paintings.rs::PaintingVariants::get lookup of the variant by id; there is no component getter
Painting.applyImplicitComponent missing minor: a painting variant component on the item is ignored; placement always picks a random fitting variant
Painting.applyImplicitComponent inline crates/horizon-client/src/game/paintings.rs::Game::place_painting the stack's painting/variant replaces the random pick (PaintingVariants::of_stack), and that variant has to survive where it goes
Painting.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::painting_from_nbt
Painting.dropItem port crates/horizon-client/src/game/paintings.rs::Game::break_painting gap: minor: the dropped painting item keeps no custom name
PaintingVariants.register skip:data registry bootstrap; variants load from the data files in PaintingVariants::load
@@ -27,7 +27,7 @@ FallingBlockEntity.addAdditionalSaveData port crates/horizon-client/src/entity_n
FallingBlockEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_from_nbt gap: minor: TileEntityData is not read; damage settings come from falling_block::Damage::from_nbt
FallingBlockEntity.fillCrashReportCategory skip:debug crash report detail
FallingBlockEntity.getTypeName skip:data - the anvil death text is its damage type's message id (death.attack.anvil), which takes no block-name argument; game/falling_damage.rs picks falling_anvil, falling_stalactite or falling_block
FallingBlockEntity.teleport missing unsure: no portal travel for falling blocks found in nether_portal.rs and no end-arrival tick
FallingBlockEntity.teleport inline crates/horizon-client/src/game.rs::Game::fall_step the portal move itself is falling_through_portal; the End-crossing duplicate tick (`forceTickAfterTeleportToDuplicate`) is in fall_step
ItemEntity.restoreFrom skip:other the ItemEntity value moves between levels with thrower kept; nothing to copy
ItemEntity.setFluidMovement inline crates/horizon-client/src/entities.rs::ItemEntity::tick water and lava drag and buoyancy are applied in tick
ItemEntity.fireImmune inline crates/horizon-client/src/entities.rs::ItemEntity::environment_tick fire immunity via resists_fire in environment_tick
@@ -40,7 +40,7 @@ ItemEntity.teleport inline crates/horizon-client/src/entities.rs::merge_with_nei
ItemEntity.getVisualRotationYInDegrees inline crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry spin is applied in radians there; no degree conversion
ItemEntity.getSlot missing unsure: no slot 0 access for dropped items found in commands.rs
PrimedTnt.defineSynchedData skip:other fuse and block state are struct fields; spawn sets fuse 80; the block is always TNT
PrimedTnt.explode inline crates/horizon-client/src/game/tnt.rs::Game::tick_tnt gap: minor: power fixed at 4; no explosion_power and no used-portal damage calculator
PrimedTnt.explode inline crates/horizon-client/src/game/tnt.rs::Game::tick_tnt the power is the tnt's own field (`explosion_power`, 4 by default); gap: minor: no used-portal damage calculator
PrimedTnt.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::tnt_to_nbt the fuse and the block state are saved
PrimedTnt.restoreFrom missing minor: PrimedTnt has no owner field, so the igniter is not kept through portal moves
PrimedTnt.teleport missing unsure: no used-portal flag on PrimedTnt; the portal damage calculator is not applied
@@ -53,7 +53,7 @@ Creeper.getMaxFallDistance port crates/horizon-client/src/mobs/nav.rs::comfortab
Creeper.defineSynchedData skip:other swell, powered and ignited are Mob fields
Creeper.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: Fuse and ExplosionRadius are written as constants 30 and 3, not the creeper's values
Creeper.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit
Creeper.spawnLingeringCloud port crates/horizon-client/src/mobs/hostile.rs::explode MobEvent::LingeringCloud after the Explode: radius 2.5, wait 10, 300 ticks, -radius/duration a tick, the creeper's effects at 0.25 of their duration with their ambient and visible flags (game/potions.rs::spawn_creeper_cloud); a mob keeps ambient_effects now (NBT, /effect, expiry, conversion, the synchronized particles)
Creeper.spawnLingeringCloud port crates/horizon-client/src/mobs/hostile.rs::creeper_tick MobEvent::LingeringCloud after the Explode: radius 2.5, wait 10, 300 ticks, -radius/duration a tick, the creeper's effects at 0.25 of their duration with their ambient and visible flags (game/potions.rs::spawn_creeper_cloud); a mob keeps ambient_effects now (NBT, /effect, expiry, conversion, the synchronized particles)
ElderGuardian.createAttributes skip:data attribute defaults come from data tables
Enderman.registerGoals port crates/horizon-client/src/mobs/enderman.rs::register gap: minor: no anger-reset target goal (priority 4)
Enderman.createAttributes skip:data attribute defaults come from data tables
@@ -61,14 +61,14 @@ Enderman.setTarget inline crates/horizon-client/src/mobs/enderman.rs::custom_ser
Enderman.defineSynchedData skip:other carried block, creepy and stared-at state are Mob extra fields
Enderman.playStareSound inline crates/horizon-client/src/mobs/enderman.rs::LookForPlayer::tick gap: minor: the 400-tick throttle of the stare sound is not seen
Enderman.onSyncedDataUpdated skip:other client sync hook; the stare sound is played server-side from LookForPlayer
Enderman.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs:976-985 the carried block is written as carriedBlockState and removed when there is none
Enderman.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs the same state round-trips through the registry
Enderman.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the carried block is written as carriedBlockState and removed when there is none
Enderman.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt the same state round-trips through the registry
Enderman.canRandomlyTeleportTo port crates/horizon-client/src/mobs/enderman.rs::teleport_to the water check on the ground block
Enderman.repeatedlyTryToTeleport port crates/horizon-client/src/mobs/enderman.rs::ai_step pending teleports retry up to 64 times
Enderman.dropCustomDeathLoot port crates/horizon-client/src/mobs/enderman.rs::carried_block_drops the carried block's drops with a silk-touch diamond axe (carried_block_tool), drawn from the block table's random sequence (game/creatures.rs, the death handling)
Enderman.hurtWithCleanWater inline crates/horizon-client/src/game/splash_water.rs::Game::affect_entities_around
Enderman.EndermanLeaveBlockGoal.canPlaceBlock inline crates/horizon-client/src/mobs/enderman.rs::LeaveBlock::tick gap: minor: the place-on blacklist tag and the carried block canSurvive check are not in the tick
Endermite.registerGoals port crates/horizon-client/src/mobs/ai.rs::register Hostile family defaults; gap: unsure: the ClimbOnTopOfPowderSnow goal is not checked
Endermite.registerGoals port crates/horizon-client/src/mobs/ai.rs::register Hostile family defaults; Float and ClimbOnTopOfPowderSnow at 1 are in mobs/hostile.rs
Endermite.createAttributes skip:data attribute defaults come from data tables
Endermite.checkEndermiteSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
Ghast.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_ghast
@@ -87,18 +87,18 @@ Guardian.getActiveAttackTarget inline crates/horizon-client/src/mobs/guardian.rs
Guardian.checkGuardianSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Guardian and ElderGuardian arm
Guardian.GuardianAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/guardian.rs::GuardianAttack::can_continue
Guardian.GuardianAttackSelector.test inline crates/horizon-client/src/mobs/guardian.rs::register the selector is the player, squid and axolotl beyond 9 filters in register
Monster.updateNoActionTime port crates/horizon-client/src/mobs/ai.rs: no_action_time += 1 at 1556, reset at 1842/2258 the idle counter is kept and read by the despawn path in raids.rs
Monster.updateNoActionTime port crates/horizon-client/src/mobs/ai.rs::server_ai_step the idle counter is counted up there and read by the despawn path in raids.rs
Monster.getProjectile missing unsure: no held-ammo choice for mobs found in mobs/*.rs
PatrollingMonster.addAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::write_nbt
PatrollingMonster.readAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::read_nbt
PatrollingMonster.checkPatrollingMonsterSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Pillager arm: block light 8 or less, then mob rules
PatrollingMonster.LongDistancePatrolGoal.findPatrolCompanions port crates/horizon-client/src/mobs/raider.rs::companions
Phantom.registerGoals port crates/horizon-client/src/mobs/phantom.rs::register
Phantom.updatePhantomSizeInfo missing minor: vanilla sets size only from NBT, and Horizon has no size, so no scale or attack bonus
Phantom.updatePhantomSizeInfo port crates/horizon-client/src/mobs/phantom.rs::set_size the size clamps to 0..64, sets the attack damage base to 6 plus the size, and the box is scaled by it (mobs/living.rs::Mob::dims)
Phantom.finalizeSpawn inline crates/horizon-client/src/mobs/phantom.rs::register the anchor 5 blocks above is set at creation; size 0
Phantom.readAdditionalSaveData missing unsure: anchor_pos and size are not read for phantoms
Phantom.addAdditionalSaveData missing unsure: anchor_pos and size are not written for phantoms
Phantom.getDefaultDimensions missing minor: no size scale on the phantom box; size is 0 unless NBT sets it
Phantom.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt size is read as setPhantomSize; gap: minor: anchor_pos is not read
Phantom.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt size is written; gap: minor: anchor_pos is not written
Phantom.getDefaultDimensions inline crates/horizon-client/src/mobs/living.rs::Mob::dims the box, height and eye height scale by 1 + 0.15 per size
Phantom.PhantomBodyRotationControl.clientTick inline crates/horizon-client/src/mobs/phantom.rs::move_control the head yaw follows the body yaw there
Phantom.PhantomMoveTargetGoal.touchingTarget inline crates/horizon-client/src/mobs/phantom.rs::CircleAroundAnchor::tick the squared distance under 4 check near the move target
Phantom.PhantomSweepAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/phantom.rs::SweepAttack::can_continue the cat hiss and scare check
@@ -135,5 +135,5 @@ Shulker.ShulkerNearestAttackGoal.getTargetSearchArea inline crates/horizon-clien
Shulker.ShulkerPeekGoal.canContinueToUse port crates/horizon-client/src/mobs/shulker.rs::Peek::can_continue
Silverfish.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
Silverfish.createAttributes skip:data attribute defaults come from data tables
Silverfish.getWalkTargetValue missing minor: no infested-host path value (10) for silverfish in ai.rs walk_target_value
Silverfish.getWalkTargetValue inline crates/horizon-client/src/mobs/ai.rs::walk_target_value a block standing on an infested host is worth 10, else the monster light value (with its own test)
Silverfish.checkSilverfishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
1 ItemFrame.defineSynchedData skip:other entity data defaults; ItemFrame starts with item None and rotation 0 in place_item_frame
5 ItemFrame.canHurtWhenFixed port crates/horizon-client/src/game/frames.rs::attack_frame a fixed frame refuses a non-creative hit (attack_ticks reset, no break) and lets a creative player break it
6 ItemFrame.hurtClient inline crates/horizon-client/src/game/frames.rs::Game::attack_frame gap: minor: no separate client-side fixed-frame gate; the creative exception is missing
7 ItemFrame.removeFramedMap inline crates/horizon-client/src/game/maps.rs::Game::lan_map_updates frame map markers come from item_frames each tick, so a removed frame needs no step
8 ItemFrame.getSlot missing inline crates/horizon-client/src/game/commands/items.rs::Game::slot_get minor: no slot 0 access for item frames in the item command path slots_named maps container.0 and contents on a frame to Slot::Frame; slot_get reads the frame's item and slot_set writes it
9 ItemFrame.onSyncedDataUpdated skip:other network data-sync hook; the item is read from the frame field on demand
10 ItemFrame.setRotation inline crates/horizon-client/src/game/frames.rs::Game::interact_frame the rotate-by-one step; the neighbour update is in frame_output_changed
11 ItemFrame.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::item_frame_from_nbt gap: minor: Facing defaults to 2 where vanilla defaults to DOWN
17 LeashFenceKnotEntity.createKnot inline crates/horizon-client/src/game/leads.rs::Game::interact_knot no in-game knot entity is created; LAN knot ids are assigned in lan_assign_ids
18 Painting.defineSynchedData skip:other entity data default variant; Horizon picks the variant in place_painting
19 Painting.get port crates/horizon-client/src/game/paintings.rs::PaintingVariants::get lookup of the variant by id; there is no component getter
20 Painting.applyImplicitComponent missing inline crates/horizon-client/src/game/paintings.rs::Game::place_painting minor: a painting variant component on the item is ignored; placement always picks a random fitting variant the stack's painting/variant replaces the random pick (PaintingVariants::of_stack), and that variant has to survive where it goes
21 Painting.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::painting_from_nbt
22 Painting.dropItem port crates/horizon-client/src/game/paintings.rs::Game::break_painting gap: minor: the dropped painting item keeps no custom name
23 PaintingVariants.register skip:data registry bootstrap; variants load from the data files in PaintingVariants::load
27 FallingBlockEntity.readAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::falling_block_from_nbt gap: minor: TileEntityData is not read; damage settings come from falling_block::Damage::from_nbt
28 FallingBlockEntity.fillCrashReportCategory skip:debug crash report detail
29 FallingBlockEntity.getTypeName skip:data - the anvil death text is its damage type's message id (death.attack.anvil), which takes no block-name argument; game/falling_damage.rs picks falling_anvil, falling_stalactite or falling_block
30 FallingBlockEntity.teleport missing inline crates/horizon-client/src/game.rs::Game::fall_step unsure: no portal travel for falling blocks found in nether_portal.rs and no end-arrival tick the portal move itself is falling_through_portal; the End-crossing duplicate tick (`forceTickAfterTeleportToDuplicate`) is in fall_step
31 ItemEntity.restoreFrom skip:other the ItemEntity value moves between levels with thrower kept; nothing to copy
32 ItemEntity.setFluidMovement inline crates/horizon-client/src/entities.rs::ItemEntity::tick water and lava drag and buoyancy are applied in tick
33 ItemEntity.fireImmune inline crates/horizon-client/src/entities.rs::ItemEntity::environment_tick fire immunity via resists_fire in environment_tick
40 ItemEntity.getVisualRotationYInDegrees inline crates/horizon-client/src/game/item_draw.rs::Game::dropped_item_geometry spin is applied in radians there; no degree conversion
41 ItemEntity.getSlot missing unsure: no slot 0 access for dropped items found in commands.rs
42 PrimedTnt.defineSynchedData skip:other fuse and block state are struct fields; spawn sets fuse 80; the block is always TNT
43 PrimedTnt.explode inline crates/horizon-client/src/game/tnt.rs::Game::tick_tnt gap: minor: power fixed at 4; no explosion_power and no used-portal damage calculator the power is the tnt's own field (`explosion_power`, 4 by default); gap: minor: no used-portal damage calculator
44 PrimedTnt.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs::tnt_to_nbt the fuse and the block state are saved
45 PrimedTnt.restoreFrom missing minor: PrimedTnt has no owner field, so the igniter is not kept through portal moves
46 PrimedTnt.teleport missing unsure: no used-portal flag on PrimedTnt; the portal damage calculator is not applied
53 Creeper.defineSynchedData skip:other swell, powered and ignited are Mob fields
54 Creeper.addAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt gap: minor: Fuse and ExplosionRadius are written as constants 30 and 3, not the creeper's values
55 Creeper.thunderHit port crates/horizon-client/src/game/lightning.rs::Game::thunder_hit
56 Creeper.spawnLingeringCloud port crates/horizon-client/src/mobs/hostile.rs::explode crates/horizon-client/src/mobs/hostile.rs::creeper_tick MobEvent::LingeringCloud after the Explode: radius 2.5, wait 10, 300 ticks, -radius/duration a tick, the creeper's effects at 0.25 of their duration with their ambient and visible flags (game/potions.rs::spawn_creeper_cloud); a mob keeps ambient_effects now (NBT, /effect, expiry, conversion, the synchronized particles)
57 ElderGuardian.createAttributes skip:data attribute defaults come from data tables
58 Enderman.registerGoals port crates/horizon-client/src/mobs/enderman.rs::register gap: minor: no anger-reset target goal (priority 4)
59 Enderman.createAttributes skip:data attribute defaults come from data tables
61 Enderman.defineSynchedData skip:other carried block, creepy and stared-at state are Mob extra fields
62 Enderman.playStareSound inline crates/horizon-client/src/mobs/enderman.rs::LookForPlayer::tick gap: minor: the 400-tick throttle of the stare sound is not seen
63 Enderman.onSyncedDataUpdated skip:other client sync hook; the stare sound is played server-side from LookForPlayer
64 Enderman.addAdditionalSaveData port crates/horizon-client/src/entity_nbt.rs:976-985 crates/horizon-client/src/entity_nbt.rs::mob_to_nbt the carried block is written as carriedBlockState and removed when there is none
65 Enderman.readAdditionalSaveData inline crates/horizon-client/src/entity_nbt.rs crates/horizon-client/src/entity_nbt.rs::mob_from_nbt the same state round-trips through the registry
66 Enderman.canRandomlyTeleportTo port crates/horizon-client/src/mobs/enderman.rs::teleport_to the water check on the ground block
67 Enderman.repeatedlyTryToTeleport port crates/horizon-client/src/mobs/enderman.rs::ai_step pending teleports retry up to 64 times
68 Enderman.dropCustomDeathLoot port crates/horizon-client/src/mobs/enderman.rs::carried_block_drops the carried block's drops with a silk-touch diamond axe (carried_block_tool), drawn from the block table's random sequence (game/creatures.rs, the death handling)
69 Enderman.hurtWithCleanWater inline crates/horizon-client/src/game/splash_water.rs::Game::affect_entities_around
70 Enderman.EndermanLeaveBlockGoal.canPlaceBlock inline crates/horizon-client/src/mobs/enderman.rs::LeaveBlock::tick gap: minor: the place-on blacklist tag and the carried block canSurvive check are not in the tick
71 Endermite.registerGoals port crates/horizon-client/src/mobs/ai.rs::register Hostile family defaults; gap: unsure: the ClimbOnTopOfPowderSnow goal is not checked Hostile family defaults; Float and ClimbOnTopOfPowderSnow at 1 are in mobs/hostile.rs
72 Endermite.createAttributes skip:data attribute defaults come from data tables
73 Endermite.checkEndermiteSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm
74 Ghast.registerGoals port crates/horizon-client/src/mobs/nether.rs::register_ghast
87 Guardian.checkGuardianSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Guardian and ElderGuardian arm
88 Guardian.GuardianAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/guardian.rs::GuardianAttack::can_continue
89 Guardian.GuardianAttackSelector.test inline crates/horizon-client/src/mobs/guardian.rs::register the selector is the player, squid and axolotl beyond 9 filters in register
90 Monster.updateNoActionTime port crates/horizon-client/src/mobs/ai.rs: no_action_time += 1 at 1556, reset at 1842/2258 crates/horizon-client/src/mobs/ai.rs::server_ai_step the idle counter is kept and read by the despawn path in raids.rs the idle counter is counted up there and read by the despawn path in raids.rs
91 Monster.getProjectile missing unsure: no held-ammo choice for mobs found in mobs/*.rs
92 PatrollingMonster.addAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::write_nbt
93 PatrollingMonster.readAdditionalSaveData port crates/horizon-client/src/mobs/raider.rs::read_nbt
94 PatrollingMonster.checkPatrollingMonsterSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Pillager arm: block light 8 or less, then mob rules
95 PatrollingMonster.LongDistancePatrolGoal.findPatrolCompanions port crates/horizon-client/src/mobs/raider.rs::companions
96 Phantom.registerGoals port crates/horizon-client/src/mobs/phantom.rs::register
97 Phantom.updatePhantomSizeInfo missing port crates/horizon-client/src/mobs/phantom.rs::set_size minor: vanilla sets size only from NBT, and Horizon has no size, so no scale or attack bonus the size clamps to 0..64, sets the attack damage base to 6 plus the size, and the box is scaled by it (mobs/living.rs::Mob::dims)
98 Phantom.finalizeSpawn inline crates/horizon-client/src/mobs/phantom.rs::register the anchor 5 blocks above is set at creation; size 0
99 Phantom.readAdditionalSaveData missing inline crates/horizon-client/src/entity_nbt.rs::mob_from_nbt unsure: anchor_pos and size are not read for phantoms size is read as setPhantomSize; gap: minor: anchor_pos is not read
100 Phantom.addAdditionalSaveData missing inline crates/horizon-client/src/entity_nbt.rs::mob_to_nbt unsure: anchor_pos and size are not written for phantoms size is written; gap: minor: anchor_pos is not written
101 Phantom.getDefaultDimensions missing inline crates/horizon-client/src/mobs/living.rs::Mob::dims minor: no size scale on the phantom box; size is 0 unless NBT sets it the box, height and eye height scale by 1 + 0.15 per size
102 Phantom.PhantomBodyRotationControl.clientTick inline crates/horizon-client/src/mobs/phantom.rs::move_control the head yaw follows the body yaw there
103 Phantom.PhantomMoveTargetGoal.touchingTarget inline crates/horizon-client/src/mobs/phantom.rs::CircleAroundAnchor::tick the squared distance under 4 check near the move target
104 Phantom.PhantomSweepAttackGoal.canContinueToUse port crates/horizon-client/src/mobs/phantom.rs::SweepAttack::can_continue the cat hiss and scare check
135 Shulker.ShulkerPeekGoal.canContinueToUse port crates/horizon-client/src/mobs/shulker.rs::Peek::can_continue
136 Silverfish.registerGoals port crates/horizon-client/src/mobs/hostile.rs::register
137 Silverfish.createAttributes skip:data attribute defaults come from data tables
138 Silverfish.getWalkTargetValue missing inline crates/horizon-client/src/mobs/ai.rs::walk_target_value minor: no infested-host path value (10) for silverfish in ai.rs walk_target_value a block standing on an infested host is worth 10, else the monster light value (with its own test)
139 Silverfish.checkSilverfishSpawnRules port crates/horizon-client/src/mobs/spawn_rules.rs::check_spawn_rules the Endermite and Silverfish arm