Skip to content

Commit cbc6f7d

Browse files
committed
Fix OverlayQuadFunction race condition
1 parent bc99ba0 commit cbc6f7d

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.block.model.BakedQuad;
@@ -28,8 +29,10 @@
2829
import net.minecraft.util.Mth;
2930

3031
import java.util.List;
32+
import java.util.Optional;
3133
import java.util.function.Function;
3234
import java.util.stream.Collectors;
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.sprite.getName())
75-
.isPresent()
76-
).map(
75+
.flatMap(
7776
(quad) -> {
78-
OverlayMetadata metadata = ((OverlayMetadata) MetadataRegistry.INSTANCE
79-
.metadataFromSpriteName(ModConstants.MOD_ID, quad.sprite.getName())
80-
.get());
77+
Optional<AnalyzedMetadata> metadataOptional = MetadataRegistry.INSTANCE
78+
.metadataFromSpriteName(ModConstants.MOD_ID, quad.sprite.getName());
79+
if (!metadataOptional.isPresent()) {
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)