Skip to content

Commit 5b37c40

Browse files
committed
Fix OverlayQuadFunction race condition
1 parent 2094d1b commit 5b37c40

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
import static java.util.Objects.requireNonNull;
3538

@@ -74,23 +77,22 @@ public OverlayQuadFunction(OverlayBakedQuad.Builder quadBuilder) {
7477
@Override
7578
public List<BakedQuad> apply(List<BakedQuad> quads) {
7679
return quads.stream()
77-
.filter(
78-
(quad) -> MetadataRegistry.INSTANCE
79-
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName())
80-
.isPresent()
81-
).map(
80+
.flatMap(
8281
(quad) -> {
83-
OverlayMetadata metadata = ((OverlayMetadata) MetadataRegistry.INSTANCE
84-
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName())
85-
.orElseThrow());
82+
Optional<AnalyzedMetadata> metadataOptional = MetadataRegistry.INSTANCE
83+
.metadataFromSpriteName(ModConstants.MOD_ID, quad.getSprite().getName());
84+
if (metadataOptional.isEmpty()) {
85+
return Stream.of();
86+
}
8687

88+
OverlayMetadata metadata = (OverlayMetadata) metadataOptional.get();
8789
TextureAtlasSprite sprite = MODEL_MANAGER
8890
.getAtlas(TextureAtlas.LOCATION_BLOCKS)
8991
.getSprite(metadata.overlaySpriteName());
9092

9193
/* We have to cast because Minecraft's BakedModel interface expects a List<BakedQuad>,
9294
not List<? extends BakedQuad>. */
93-
return (BakedQuad) QUAD_BUILDER.build(
95+
return Stream.of((BakedQuad) QUAD_BUILDER.build(
9496
makeOverlayVertexData(
9597
quad.getVertices(),
9698
sprite,
@@ -101,7 +103,7 @@ public List<BakedQuad> apply(List<BakedQuad> quads) {
101103
quad.getDirection(),
102104
sprite,
103105
metadata.isEmissive()
104-
);
106+
));
105107

106108
}
107109
)

0 commit comments

Comments
 (0)