Skip to content

Commit 3e53934

Browse files
committed
Fix OverlayQuadFunction race condition
1 parent 4064e73 commit 3e53934

1 file changed

Lines changed: 12 additions & 10 deletions

File tree

common/src/main/java/io/github/moremcmeta/emissiveplugin/model/OverlayQuadFunction.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import io.github.moremcmeta.emissiveplugin.ModConstants;
2121
import io.github.moremcmeta.emissiveplugin.metadata.OverlayMetadata;
22+
import io.github.moremcmeta.moremcmeta.api.client.metadata.AnalyzedMetadata;
2223
import io.github.moremcmeta.moremcmeta.api.client.metadata.MetadataRegistry;
2324
import net.minecraft.client.Minecraft;
2425
import net.minecraft.client.renderer.LightTexture;
@@ -29,7 +30,9 @@
2930
import net.minecraft.util.Mth;
3031

3132
import java.util.List;
33+
import java.util.Optional;
3234
import java.util.function.Function;
35+
import java.util.stream.Stream;
3336

3437
/**
3538
* From a list of original {@link BakedQuad}s, produces a list of overlay quads that should be rendered
@@ -69,23 +72,22 @@ public OverlayQuadFunction() {
6972
@Override
7073
public List<BakedQuad> apply(List<BakedQuad> quads) {
7174
return quads.stream()
72-
.filter(
73-
(quad) -> MetadataRegistry.INSTANCE
74-
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName())
75-
.isPresent()
76-
).map(
75+
.flatMap(
7776
(quad) -> {
78-
OverlayMetadata metadata = ((OverlayMetadata) MetadataRegistry.INSTANCE
79-
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName())
80-
.orElseThrow());
77+
Optional<AnalyzedMetadata> metadataOptional = MetadataRegistry.INSTANCE
78+
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName());
79+
if (metadataOptional.isEmpty()) {
80+
return Stream.of();
81+
}
8182

83+
OverlayMetadata metadata = (OverlayMetadata) metadataOptional.get();
8284
TextureAtlasSprite sprite = MODEL_MANAGER
8385
.getAtlas(TextureAtlas.LOCATION_BLOCKS)
8486
.getSprite(metadata.overlaySpriteName());
8587

8688
/* We have to cast because Minecraft's BakedModel interface expects a List<BakedQuad>,
8789
not List<? extends BakedQuad>. */
88-
return (BakedQuad) new OverlayBakedQuad(
90+
return Stream.of((BakedQuad) new OverlayBakedQuad(
8991
makeOverlayVertexData(
9092
quad.getVertices(),
9193
sprite,
@@ -96,7 +98,7 @@ public List<BakedQuad> apply(List<BakedQuad> quads) {
9698
quad.getDirection(),
9799
sprite,
98100
metadata.isEmissive()
99-
);
101+
));
100102

101103
}
102104
)

0 commit comments

Comments
 (0)