ScreenshotCompat
Cross-version seam for Screenshot#takeScreenshot and the main RenderTarget's accessor. Both are reflective, for different reasons — neither can be inlined later:
takeScreenshot: a compile-time break. Synchronous through 1.21.4, asynchronous from 1.21.5. One source tree is compiled against every node, so neither shape exists on all of them. 1.21.6's(RenderTarget, int, Consumer)overload is ignored on purpose: that downscale is GPU-side and absent from the older nodes, so scaling stays the caller's job.The accessor: a runtime break.
Minecraft#getMainRenderTargetcompiles on every node, but at 26.2 it moved toGameRenderer— inside the 26.1.2 node's open-ended[26.1.2,)range.
Matched by SHAPE, never by name, as CommandsCompat: name strings aren't reobf'd, so "takeScreenshot" would stay mojmap and miss on Fabric intermediary / Forge SRG, while the Class references below are remapped by the build. That also means no Mappings dependency, so this works before the runtime name table loads — unlike ClientCommandCompat.
Each shape matches exactly one method: every grab overload takes a File or (26.2) a Minecraft first, and a no-arg method returning RenderTarget is unique on both owners in every version 1.18.2 .. 26.2.