This, in turn, means that arrows can pass through other entities in scenarios where their hitbox as-rendered very much collides.
After looking through the source code, it appears the bug is tied a long-standing issue in the implementation of ProjectileUtil’s “getEntityHitResult”, wherein the hitbox size of an arrow was NEVER actually accounted for in the collision check. This was previously disguised by the constant 0.3 Margin factor, which was slightly larger than the discarded hitbox contribution (0.25b square radius).
In the new scaling margin system, it takes 7 ticks before the margin reaches 0.25 (the missing amount), and thus, for that window, the collision does not match due to the code ignoring the hitbox dimensions outright in favor of the margin term.
Not really sure how to show this better, but the above screenshot is a simple setup to produce this issue. A portion of arrows shot from the dispenser will fail to collide, if they gain a deviation that sends them marginally away, but hit in all other cases. In both scenarios, the hitbox will ALWAYS indicate a collision should have occurred, and the system works in previous versions (v <= 1.21.5)
I have had a handful of other players test on independent machines & clients, and the issue is consistent across all users.
After inspecting the diffs between 1.21.5 & 1.21.6+, the issue seems to be stemming from the change to the Margin system used to detect entity collision in ProjectileUtil (All projectiles).
Across both previous and afflicted versions, the actual hitbox of the projectile entity is ignored during the collision distance checks against entities, when it comes to the final validation. (Hitbox is used for computing the region in which to check against entities, as expected). Thus, the changes to the margin have actually led to the static emulation of hitbox size from previous versions being replaced with an effective scaling hitbox. This is NOT reflected in the debug hitboxes, which retain the static hitbox of the entity, with no information about effective size being portrayed.
Whether or not the new behavior is a good change is up for debate between players, as there are reasons to use both systems, but at the least, the debug renderer should be updated to properly reflect the new collision system, as the information portrayed is currently misleading/false.
Notably, this issue’s scope, as mentioned above by Kanji, means it affects much more than just arrows, including:
All mob projectiles:
Ghast fireballs, Dragon Fireballs, all Skeleton type’s arrows (tipped & otherwise), Blaze Fireballs, Wind Charges, Shulker Bullets, and Llama Spit
All throwables:
Ender Pearls, Eggs, Potions, Snowballs, etc.
All ranged weapons:
Crossbows & Bows (Arrows, Spectral Arrows, Tipped Arrows, Launched Fireworks Rockets)
Tridents
*Additionally, dispensers, due to their inherent larger randomness in projectile velocity, have drastically different performance in redstone devices due to the much tighter tolerances in close-range behavior severely affecting compact & technical systems.
This is a significant change to a large number of the game’s tolerances and likely merits further discussion.