88import com .lowdragmc .shimmer .client .postprocessing .PostProcessing ;
99import com .lowdragmc .shimmer .core .IParticleDescription ;
1010import com .lowdragmc .shimmer .core .IParticleEngine ;
11+ import com .lowdragmc .shimmer .core .mixins .LightTextureAccessor ;
1112import com .lowdragmc .shimmer .core .mixins .ShimmerMixinPlugin ;
1213import com .lowdragmc .shimmer .platform .Services ;
1314import com .mojang .blaze3d .pipeline .RenderTarget ;
15+ import com .mojang .blaze3d .systems .RenderSystem ;
1416import com .mojang .blaze3d .vertex .BufferBuilder ;
1517import com .mojang .blaze3d .vertex .PoseStack ;
1618import net .minecraft .client .Camera ;
3133import org .spongepowered .asm .mixin .Final ;
3234import org .spongepowered .asm .mixin .Mixin ;
3335import org .spongepowered .asm .mixin .Shadow ;
36+ import org .spongepowered .asm .mixin .Unique ;
3437import org .spongepowered .asm .mixin .injection .At ;
3538import org .spongepowered .asm .mixin .injection .Inject ;
3639import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
@@ -63,6 +66,7 @@ public abstract class ForgeParticleEngineMixin implements IParticleEngine {
6366 private final Map <ResourceLocation , String > PARTICLE_EFFECT = Maps .newHashMap ();
6467
6568 @ Nullable
69+ @ Override
6670 public Particle createPostParticle (PostProcessing postProcessing , ParticleOptions pParticleData , double pX , double pY , double pZ , double pXSpeed , double pYSpeed , double pZSpeed ) {
6771 Particle particle = makeParticle (pParticleData , pX , pY , pZ , pXSpeed , pYSpeed , pZSpeed );
6872 if (particle != null ) {
@@ -82,10 +86,27 @@ private ParticleRenderType injectRenderPre(ParticleRenderType particlerendertype
8286 PostProcessing postProcessing = ((IPostParticleType ) particlerendertype ).getPost ();
8387 postProcessing .getPostTarget (false ).bindWrite (false );
8488 postProcessing .hasParticle ();
89+ shimmer$turnOnLightTextureIfNeeded ();
8590 }
8691 return particlerendertype ;
8792 }
8893
94+ /**
95+ * {@link ParticleRenderType#CUSTOM} can implementation custom render logical not defined
96+ * for example {@link net.minecraft.client.particle.ItemPickupParticle}
97+ * where {@link net.minecraft.client.renderer.RenderType#entityShadow(ResourceLocation)} is used
98+ * it will use {@link net.minecraft.client.renderer.RenderStateShard.LightmapStateShard}
99+ * which will call {@link LightTexture#turnOffLightLayer()}, so we need turn on it if needed
100+ */
101+ @ Unique
102+ private void shimmer$turnOnLightTextureIfNeeded () {
103+ int currentLightTextureSlotID = RenderSystem .getShaderTexture (2 );
104+ LightTexture lightTexture = Minecraft .getInstance ().gameRenderer .lightTexture ();
105+ int lightTextureID = ((LightTextureAccessor ) lightTexture ).getLightTexture ().getId ();
106+ if (currentLightTextureSlotID != lightTextureID ) {
107+ lightTexture .turnOnLightLayer ();
108+ }
109+ }
89110
90111 @ Inject (method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V" ,
91112 at = @ At (value = "INVOKE" ,
0 commit comments