Skip to content

Commit a2a0210

Browse files
committed
Merge branch '1.20.1/dev' into 1.21.1/dev
# Conflicts: # fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java # fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBakedModelBuilder.java # fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java # fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMeshEmitterManager.java # fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java # forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java # forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java # neoforge/build.gradle.kts # neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java # neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ChunkLayerSortedListBuilder.java # neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMeshEmitter.java # neoforge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MeshEmitter.java # neoforge/src/main/resources/flywheel.impl.forge.mixins.json
2 parents d28281c + d9f7855 commit a2a0210

File tree

29 files changed

+674
-501
lines changed

29 files changed

+674
-501
lines changed

common/src/api/java/dev/engine_room/flywheel/api/material/Material.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.engine_room.flywheel.api.material;
22

3+
import org.jetbrains.annotations.Nullable;
4+
35
import net.minecraft.resources.ResourceLocation;
46

57
public interface Material {
@@ -52,4 +54,49 @@ public interface Material {
5254
* @return The cardinal lighting mode.
5355
*/
5456
CardinalLightingMode cardinalLightingMode();
57+
58+
/**
59+
* Whether this material should receive ambient occlusion from nearby chunk geometry.
60+
*
61+
* @return {@code true} if this material should receive ambient occlusion.
62+
*/
63+
default boolean ambientOcclusion() {
64+
return true;
65+
}
66+
67+
/**
68+
* Check for field-wise equality between this Material and another.
69+
*
70+
* @param other The nullable material to check equality against.
71+
* @return True if the materials represent the same configuration.
72+
*/
73+
default boolean equals(@Nullable Material other) {
74+
if (this == other) {
75+
return true;
76+
}
77+
78+
if (other == null) {
79+
return false;
80+
}
81+
82+
// @formatter:off
83+
return this.blur() == other.blur()
84+
&& this.mipmap() == other.mipmap()
85+
&& this.backfaceCulling() == other.backfaceCulling()
86+
&& this.polygonOffset() == other.polygonOffset()
87+
&& this.depthTest() == other.depthTest()
88+
&& this.transparency() == other.transparency()
89+
&& this.writeMask() == other.writeMask()
90+
&& this.useOverlay() == other.useOverlay()
91+
&& this.useLight() == other.useLight()
92+
&& this.cardinalLightingMode() == other.cardinalLightingMode()
93+
&& this.ambientOcclusion() == other.ambientOcclusion()
94+
&& this.shaders().fragmentSource().equals(other.shaders().fragmentSource())
95+
&& this.shaders().vertexSource().equals(other.shaders().vertexSource())
96+
&& this.fog().source().equals(other.fog().source())
97+
&& this.cutout().source().equals(other.cutout().source())
98+
&& this.light().source().equals(other.light().source())
99+
&& this.texture().equals(other.texture());
100+
// @formatter:on
101+
}
55102
}

common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialEncoder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public final class MaterialEncoder {
2121
private static final int USE_OVERLAY_LENGTH = 1;
2222
private static final int USE_LIGHT_LENGTH = 1;
2323
private static final int CARDINAL_LIGHTING_MODE_LENGTH = Mth.ceillog2(CardinalLightingMode.values().length);
24+
private static final int AMBIENT_OCCLUSION_LENGTH = 1;
2425

2526
// The bit offset of each property
2627
private static final int BLUR_OFFSET = 0;
@@ -33,6 +34,7 @@ public final class MaterialEncoder {
3334
private static final int USE_OVERLAY_OFFSET = WRITE_MASK_OFFSET + WRITE_MASK_LENGTH;
3435
private static final int USE_LIGHT_OFFSET = USE_OVERLAY_OFFSET + USE_OVERLAY_LENGTH;
3536
private static final int CARDINAL_LIGHTING_MODE_OFFSET = USE_LIGHT_OFFSET + USE_LIGHT_LENGTH;
37+
private static final int AMBIENT_OCCLUSION_OFFSET = CARDINAL_LIGHTING_MODE_OFFSET + CARDINAL_LIGHTING_MODE_LENGTH;
3638

3739
// The bit mask for each property
3840
private static final int BLUR_MASK = bitMask(BLUR_LENGTH, BLUR_OFFSET);
@@ -45,6 +47,7 @@ public final class MaterialEncoder {
4547
private static final int USE_OVERLAY_MASK = bitMask(USE_OVERLAY_LENGTH, USE_OVERLAY_OFFSET);
4648
private static final int USE_LIGHT_MASK = bitMask(USE_LIGHT_LENGTH, USE_LIGHT_OFFSET);
4749
private static final int CARDINAL_LIGHTING_MODE_MASK = bitMask(CARDINAL_LIGHTING_MODE_LENGTH, CARDINAL_LIGHTING_MODE_OFFSET);
50+
private static final int AMBIENT_OCCLUSION_MASK = bitMask(AMBIENT_OCCLUSION_LENGTH, AMBIENT_OCCLUSION_OFFSET);
4851

4952
private MaterialEncoder() {
5053
}
@@ -60,7 +63,7 @@ public static int packUberShader(Material material) {
6063
}
6164

6265
// Packed format:
63-
// cardinalLightingMode[2] | useLight[1] | useOverlay[1] | writeMask[2] | transparency[3] | depthTest[4] | polygonOffset[1] | backfaceCulling[1] | mipmap[1] | blur[1]
66+
// ambientOcclusion[1] | cardinalLightingMode[2] | useLight[1] | useOverlay[1] | writeMask[2] | transparency[3] | depthTest[4] | polygonOffset[1] | backfaceCulling[1] | mipmap[1] | blur[1]
6467
public static int packProperties(Material material) {
6568
int bits = 0;
6669

@@ -75,6 +78,7 @@ public static int packProperties(Material material) {
7578
if (material.useLight()) bits |= USE_LIGHT_MASK;
7679
bits |= (material.cardinalLightingMode()
7780
.ordinal() << CARDINAL_LIGHTING_MODE_OFFSET) & CARDINAL_LIGHTING_MODE_MASK;
81+
if (material.ambientOcclusion()) bits |= AMBIENT_OCCLUSION_MASK;
7882

7983
return bits;
8084
}

common/src/backend/java/dev/engine_room/flywheel/backend/engine/MaterialRenderState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public static boolean materialEquals(Material lhs, Material rhs) {
188188
return true;
189189
}
190190

191-
// Not here because ubershader: useLight, useOverlay, diffuse, fog shader
191+
// Not here because ubershader: useLight, useOverlay, diffuse, fog shader, ambient occlusion
192192
// Everything in the comparator should be here.
193193
// @formatter:off
194194
return lhs.blur() == rhs.blur()

common/src/backend/resources/assets/flywheel/flywheel/internal/material.glsl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ struct FlwMaterial {
3434
bool useOverlay;
3535
bool useLight;
3636
uint cardinalLightingMode;
37+
bool ambientOcclusion;
3738
};

common/src/backend/resources/assets/flywheel/flywheel/internal/packed_material.glsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const uint _FLW_WRITE_MASK_LENGTH = 2u;
99
const uint _FLW_USE_OVERLAY_LENGTH = 1u;
1010
const uint _FLW_USE_LIGHT_LENGTH = 1u;
1111
const uint _FLW_CARDINAL_LIGHTING_MODE_LENGTH = 2u;
12+
const uint _FLW_AMBIENT_OCCLUSION_LENGTH = 1u;
1213

1314
// The bit offset of each property
1415
const uint _FLW_BLUR_OFFSET = 0u;
@@ -21,6 +22,7 @@ const uint _FLW_WRITE_MASK_OFFSET = _FLW_TRANSPARENCY_OFFSET + _FLW_TRANSPARENCY
2122
const uint _FLW_USE_OVERLAY_OFFSET = _FLW_WRITE_MASK_OFFSET + _FLW_WRITE_MASK_LENGTH;
2223
const uint _FLW_USE_LIGHT_OFFSET = _FLW_USE_OVERLAY_OFFSET + _FLW_USE_OVERLAY_LENGTH;
2324
const uint _FLW_CARDINAL_LIGHTING_MODE_OFFSET = _FLW_USE_LIGHT_OFFSET + _FLW_USE_LIGHT_LENGTH;
25+
const uint _FLW_AMBIENT_OCCLUSION_OFFSET = _FLW_CARDINAL_LIGHTING_MODE_OFFSET + _FLW_CARDINAL_LIGHTING_MODE_LENGTH;
2426

2527
// The bit mask for each property
2628
const uint _FLW_BLUR_MASK = ((1u << _FLW_BLUR_LENGTH) - 1u) << _FLW_BLUR_OFFSET;
@@ -33,9 +35,10 @@ const uint _FLW_WRITE_MASK_MASK = ((1u << _FLW_WRITE_MASK_LENGTH) - 1u) << _FLW_
3335
const uint _FLW_USE_OVERLAY_MASK = ((1u << _FLW_USE_OVERLAY_LENGTH) - 1u) << _FLW_USE_OVERLAY_OFFSET;
3436
const uint _FLW_USE_LIGHT_MASK = ((1u << _FLW_USE_LIGHT_LENGTH) - 1u) << _FLW_USE_LIGHT_OFFSET;
3537
const uint _FLW_CARDINAL_LIGHTING_MODE_MASK = ((1u << _FLW_CARDINAL_LIGHTING_MODE_LENGTH) - 1u) << _FLW_CARDINAL_LIGHTING_MODE_OFFSET;
38+
const uint _FLW_AMBIENT_OCCLUSION_MASK = ((1u << _FLW_AMBIENT_OCCLUSION_LENGTH) - 1u) << _FLW_AMBIENT_OCCLUSION_OFFSET;
3639

3740
// Packed format:
38-
// cardinalLightingMode[2] | useLight[1] | useOverlay[1] | writeMask[2] | transparency[3] | depthTest[4] | polygonOffset[1] | backfaceCulling[1] | mipmap[1] | blur[1]
41+
// ambientOcclusion[1] | cardinalLightingMode[2] | useLight[1] | useOverlay[1] | writeMask[2] | transparency[3] | depthTest[4] | polygonOffset[1] | backfaceCulling[1] | mipmap[1] | blur[1]
3942
void _flw_unpackMaterialProperties(uint p, out FlwMaterial m) {
4043
m.blur = (p & _FLW_BLUR_MASK) != 0u;
4144
m.mipmap = (p & _FLW_MIPMAP_MASK) != 0u;
@@ -47,6 +50,7 @@ void _flw_unpackMaterialProperties(uint p, out FlwMaterial m) {
4750
m.useOverlay = (p & _FLW_USE_OVERLAY_MASK) != 0u;
4851
m.useLight = (p & _FLW_USE_LIGHT_MASK) != 0u;
4952
m.cardinalLightingMode = (p & _FLW_CARDINAL_LIGHTING_MODE_MASK) >> _FLW_CARDINAL_LIGHTING_MODE_OFFSET;
53+
m.ambientOcclusion = (p & _FLW_AMBIENT_OCCLUSION_MASK) != 0;
5054
}
5155

5256
void _flw_unpackUint2x16(uint s, out uint hi, out uint lo) {

common/src/lib/java/dev/engine_room/flywheel/lib/material/Materials.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,43 +10,37 @@
1010
public final class Materials {
1111
public static final Material SOLID_BLOCK = SimpleMaterial.builder()
1212
.build();
13-
public static final Material SOLID_UNSHADED_BLOCK = SimpleMaterial.builder()
13+
public static final Material SOLID_UNSHADED_BLOCK = SimpleMaterial.builderOf(SOLID_BLOCK)
1414
.cardinalLightingMode(CardinalLightingMode.OFF)
1515
.build();
1616

1717
public static final Material CUTOUT_MIPPED_BLOCK = SimpleMaterial.builder()
1818
.cutout(CutoutShaders.HALF)
1919
.build();
20-
public static final Material CUTOUT_MIPPED_UNSHADED_BLOCK = SimpleMaterial.builder()
21-
.cutout(CutoutShaders.HALF)
20+
public static final Material CUTOUT_MIPPED_UNSHADED_BLOCK = SimpleMaterial.builderOf(CUTOUT_MIPPED_BLOCK)
2221
.cardinalLightingMode(CardinalLightingMode.OFF)
2322
.build();
2423

2524
public static final Material CUTOUT_BLOCK = SimpleMaterial.builder()
2625
.cutout(CutoutShaders.ONE_TENTH)
2726
.mipmap(false)
2827
.build();
29-
public static final Material CUTOUT_UNSHADED_BLOCK = SimpleMaterial.builder()
30-
.cutout(CutoutShaders.ONE_TENTH)
31-
.mipmap(false)
28+
public static final Material CUTOUT_UNSHADED_BLOCK = SimpleMaterial.builderOf(CUTOUT_BLOCK)
3229
.cardinalLightingMode(CardinalLightingMode.OFF)
3330
.build();
3431

3532
public static final Material TRANSLUCENT_BLOCK = SimpleMaterial.builder()
3633
.transparency(Transparency.ORDER_INDEPENDENT)
3734
.build();
38-
public static final Material TRANSLUCENT_UNSHADED_BLOCK = SimpleMaterial.builder()
39-
.transparency(Transparency.ORDER_INDEPENDENT)
35+
public static final Material TRANSLUCENT_UNSHADED_BLOCK = SimpleMaterial.builderOf(TRANSLUCENT_BLOCK)
4036
.cardinalLightingMode(CardinalLightingMode.OFF)
4137
.build();
4238

4339
public static final Material TRIPWIRE_BLOCK = SimpleMaterial.builder()
4440
.cutout(CutoutShaders.ONE_TENTH)
4541
.transparency(Transparency.ORDER_INDEPENDENT)
4642
.build();
47-
public static final Material TRIPWIRE_UNSHADED_BLOCK = SimpleMaterial.builder()
48-
.cutout(CutoutShaders.ONE_TENTH)
49-
.transparency(Transparency.ORDER_INDEPENDENT)
43+
public static final Material TRIPWIRE_UNSHADED_BLOCK = SimpleMaterial.builderOf(TRIPWIRE_BLOCK)
5044
.cardinalLightingMode(CardinalLightingMode.OFF)
5145
.build();
5246

common/src/lib/java/dev/engine_room/flywheel/lib/material/SimpleMaterial.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public class SimpleMaterial implements Material {
3232
protected final boolean useLight;
3333
protected final CardinalLightingMode cardinalLightingMode;
3434

35+
protected final boolean ambientOcclusion;
36+
3537
protected SimpleMaterial(Builder builder) {
3638
shaders = builder.shaders();
3739
fog = builder.fog();
@@ -48,6 +50,7 @@ protected SimpleMaterial(Builder builder) {
4850
useOverlay = builder.useOverlay();
4951
useLight = builder.useLight();
5052
cardinalLightingMode = builder.cardinalLightingMode();
53+
ambientOcclusion = builder.ambientOcclusion();
5154
}
5255

5356
public static Builder builder() {
@@ -133,6 +136,11 @@ public CardinalLightingMode cardinalLightingMode() {
133136
return cardinalLightingMode;
134137
}
135138

139+
@Override
140+
public boolean ambientOcclusion() {
141+
return ambientOcclusion;
142+
}
143+
136144
public static class Builder implements Material {
137145
protected MaterialShaders shaders;
138146
protected FogShader fog;
@@ -153,6 +161,8 @@ public static class Builder implements Material {
153161
protected boolean useLight;
154162
protected CardinalLightingMode cardinalLightingMode;
155163

164+
protected boolean ambientOcclusion;
165+
156166
public Builder() {
157167
shaders = StandardMaterialShaders.DEFAULT;
158168
fog = FogShaders.LINEAR;
@@ -169,6 +179,7 @@ public Builder() {
169179
useOverlay = true;
170180
useLight = true;
171181
cardinalLightingMode = CardinalLightingMode.ENTITY;
182+
ambientOcclusion = true;
172183
}
173184

174185
public Builder(Material material) {
@@ -191,6 +202,7 @@ public Builder copyFrom(Material material) {
191202
useOverlay = material.useOverlay();
192203
useLight = material.useLight();
193204
cardinalLightingMode = material.cardinalLightingMode();
205+
ambientOcclusion = material.ambientOcclusion();
194206
return this;
195207
}
196208

@@ -277,6 +289,11 @@ public Builder cardinalLightingMode(CardinalLightingMode value) {
277289
return this;
278290
}
279291

292+
public Builder ambientOcclusion(boolean ambientOcclusion) {
293+
this.ambientOcclusion = ambientOcclusion;
294+
return this;
295+
}
296+
280297
@Override
281298
public MaterialShaders shaders() {
282299
return shaders;
@@ -352,6 +369,11 @@ public CardinalLightingMode cardinalLightingMode() {
352369
return cardinalLightingMode;
353370
}
354371

372+
@Override
373+
public boolean ambientOcclusion() {
374+
return ambientOcclusion;
375+
}
376+
355377
public SimpleMaterial build() {
356378
return new SimpleMaterial(this);
357379
}

common/src/lib/java/dev/engine_room/flywheel/lib/model/ModelUtil.java

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import org.joml.Vector3f;
77
import org.joml.Vector4f;
88

9+
import dev.engine_room.flywheel.api.material.CardinalLightingMode;
910
import dev.engine_room.flywheel.api.material.Material;
1011
import dev.engine_room.flywheel.api.model.Mesh;
1112
import dev.engine_room.flywheel.api.model.Model;
1213
import dev.engine_room.flywheel.api.vertex.VertexList;
1314
import dev.engine_room.flywheel.lib.material.Materials;
15+
import dev.engine_room.flywheel.lib.material.SimpleMaterial;
1416
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
1517
import dev.engine_room.flywheel.lib.vertex.PosVertexView;
1618
import net.minecraft.client.renderer.RenderType;
@@ -19,32 +21,62 @@
1921
public final class ModelUtil {
2022
private static final float BOUNDING_SPHERE_EPSILON = 1e-4f;
2123

24+
private static final RenderType[] CHUNK_LAYERS = new RenderType[]{RenderType.solid(), RenderType.cutoutMipped(), RenderType.cutout(), RenderType.translucent(), RenderType.tripwire()};
25+
26+
// Array of chunk materials to make lookups easier.
27+
// Index by (renderTypeIdx * 4 + shaded * 2 + ambientOcclusion).
28+
private static final Material[] CHUNK_MATERIALS = new Material[20];
29+
30+
static {
31+
Material[] baseChunkMaterials = new Material[]{Materials.SOLID_BLOCK, Materials.CUTOUT_MIPPED_BLOCK, Materials.CUTOUT_BLOCK, Materials.TRANSLUCENT_BLOCK, Materials.TRIPWIRE_BLOCK,};
32+
for (int chunkLayerIdx = 0; chunkLayerIdx < CHUNK_LAYERS.length; chunkLayerIdx++) {
33+
int baseMaterialIdx = chunkLayerIdx * 4;
34+
Material baseChunkMaterial = baseChunkMaterials[chunkLayerIdx];
35+
36+
// shaded: false, ambientOcclusion: false
37+
CHUNK_MATERIALS[baseMaterialIdx] = SimpleMaterial.builderOf(baseChunkMaterial)
38+
.cardinalLightingMode(CardinalLightingMode.OFF)
39+
.ambientOcclusion(false)
40+
.build();
41+
// shaded: false, ambientOcclusion: true
42+
CHUNK_MATERIALS[baseMaterialIdx + 1] = SimpleMaterial.builderOf(baseChunkMaterial)
43+
.cardinalLightingMode(CardinalLightingMode.OFF)
44+
.build();
45+
// shaded: true, ambientOcclusion: false
46+
CHUNK_MATERIALS[baseMaterialIdx + 2] = SimpleMaterial.builderOf(baseChunkMaterial)
47+
.ambientOcclusion(false)
48+
.build();
49+
// shaded: true, ambientOcclusion: true
50+
CHUNK_MATERIALS[baseMaterialIdx + 3] = baseChunkMaterial;
51+
}
52+
}
53+
2254
private ModelUtil() {
2355
}
2456

2557
@Nullable
2658
public static Material getMaterial(RenderType chunkRenderType, boolean shaded) {
27-
if (chunkRenderType == RenderType.solid()) {
28-
return shaded ? Materials.SOLID_BLOCK : Materials.SOLID_UNSHADED_BLOCK;
29-
}
30-
if (chunkRenderType == RenderType.cutoutMipped()) {
31-
return shaded ? Materials.CUTOUT_MIPPED_BLOCK : Materials.CUTOUT_MIPPED_UNSHADED_BLOCK;
32-
}
33-
if (chunkRenderType == RenderType.cutout()) {
34-
return shaded ? Materials.CUTOUT_BLOCK : Materials.CUTOUT_UNSHADED_BLOCK;
35-
}
36-
if (chunkRenderType == RenderType.translucent()) {
37-
return shaded ? Materials.TRANSLUCENT_BLOCK : Materials.TRANSLUCENT_UNSHADED_BLOCK;
38-
}
39-
if (chunkRenderType == RenderType.tripwire()) {
40-
return shaded ? Materials.TRIPWIRE_BLOCK : Materials.TRIPWIRE_UNSHADED_BLOCK;
59+
return getMaterial(chunkRenderType, shaded, true);
60+
}
61+
62+
@Nullable
63+
public static Material getMaterial(RenderType chunkRenderType, boolean shaded, boolean ambientOcclusion) {
64+
for (int chunkLayerIdx = 0; chunkLayerIdx < CHUNK_LAYERS.length; ++chunkLayerIdx) {
65+
if (chunkRenderType == CHUNK_LAYERS[chunkLayerIdx]) {
66+
int shadedIdx = shaded ? 1 : 0;
67+
int ambientOcclusionIdx = ambientOcclusion ? 1 : 0;
68+
69+
int materialIdx = chunkLayerIdx * 4 + shadedIdx * 2 + ambientOcclusionIdx;
70+
71+
return CHUNK_MATERIALS[materialIdx];
72+
}
4173
}
4274
return null;
4375
}
4476

4577
@Nullable
4678
public static Material getItemMaterial(RenderType renderType) {
47-
var chunkMaterial = getMaterial(renderType, true);
79+
var chunkMaterial = getMaterial(renderType, true, false);
4880

4981
if (chunkMaterial != null) {
5082
return chunkMaterial;

common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBuilder.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public final class BakedModelBuilder {
2424
@Nullable
2525
PoseStack poseStack;
2626
@Nullable
27-
BiFunction<RenderType, Boolean, Material> materialFunc;
27+
BlockMaterialFunction materialFunc;
2828

2929
public BakedModelBuilder(BakedModel bakedModel) {
3030
this.bakedModel = bakedModel;
@@ -45,7 +45,17 @@ public BakedModelBuilder poseStack(@Nullable PoseStack poseStack) {
4545
return this;
4646
}
4747

48-
public BakedModelBuilder materialFunc(@Nullable BiFunction<RenderType, Boolean, Material> materialFunc) {
48+
@Deprecated(forRemoval = true)
49+
public BakedModelBuilder materialFunc(@Nullable BiFunction<RenderType, Boolean, @Nullable Material> materialFunc) {
50+
if (materialFunc != null) {
51+
this.materialFunc = (chunkRenderType, shaded, ambientOcclusion) -> materialFunc.apply(chunkRenderType, shaded);
52+
} else {
53+
this.materialFunc = null;
54+
}
55+
return this;
56+
}
57+
58+
public BakedModelBuilder materialFunc(@Nullable BlockMaterialFunction materialFunc) {
4959
this.materialFunc = materialFunc;
5060
return this;
5161
}

0 commit comments

Comments
 (0)