While investigating the root cause of MC-310235 ("The game crashes when a piston pushes a water cauldron with the 'Improved Transparency' option enabled") by reading the client's decompiled source, I found that the crash is a symptom of a broader inconsistency in net.minecraft.client.renderer.SubmitNodeCollection, not an isolated one-off.
RenderSetup exposes a forceSolidModelPhase flag (set via .withForcedSolidModelPhase()) specifically meant to prevent RenderTypes that have GPU blending (hasBlending() == true) but no configured OIT pipelines from ever being routed into the OIT draw phase — used today by banner_pattern, wolf_armor_cracks, patterned_shield_glint, and trimmed_armor_glint.
However, of the three methods in SubmitNodeCollection that decide whether a submission goes to the solid phase or the translucent/OIT phase, only one respects this guard:
submitModel(...)— correctly checks!renderType.forceSolidModelPhase() && renderType.hasBlending().submitBlockModel(...)— checks onlyrenderType.hasBlending(), ignoringforceSolidModelPhase()entirely.submitMovingBlock(...)— doesn't consult theRenderTypeat all; it routes the entire multi-layer submission based on a single model-level flag (model.hasMaterialFlag(1)), even though the underlying draw buffer for that submission can contain quads of multiple distinctRenderTypes (solid_moving_block/cutout_moving_block/translucent_moving_block) built per-quad inMovingBlockFeatureRenderer.buildGroup.RenderTypeFeatureRenderer.executeGroupthen callsdrawFromBufferOiton every buffered draw in that group without re-checking each draw's ownRenderType, which is exactly howsolid_moving_block(which never gets.setOitPipelines(...)inRenderTypes.createMovingBlockSetup) ends up hittingPreparedRenderType.drawFromBufferOit'sIllegalStateException.
Why this matters beyond MC-310235: if the fix for that ticket only patches submitMovingBlock's specific case (e.g. by special-casing moving blocks), submitBlockModel retains the identical missing check and would silently misroute any future (or currently unused) block RenderType that blends on GPU but lacks both OIT pipelines and forceSolidModelPhase — reproducing the same crash class through ordinary block rendering instead of piston-moved blocks, with no combination currently known to trigger it (which is likely why it hasn't surfaced in crash reports yet).
Suggested fix: centralize the "can this RenderType safely enter the OIT/translucent phase" check into one shared predicate (e.g. RenderType.canUseOitPhase() = hasBlending() && !forceSolidModelPhase()) and use it consistently in all three call sites, and make submitMovingBlock's phase decision per-quad/per-RenderType rather than per-whole-model.
Steps to reproduce: none provided — this is a source-level observation from the decompiled client, not an in-game reproduction. See MC-310235 for the one confirmed manifestation of this defect class.
Thank you for your report!
After consideration, the issue is being closed as Invalid.
You have posted a feature request or a suggestion. This site is for bug reports only.
For suggestions, please visit The official Minecraft feedback site or visit the Minecraft Feedback Discord server.
Quick Links:
📓 Bug Tracker Guidelines – 💬 Community Support – 📧 Mojang Support (Technical Issues) – 📧 Microsoft Support (Account Issues)
📓 Project Summary – ✍️ Feedback and Suggestions – 📖 Game Wiki