2323 */
2424package aztech .modern_industrialization .machines .models ;
2525
26- import aztech .modern_industrialization .MI ;
2726import aztech .modern_industrialization .util .ModelHelper ;
2827import java .util .ArrayList ;
2928import java .util .List ;
3938import net .minecraft .client .resources .model .ModelResourceLocation ;
4039import net .minecraft .core .BlockPos ;
4140import net .minecraft .core .Direction ;
41+ import net .minecraft .resources .ResourceLocation ;
4242import net .minecraft .util .RandomSource ;
4343import net .minecraft .world .level .BlockAndTintGetter ;
4444import net .minecraft .world .level .block .state .BlockState ;
@@ -57,22 +57,25 @@ public class MachineBakedModel implements IDynamicBakedModel {
5757 public static final String CASING_FOLDER = "machine_casing" ;
5858
5959 public static ModelResourceLocation getCasingModelId (MachineCasing casing ) {
60- return ModelResourceLocation .standalone (MI .id (CASING_FOLDER + "/" + casing .name ));
60+ return ModelResourceLocation
61+ .standalone (ResourceLocation .fromNamespaceAndPath (casing .key .getNamespace (), CASING_FOLDER + "/" + casing .key .getPath ()));
6162 }
6263
6364 public static BakedModel getCasingModel (MachineCasing casing ) {
6465 return Minecraft .getInstance ().getModelManager ().getModel (getCasingModelId (casing ));
6566 }
6667
6768 private final MachineCasing baseCasing ;
69+ private final int [] outputOverlayIndexes ;
6870 private final TextureAtlasSprite [] defaultOverlays ;
69- private final Map <String , TextureAtlasSprite []> tieredOverlays ;
71+ private final Map <ResourceLocation , TextureAtlasSprite []> tieredOverlays ;
7072 private final MachineModelClientData defaultData ;
7173
72- MachineBakedModel (MachineCasing baseCasing ,
73- TextureAtlasSprite [] defaultOverlays ,
74- Map <String , TextureAtlasSprite []> tieredOverlays ) {
74+ public MachineBakedModel (MachineCasing baseCasing ,
75+ int [] outputOverlayIndexes , TextureAtlasSprite [] defaultOverlays ,
76+ Map <ResourceLocation , TextureAtlasSprite []> tieredOverlays ) {
7577 this .baseCasing = baseCasing ;
78+ this .outputOverlayIndexes = outputOverlayIndexes ;
7679 this .defaultOverlays = defaultOverlays ;
7780 this .tieredOverlays = tieredOverlays ;
7881 this .defaultData = new MachineModelClientData (baseCasing , Direction .NORTH );
@@ -86,14 +89,14 @@ public TextureAtlasSprite[] getSprites(@Nullable MachineCasing casing) {
8689 if (casing == null ) {
8790 return defaultOverlays ;
8891 }
89- return tieredOverlays .getOrDefault (casing .name , defaultOverlays );
92+ return tieredOverlays .getOrDefault (casing .key , defaultOverlays );
9093 }
9194
9295 /**
9396 * Returns null if nothing should be rendered.
9497 */
9598 @ Nullable
96- public static TextureAtlasSprite getSprite (TextureAtlasSprite [] sprites , Direction side , Direction facingDirection , boolean isActive ) {
99+ public TextureAtlasSprite getSprite (TextureAtlasSprite [] sprites , Direction side , Direction facingDirection , boolean isActive ) {
97100 int spriteId ;
98101 if (side .getAxis ().isHorizontal ()) {
99102 spriteId = (facingDirection .get2DDataValue () - side .get2DDataValue () + 4 ) % 4 * 2 ;
@@ -121,44 +124,50 @@ public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState
121124 return getCasingModel (casing ).getModelData (level , pos , state , modelData );
122125 }
123126
124- @ Override
125- public @ NotNull List <BakedQuad > getQuads (@ Nullable BlockState state , @ Nullable Direction side , @ NotNull RandomSource rand ,
126- @ NotNull ModelData extraData , @ Nullable RenderType renderType ) {
127- var data = extraData .get (MachineModelClientData .KEY );
128- if (data == null ) {
129- data = defaultData ;
130- }
131-
132- MachineCasing casing = Objects .requireNonNullElse (data .casing , baseCasing );
133- var sprites = getSprites (casing );
134-
127+ protected @ NotNull List <BakedQuad > getQuads (@ Nullable BlockState state , @ Nullable Direction side , @ NotNull RandomSource rand ,
128+ @ NotNull ModelData extraData , @ Nullable RenderType renderType ,
129+ @ NotNull MachineModelClientData data , @ NotNull MachineCasing casing ,
130+ @ NotNull TextureAtlasSprite [] sprites , @ NotNull QuadBakingVertexConsumer vertexConsumer ) {
135131 List <BakedQuad > quads = new ArrayList <>();
136- var vc = new QuadBakingVertexConsumer ();
137132
138133 if (side != null ) {
139- // Casing
140134 quads .addAll (getCasingModel (casing ).getQuads (state , side , rand , extraData , renderType ));
141- // Machine overlays
135+
142136 TextureAtlasSprite sprite = getSprite (sprites , side , data .frontDirection , false );
143137 if (sprite != null ) {
144- quads .add (ModelHelper .bakeSprite (vc , side , sprite , -Z_OFFSET ));
138+ quads .add (ModelHelper .bakeSprite (vertexConsumer , side , sprite , -Z_OFFSET ));
145139 }
146140 }
147141
148- // Output overlays
149142 if (data .outputDirection != null && side == data .outputDirection ) {
150- quads .add (ModelHelper .bakeSprite (vc , data .outputDirection , sprites [24 ], -3 * Z_OFFSET ));
143+ quads .add (ModelHelper .bakeSprite (vertexConsumer , data .outputDirection , sprites [outputOverlayIndexes [ 0 ] ], -3 * Z_OFFSET ));
151144 if (data .itemAutoExtract ) {
152- quads .add (ModelHelper .bakeSprite (vc , data .outputDirection , sprites [25 ], -3 * Z_OFFSET ));
145+ quads .add (ModelHelper .bakeSprite (vertexConsumer , data .outputDirection , sprites [outputOverlayIndexes [ 1 ] ], -3 * Z_OFFSET ));
153146 }
154147 if (data .fluidAutoExtract ) {
155- quads .add (ModelHelper .bakeSprite (vc , data .outputDirection , sprites [26 ], -3 * Z_OFFSET ));
148+ quads .add (ModelHelper .bakeSprite (vertexConsumer , data .outputDirection , sprites [outputOverlayIndexes [ 2 ] ], -3 * Z_OFFSET ));
156149 }
157150 }
158151
159152 return quads ;
160153 }
161154
155+ @ Override
156+ public @ NotNull List <BakedQuad > getQuads (@ Nullable BlockState state , @ Nullable Direction side , @ NotNull RandomSource rand ,
157+ @ NotNull ModelData extraData , @ Nullable RenderType renderType ) {
158+ var data = extraData .get (MachineModelClientData .KEY );
159+ if (data == null ) {
160+ data = defaultData ;
161+ }
162+
163+ MachineCasing casing = Objects .requireNonNullElse (data .casing , baseCasing );
164+ var sprites = getSprites (casing );
165+
166+ var vc = new QuadBakingVertexConsumer ();
167+
168+ return getQuads (state , side , rand , extraData , renderType , data , casing , sprites , vc );
169+ }
170+
162171 @ Override
163172 public boolean useAmbientOcclusion () {
164173 return true ;
0 commit comments