11package org .vfast .backrooms .mixins ;
22
33import com .mojang .blaze3d .vertex .PoseStack ;
4- import com .mojang .blaze3d .vertex .VertexConsumer ;
5- import net .minecraft .client .renderer .MultiBufferSource ;
4+ import net .minecraft .client .Minecraft ;
65import net .minecraft .client .renderer .ScreenEffectRenderer ;
76import net .minecraft .client .renderer .SubmitNodeCollector ;
8- import net .minecraft .client .renderer .rendertype . RenderTypes ;
7+ import net .minecraft .client .renderer .block . BlockStateModelSet ;
98import net .minecraft .client .renderer .texture .TextureAtlasSprite ;
10- import net .minecraft .util . ARGB ;
9+ import net .minecraft .world . level . block . state . BlockState ;
1110import org .jetbrains .annotations .Nullable ;
12- import org .joml .Matrix4f ;
1311import org .spongepowered .asm .mixin .Final ;
1412import org .spongepowered .asm .mixin .Mixin ;
1513import org .spongepowered .asm .mixin .Shadow ;
@@ -24,35 +22,27 @@ public abstract class ScreenEffectRendererMixins implements Suffocator {
2422
2523 @ Shadow
2624 @ Final
27- private MultiBufferSource bufferSource ;
25+ private Minecraft minecraft ;
26+
27+ @ Shadow
28+ private static void submitBlockSprite (TextureAtlasSprite sprite , PoseStack poseStack , SubmitNodeCollector submitNodeCollector , int color ) {}
2829
2930 @ Unique
3031 @ Nullable
31- private TextureAtlasSprite suffocatingSprite ;
32+ private BlockState suffocatingState ;
3233
33- @ Inject (method = "renderScreenEffect " , at = @ At (value = "HEAD" ))
34+ @ Inject (method = "submit " , at = @ At (value = "HEAD" ))
3435 private void suffocatingIn (boolean isFirstPerson , boolean isSleeping , float partialTicks , SubmitNodeCollector submitNodeCollector , boolean hideGui , CallbackInfo ci ) {
35- if (this .suffocatingSprite != null ) {
36- this .suffocateEffect (this .suffocatingSprite , new PoseStack ());
36+ if (this .suffocatingState != null ) {
37+ PoseStack poseStack = new PoseStack ();
38+ BlockStateModelSet blockStateModelSet = this .minecraft .getModelManager ().getBlockStateModelSet ();
39+ TextureAtlasSprite sprite = blockStateModelSet .getParticleMaterial (this .suffocatingState ).sprite ();
40+ submitBlockSprite (sprite , poseStack , submitNodeCollector , -15132391 );
3741 }
3842 }
3943
40- @ Override
41- public void setSuffocating (@ Nullable final TextureAtlasSprite sprite ) {
42- this .suffocatingSprite = sprite ;
43- }
44-
45- private void suffocateEffect (final TextureAtlasSprite sprite , final PoseStack poseStack ) {
46- int color = ARGB .colorFromFloat (1.0F , 0.1F , 0.1F , 0.1F );
47- float u0 = sprite .getU0 ();
48- float u1 = sprite .getU1 ();
49- float v0 = sprite .getV0 ();
50- float v1 = sprite .getV1 ();
51- Matrix4f pose = poseStack .last ().pose ();
52- VertexConsumer builder = this .bufferSource .getBuffer (RenderTypes .blockScreenEffect (sprite .atlasLocation ()));
53- builder .addVertex (pose , -1.0F , -1.0F , -0.5F ).setUv (u1 , v1 ).setColor (color );
54- builder .addVertex (pose , 1.0F , -1.0F , -0.5F ).setUv (u0 , v1 ).setColor (color );
55- builder .addVertex (pose , 1.0F , 1.0F , -0.5F ).setUv (u0 , v0 ).setColor (color );
56- builder .addVertex (pose , -1.0F , 1.0F , -0.5F ).setUv (u1 , v0 ).setColor (color );
44+ @ Unique
45+ public void setSuffocating (@ Nullable BlockState state ) {
46+ this .suffocatingState = state ;
5747 }
5848}
0 commit comments