2727import net .fabricmc .api .Environment ;
2828import net .frozenblock .glowtone .GlowtoneConstants ;
2929import net .minecraft .client .renderer .block .model .BakedQuad ;
30- import net .minecraft .client .renderer .block .model .BlockElement ;
3130import net .minecraft .client .renderer .block .model .BlockElementFace ;
31+ import net .minecraft .client .renderer .block .model .BlockElementRotation ;
3232import net .minecraft .client .renderer .block .model .SimpleUnbakedGeometry ;
3333import net .minecraft .client .renderer .texture .MissingTextureAtlasSprite ;
3434import net .minecraft .client .renderer .texture .TextureAtlasSprite ;
3535import net .minecraft .client .resources .model .Material ;
36+ import net .minecraft .client .resources .model .ModelBaker ;
3637import net .minecraft .client .resources .model .ModelDebugName ;
3738import net .minecraft .client .resources .model .ModelState ;
3839import net .minecraft .client .resources .model .QuadCollection ;
39- import net .minecraft .client .resources .model .SpriteGetter ;
4040import net .minecraft .core .Direction ;
41- import net .minecraft .resources .ResourceLocation ;
41+ import net .minecraft .resources .Identifier ;
42+ import org .joml .Vector3fc ;
4243import org .spongepowered .asm .mixin .Mixin ;
43- import org .spongepowered .asm .mixin .Shadow ;
4444import org .spongepowered .asm .mixin .injection .At ;
4545
4646@ Environment (EnvType .CLIENT )
4747@ Mixin (SimpleUnbakedGeometry .class )
4848public abstract class SimpleUnbakedGeometryMixin {
4949
50- @ Shadow
51- private static BakedQuad bakeFace (BlockElement blockElement , BlockElementFace blockElementFace , TextureAtlasSprite textureAtlasSprite , Direction direction , ModelState modelState ) {
52- return null ;
53- }
54-
5550 @ ModifyExpressionValue (
56- method = "method_67933 " ,
51+ method = "bake(Ljava/util/List;Lnet/minecraft/client/renderer/block/model/TextureSlots;Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/client/resources/model/ModelDebugName;)Lnet/minecraft/client/resources/model/QuadCollection; " ,
5752 at = @ At (
5853 value = "INVOKE" ,
5954 target = "Lnet/minecraft/client/resources/model/SpriteGetter;resolveSlot(Lnet/minecraft/client/renderer/block/model/TextureSlots;Ljava/lang/String;Lnet/minecraft/client/resources/model/ModelDebugName;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;"
6055 )
6156 )
6257 private static TextureAtlasSprite glowtone$findEmissiveTexture (
6358 TextureAtlasSprite original ,
64- @ Local (argsOnly = true ) SpriteGetter spriteGetter ,
59+ @ Local (argsOnly = true ) ModelBaker modelBaker ,
6560 @ Local (argsOnly = true ) ModelDebugName modelDebugName ,
6661 @ Share ("glowtone$emissiveSprite" ) LocalRef <TextureAtlasSprite > emissiveSpriteRef
6762 ) {
6863 if (!GlowtoneConstants .GLOWTONE_EMISSIVES ) return original ;
6964
70- ResourceLocation location = original .contents ().name ();
71- ResourceLocation emissiveLocation = ResourceLocation .fromNamespaceAndPath (location .getNamespace (), location .getPath () + "_glowtone_emissive" );
65+ final Identifier location = original .contents ().name ();
66+ final Identifier emissiveLocation = Identifier .fromNamespaceAndPath (location .getNamespace (), location .getPath () + "_glowtone_emissive" );
7267
73- TextureAtlasSprite emissiveSprite = spriteGetter .get (new Material (original .atlasLocation (), emissiveLocation ), modelDebugName );
68+ final TextureAtlasSprite emissiveSprite = modelBaker . sprites () .get (new Material (original .atlasLocation (), emissiveLocation ), modelDebugName );
7469 if (emissiveSprite != null && !emissiveSprite .contents ().name ().equals (MissingTextureAtlasSprite .getLocation ())) {
7570 emissiveSpriteRef .set (emissiveSprite );
7671 }
@@ -79,47 +74,72 @@ private static BakedQuad bakeFace(BlockElement blockElement, BlockElementFace bl
7974 }
8075
8176 @ WrapOperation (
82- method = "method_67933" ,
77+ method = "bake(Ljava/util/List;Lnet/minecraft/client/renderer/block/model/TextureSlots;Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/client/resources/model/ModelDebugName;)Lnet/minecraft/client/resources/model/QuadCollection;" ,
78+ at = @ At (
79+ value = "INVOKE" ,
80+ target = "Lnet/minecraft/client/renderer/block/model/FaceBakery;bakeQuad(Lnet/minecraft/client/resources/model/ModelBaker$PartCache;Lorg/joml/Vector3fc;Lorg/joml/Vector3fc;Lnet/minecraft/client/renderer/block/model/BlockElementFace;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/core/Direction;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/client/renderer/block/model/BlockElementRotation;ZI)Lnet/minecraft/client/renderer/block/model/BakedQuad;"
81+ )
82+ )
83+ private static BakedQuad glowtone$bakeEmissiveQuad (
84+ ModelBaker .PartCache parts ,
85+ Vector3fc from ,
86+ Vector3fc to ,
87+ BlockElementFace face ,
88+ TextureAtlasSprite sprite ,
89+ Direction direction ,
90+ ModelState modelState ,
91+ BlockElementRotation rotation ,
92+ boolean shade ,
93+ int lightEmission ,
94+ Operation <BakedQuad > original ,
95+ @ Share ("glowtone$emissiveSprite" ) LocalRef <TextureAtlasSprite > emissiveSpriteRef ,
96+ @ Share ("glowtone$emissiveQuad" ) LocalRef <BakedQuad > emissiveQuadRef
97+ ) {
98+ final BakedQuad originalQuad = original .call (parts , from , to , face , sprite , direction , modelState , rotation , shade , lightEmission );
99+
100+ final TextureAtlasSprite emissiveSprite = emissiveSpriteRef .get ();
101+ if (emissiveSprite == null ) return originalQuad ;
102+
103+ final BakedQuad emissiveQuad = original .call (parts , from , to , face , emissiveSprite , direction , modelState , rotation , shade , lightEmission );
104+ emissiveQuadRef .set (emissiveQuad );
105+
106+ return originalQuad ;
107+ }
108+
109+ @ WrapOperation (
110+ method = "bake(Ljava/util/List;Lnet/minecraft/client/renderer/block/model/TextureSlots;Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/client/resources/model/ModelDebugName;)Lnet/minecraft/client/resources/model/QuadCollection;" ,
83111 at = @ At (
84112 value = "INVOKE" ,
85113 target = "Lnet/minecraft/client/resources/model/QuadCollection$Builder;addUnculledFace(Lnet/minecraft/client/renderer/block/model/BakedQuad;)Lnet/minecraft/client/resources/model/QuadCollection$Builder;"
86114 )
87115 )
88116 private static QuadCollection .Builder glowtone$bakeEmissiveUnculledFace (
89117 QuadCollection .Builder instance , BakedQuad bakedQuad , Operation <QuadCollection .Builder > original ,
90- @ Local (argsOnly = true ) BlockElement blockElement ,
91- @ Local (argsOnly = true ) Direction direction ,
92- @ Local (argsOnly = true ) BlockElementFace blockElementFace ,
93- @ Local (argsOnly = true ) ModelState modelState ,
94- @ Share ("glowtone$emissiveSprite" ) LocalRef <TextureAtlasSprite > emissiveSpriteRef
118+ @ Share ("glowtone$emissiveQuad" ) LocalRef <BakedQuad > emissiveQuadRef
95119 ) {
96- QuadCollection .Builder builder = original .call (instance , bakedQuad );
120+ final QuadCollection .Builder builder = original .call (instance , bakedQuad );
97121
98- final TextureAtlasSprite emissiveSprite = emissiveSpriteRef .get ();
99- if (emissiveSprite != null ) builder . addUnculledFace ( bakeFace ( blockElement , blockElementFace , emissiveSprite , direction , modelState ) );
122+ final BakedQuad emissiveQuad = emissiveQuadRef .get ();
123+ if (emissiveQuad != null ) original . call ( instance , emissiveQuad );
100124
101125 return builder ;
102126 }
103127
104128 @ WrapOperation (
105- method = "method_67933 " ,
129+ method = "bake(Ljava/util/List;Lnet/minecraft/client/renderer/block/model/TextureSlots;Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/client/resources/model/ModelDebugName;)Lnet/minecraft/client/resources/model/QuadCollection; " ,
106130 at = @ At (
107131 value = "INVOKE" ,
108132 target = "Lnet/minecraft/client/resources/model/QuadCollection$Builder;addCulledFace(Lnet/minecraft/core/Direction;Lnet/minecraft/client/renderer/block/model/BakedQuad;)Lnet/minecraft/client/resources/model/QuadCollection$Builder;"
109133 )
110134 )
111135 private static QuadCollection .Builder glowtone$bakeEmissiveCulledFace (
112136 QuadCollection .Builder instance , Direction rotatedDirection , BakedQuad bakedQuad , Operation <QuadCollection .Builder > original ,
113- @ Local (argsOnly = true ) BlockElement blockElement ,
114- @ Local (argsOnly = true ) Direction direction ,
115- @ Local (argsOnly = true ) BlockElementFace blockElementFace ,
116- @ Local (argsOnly = true ) ModelState modelState ,
117- @ Share ("glowtone$emissiveSprite" ) LocalRef <TextureAtlasSprite > emissiveSpriteRef
137+ @ Share ("glowtone$emissiveQuad" ) LocalRef <BakedQuad > emissiveQuadRef
118138 ) {
119- QuadCollection .Builder builder = original .call (instance , rotatedDirection , bakedQuad );
139+ final QuadCollection .Builder builder = original .call (instance , rotatedDirection , bakedQuad );
120140
121- final TextureAtlasSprite emissiveSprite = emissiveSpriteRef .get ();
122- if (emissiveSprite != null ) builder . addCulledFace ( rotatedDirection , bakeFace ( blockElement , blockElementFace , emissiveSprite , direction , modelState ) );
141+ final BakedQuad emissiveQuad = emissiveQuadRef .get ();
142+ if (emissiveQuad != null ) original . call ( instance , rotatedDirection , emissiveQuad );
123143
124144 return builder ;
125145 }
0 commit comments