5454import net .minecraft .client .renderer .LevelRenderer ;
5555import net .minecraft .client .renderer .LightTexture ;
5656import net .minecraft .client .renderer .MultiBufferSource ;
57+ import net .minecraft .client .renderer .MultiBufferSource .BufferSource ;
5758import net .minecraft .client .renderer .RenderType ;
5859import net .minecraft .client .renderer .Sheets ;
5960import net .minecraft .client .renderer .blockentity .BlockEntityRenderer ;
@@ -151,14 +152,18 @@ public static void addTransparentRenderer(RenderType renderType, LazyRender rend
151152 public void renderWorld (RenderLevelStageEvent event ) {
152153 if (event .getStage () == RenderLevelStageEvent .Stage .AFTER_TRANSLUCENT_BLOCKS ) {
153154 //Only do matrix transforms and mess with buffers if we actually have any renders to render
154- renderStage (event , !transparentRenderers .isEmpty (), (camera , renderer , poseStack , renderTick , partialTick ) -> {
155+ if (!transparentRenderers .isEmpty ()) {
156+ Camera camera = event .getCamera ();
157+ MultiBufferSource .BufferSource renderer = minecraft .renderBuffers ().bufferSource ();
158+ PoseStack poseStack = event .getPoseStack ();
159+ int renderTick = event .getRenderTick ();
160+ float partialTick = event .getPartialTick ();
155161 ProfilerFiller profiler = minecraft .getProfiler ();
156162 profiler .push (ProfilerConstants .DELAYED );
157163 if (transparentRenderers .size () == 1 ) {
158164 //If we only have one render type we don't need to bother calculating any distances
159- for (Map .Entry <RenderType , List <LazyRender >> entry : transparentRenderers .entrySet ()) {
160- TransparentRenderInfo renderInfo = new TransparentRenderInfo (entry .getKey (), entry .getValue (), 0 );
161- renderInfo .render (camera , renderer , poseStack , renderTick , partialTick , profiler );
165+ for (Entry <RenderType , List <LazyRender >> entry : transparentRenderers .entrySet ()) {
166+ doTransparentRender (entry .getKey (), entry .getValue (), camera , renderer , poseStack , renderTick , partialTick , profiler );
162167 }
163168 } else {
164169 List <TransparentRenderInfo > toSort = new ArrayList <>(transparentRenderers .size ());
@@ -186,19 +191,11 @@ public void renderWorld(RenderLevelStageEvent event) {
186191 }
187192 transparentRenderers .clear ();
188193 profiler .pop ();
189- });
194+ }
190195 } else if (event .getStage () == RenderLevelStageEvent .Stage .AFTER_PARTICLES && boltRenderer .hasBoltsToRender ()) {
191- //Only do matrix transforms and mess with buffers if we actually have any bolts to render
192- renderStage (event , boltRenderer .hasBoltsToRender (), (camera , renderer , poseStack , renderTick , partialTick ) -> {
193- boltRenderer .render (partialTick , poseStack , renderer , camera .getPosition ());
194- renderer .endBatch (MekanismRenderType .MEK_LIGHTNING );
195- });
196- }
197- }
198-
199- private void renderStage (RenderLevelStageEvent event , boolean shouldRender , StageRenderer renderer ) {
200- if (shouldRender ) {
201- renderer .render (event .getCamera (), minecraft .renderBuffers ().bufferSource (), event .getPoseStack (), event .getRenderTick (), event .getPartialTick ());
196+ MultiBufferSource .BufferSource renderer = minecraft .renderBuffers ().bufferSource ();
197+ boltRenderer .render (event .getPartialTick (), event .getPoseStack (), renderer , event .getCamera ().getPosition ());
198+ renderer .endBatch (MekanismRenderType .MEK_LIGHTNING );
202199 }
203200 }
204201
@@ -544,16 +541,6 @@ private Model3D getOverlayModel(Direction side, TransmissionType type) {
544541 return model ;
545542 }
546543
547- @ FunctionalInterface
548- private interface StageRenderer {
549-
550- /**
551- * @param camera Camera position, in general rendering will have to be translated by the inverse position of the client viewing camera to get back to 0, 0, 0
552- */
553- void render (Camera camera , MultiBufferSource .BufferSource renderer , PoseStack poseStack , int renderTick , float partialTick );
554- }
555-
556- @ FunctionalInterface
557544 public interface LazyRender {
558545
559546 void render (Camera camera , VertexConsumer buffer , PoseStack poseStack , int renderTick , float partialTick , ProfilerFiller profiler );
@@ -571,20 +558,24 @@ default String getProfilerSection() {
571558
572559 private record TransparentRenderInfo (RenderType renderType , List <LazyRender > renders , double closest ) {
573560 private void render (Camera camera , MultiBufferSource .BufferSource renderer , PoseStack poseStack , int renderTick , float partialTick , ProfilerFiller profiler ) {
574- //Batch all renders for a single render type into a single buffer addition
575- VertexConsumer buffer = renderer .getBuffer (renderType );
576- for (LazyRender transparentRender : renders ) {
577- String profilerSection = transparentRender .getProfilerSection ();
578- if (profilerSection != null ) {
579- profiler .push (profilerSection );
580- }
581- //Note: We don't bother sorting renders in a specific render type as we assume the render type has sortOnUpload as true
582- transparentRender .render (camera , buffer , poseStack , renderTick , partialTick , profiler );
583- if (profilerSection != null ) {
584- profiler .pop ();
585- }
561+ doTransparentRender (renderType , renders , camera , renderer , poseStack , renderTick , partialTick , profiler );
562+ }
563+ }
564+
565+ private static void doTransparentRender (RenderType renderType , List <LazyRender > renders , Camera camera , BufferSource renderer , PoseStack poseStack , int renderTick , float partialTick , ProfilerFiller profiler ) {
566+ //Batch all renders for a single render type into a single buffer addition
567+ VertexConsumer buffer = renderer .getBuffer (renderType );
568+ for (LazyRender transparentRender : renders ) {
569+ String profilerSection = transparentRender .getProfilerSection ();
570+ if (profilerSection != null ) {
571+ profiler .push (profilerSection );
572+ }
573+ //Note: We don't bother sorting renders in a specific render type as we assume the render type has sortOnUpload as true
574+ transparentRender .render (camera , buffer , poseStack , renderTick , partialTick , profiler );
575+ if (profilerSection != null ) {
576+ profiler .pop ();
586577 }
587- renderer .endBatch (renderType );
588578 }
579+ renderer .endBatch (renderType );
589580 }
590581}
0 commit comments