Skip to content

Commit 9420780

Browse files
authored
Merge pull request #1142 from crunny/develop/1.21.1
Fix Sodium crash on branches/roots (null material NPE)
2 parents 73ae275 + b5ec799 commit 9420780

4 files changed

Lines changed: 58 additions & 11 deletions

File tree

fabric/src/main/java/com/dtteam/dynamictrees/model/baked/BasicBranchBlockBakedModel.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import net.fabricmc.fabric.api.renderer.v1.mesh.*;
66
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
77
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
8+
import net.fabricmc.fabric.api.renderer.v1.material.MaterialFinder;
9+
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
10+
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
811
import net.minecraft.client.renderer.block.model.BakedQuad;
912
import net.minecraft.client.renderer.block.model.BlockElement;
1013
import net.minecraft.client.renderer.block.model.BlockElementFace;
@@ -200,7 +203,7 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
200203
}
201204
for (BakedQuad quad : quads) {
202205
if (quad.getDirection() == face) {
203-
emitQuad(emitter, quad, face);
206+
emitQuad(emitter, quad, face, context);
204207
}
205208
}
206209
}
@@ -214,7 +217,7 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
214217
if (sleeveQuads != null) {
215218
for (BakedQuad quad : sleeveQuads) {
216219
if (quad.getDirection() == face) {
217-
emitQuad(emitter, quad, face);
220+
emitQuad(emitter, quad, face, context);
218221
}
219222
}
220223
}
@@ -224,8 +227,17 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
224227
}
225228
}
226229

227-
protected void emitQuad(QuadEmitter emitter, BakedQuad quad, Direction cullFace) {
228-
emitter.fromVanilla(quad, null, cullFace);
230+
protected void emitQuad(QuadEmitter emitter, BakedQuad quad, Direction cullFace, RenderContext context) {
231+
var renderer = RendererAccess.INSTANCE.getRenderer();
232+
233+
MaterialFinder finder = renderer.materialFinder();
234+
235+
finder.disableAo(0, true);
236+
finder.disableDiffuse(0, true);
237+
238+
RenderMaterial material = finder.find();
239+
240+
emitter.fromVanilla(quad, material, cullFace);
229241
emitter.emit();
230242
}
231243

fabric/src/main/java/com/dtteam/dynamictrees/model/baked/BasicRootsBlockBakedModel.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ protected int getRadius(BlockState blockState) {
8585
return super.getRadius(blockState);
8686
}
8787

88-
@Override
8988
protected void emitQuad(QuadEmitter emitter, BakedQuad quad, Direction cullFace) {
9089
emitter.fromVanilla(quad, null, null);
9190
emitter.emit();

fabric/src/main/java/com/dtteam/dynamictrees/model/baked/SurfaceRootBlockBakedModel.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
88
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
99
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
10+
import net.fabricmc.fabric.api.renderer.v1.material.MaterialFinder;
11+
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
12+
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
1013
import net.minecraft.client.renderer.block.model.BakedQuad;
1114
import net.minecraft.client.renderer.block.model.BlockElement;
1215
import net.minecraft.client.renderer.block.model.BlockElementFace;
@@ -254,7 +257,15 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
254257
if (coreQuads != null) {
255258
for (BakedQuad quad : coreQuads) {
256259
if (quad.getDirection() == face) {
257-
emitter.fromVanilla(quad, null, null);
260+
var renderer = RendererAccess.INSTANCE.getRenderer();
261+
MaterialFinder finder = renderer.materialFinder();
262+
263+
finder.disableAo(0, true);
264+
finder.disableDiffuse(0, true);
265+
266+
RenderMaterial material = finder.find();
267+
268+
emitter.fromVanilla(quad, material, null);
258269
emitter.emit();
259270
}
260271
}
@@ -269,15 +280,31 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
269280
if (isGrounded && sleevesQuads[idx][connRadius - 1] != null) {
270281
for (BakedQuad quad : sleevesQuads[idx][connRadius - 1]) {
271282
if (quad.getDirection() == face) {
272-
emitter.fromVanilla(quad, null, null);
283+
var renderer = RendererAccess.INSTANCE.getRenderer();
284+
MaterialFinder finder = renderer.materialFinder();
285+
286+
finder.disableAo(0, true);
287+
finder.disableDiffuse(0, true);
288+
289+
RenderMaterial material = finder.find();
290+
291+
emitter.fromVanilla(quad, material, null);
273292
emitter.emit();
274293
}
275294
}
276295
}
277296
if (connectionLevels[idx] == RootConnections.ConnectionLevel.HIGH && vertsQuads[idx][connRadius - 1] != null) {
278297
for (BakedQuad quad : vertsQuads[idx][connRadius - 1]) {
279298
if (quad.getDirection() == face) {
280-
emitter.fromVanilla(quad, null, null);
299+
var renderer = RendererAccess.INSTANCE.getRenderer();
300+
MaterialFinder finder = renderer.materialFinder();
301+
302+
finder.disableAo(0, true);
303+
finder.disableDiffuse(0, true);
304+
305+
RenderMaterial material = finder.find();
306+
307+
emitter.fromVanilla(quad, material, null);
281308
emitter.emit();
282309
}
283310
}

fabric/src/main/java/com/dtteam/dynamictrees/model/baked/ThickBranchBlockBakedModel.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import com.dtteam.dynamictrees.utility.CoordUtils.Surround;
77
import com.google.common.collect.Maps;
88
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
9+
import net.fabricmc.fabric.api.renderer.v1.material.MaterialFinder;
10+
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
11+
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
912
import net.minecraft.client.renderer.block.model.BakedQuad;
1013
import net.minecraft.client.renderer.block.model.BlockElement;
1114
import net.minecraft.client.renderer.block.model.BlockElementFace;
@@ -196,12 +199,18 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
196199
int radiusIndex = coreRadius - 9;
197200
if (radiusIndex < 0 || radiusIndex >= trunksBarkQuads.length) return;
198201

202+
var renderer = RendererAccess.INSTANCE.getRenderer();
203+
MaterialFinder finder = renderer.materialFinder();
204+
finder.disableAo(0, true);
205+
finder.disableDiffuse(0, true);
206+
RenderMaterial material = finder.find();
207+
199208
for (Direction face : Direction.values()) {
200209
List<BakedQuad> barkQuads = trunksBarkQuads[radiusIndex];
201210
if (barkQuads != null) {
202211
for (BakedQuad quad : barkQuads) {
203212
if (quad.getDirection() == face) {
204-
emitter.fromVanilla(quad, null, face);
213+
emitter.fromVanilla(quad, material, face);
205214
emitter.emit();
206215
}
207216
}
@@ -213,7 +222,7 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
213222
if (ringQuads != null) {
214223
for (BakedQuad quad : ringQuads) {
215224
if (quad.getDirection() == face) {
216-
emitter.fromVanilla(quad, null, face);
225+
emitter.fromVanilla(quad, material, face);
217226
emitter.emit();
218227
}
219228
}
@@ -223,7 +232,7 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block
223232
if (topBarkQuads != null) {
224233
for (BakedQuad quad : topBarkQuads) {
225234
if (quad.getDirection() == face) {
226-
emitter.fromVanilla(quad, null, face);
235+
emitter.fromVanilla(quad, material, face);
227236
emitter.emit();
228237
}
229238
}

0 commit comments

Comments
 (0)