Skip to content

Commit bb32a48

Browse files
committed
Update SodiumCompat
1 parent 13cd9bf commit bb32a48

File tree

1 file changed

+34
-35
lines changed

1 file changed

+34
-35
lines changed

src/main/java/com/simibubi/create/compat/sodium/SodiumCompat.java

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import java.lang.invoke.MethodHandle;
44
import java.lang.invoke.MethodHandles;
55
import java.lang.invoke.MethodType;
6-
import java.util.Optional;
76
import java.util.function.Consumer;
87
import java.util.function.Function;
98
import java.util.function.Predicate;
9+
import java.util.function.Supplier;
1010

1111
import com.simibubi.create.Create;
1212
import com.simibubi.create.compat.Mods;
@@ -41,34 +41,39 @@ public class SodiumCompat {
4141
public static final ResourceLocation SAW_TEXTURE = Create.asResource("block/saw_reversed");
4242

4343
public static void init() {
44-
if (!Mods.INDIUM.isLoaded()) {
44+
ModContainer container = FabricLoader.getInstance().getModContainer(Mods.SODIUM.id()).orElseThrow();
45+
Version sodiumVersion = container.getMetadata().getVersion();
46+
47+
boolean supportsFRAPI = false;
48+
49+
try {
50+
// Any 0.6.0 version or alpha/beta for it
51+
supportsFRAPI = VersionPredicate.parse("~0.6.0-")
52+
.test(sodiumVersion);
53+
} catch (VersionParsingException ignored) {}
54+
55+
// If the sodium version is 0.6.0* then it natively supports FRAPI
56+
if (!Mods.INDIUM.isLoaded() && !supportsFRAPI) {
4557
ClientPlayConnectionEvents.JOIN.register(SodiumCompat::sendNoIndiumWarning);
4658
}
4759

4860
boolean compatInitialized = false;
4961

50-
Optional<ModContainer> containerOptional = FabricLoader.getInstance()
51-
.getModContainer(Mods.SODIUM.id());
52-
53-
if (containerOptional.isPresent()) {
54-
Version sodiumVersion = containerOptional.get()
55-
.getMetadata()
56-
.getVersion();
57-
58-
for (SpriteUtilCompat value : SpriteUtilCompat.values()) {
59-
if (value.doesWork.test(sodiumVersion)) {
60-
Minecraft mc = Minecraft.getInstance();
61-
WorldRenderEvents.START.register(ctx -> {
62-
Function<ResourceLocation, TextureAtlasSprite> atlas = mc.getTextureAtlas(InventoryMenu.BLOCK_ATLAS);
63-
TextureAtlasSprite sawSprite = atlas.apply(SAW_TEXTURE);
64-
value.markSpriteAsActive.accept(sawSprite);
65-
});
66-
compatInitialized = true;
67-
break;
68-
}
62+
63+
for (SpriteUtilCompat value : SpriteUtilCompat.values()) {
64+
if (value.doesWork.test(sodiumVersion)) {
65+
Minecraft mc = Minecraft.getInstance();
66+
WorldRenderEvents.START.register(ctx -> {
67+
Function<ResourceLocation, TextureAtlasSprite> atlas = mc.getTextureAtlas(InventoryMenu.BLOCK_ATLAS);
68+
TextureAtlasSprite sawSprite = atlas.apply(SAW_TEXTURE);
69+
value.markSpriteAsActive.get().accept(sawSprite);
70+
});
71+
compatInitialized = true;
72+
break;
6973
}
7074
}
7175

76+
7277
if (!compatInitialized) {
7378
Create.LOGGER.error("Create's Sodium compat errored and has been partially disabled. Report this!");
7479
}
@@ -102,29 +107,21 @@ private enum SpriteUtilCompat {
102107
} catch (Throwable ignored) {
103108
return false;
104109
}
105-
}, (sawSprite) -> {
106-
try {
107-
invokeOld(sawSprite);
108-
} catch (Throwable ignored) {}
109-
}),
110+
}, () -> SpriteUtilCompat::invokeOld),
110111
V0_6_API((version) -> {
111112
try {
112113
return VersionPredicate.parse(">=0.6.0-beta.3").test(version);
113114
} catch (VersionParsingException e) {
114115
return false;
115116
}
116-
}, (sawSprite) -> {
117-
try {
118-
SpriteUtil.INSTANCE.markSpriteActive(sawSprite);
119-
} catch (Throwable ignored) {}
120-
});
117+
}, () -> SpriteUtil.INSTANCE::markSpriteActive);
121118

122119
private static MethodHandle markSpriteActiveHandle;
123120

124121
private final Predicate<Version> doesWork;
125-
private final Consumer<TextureAtlasSprite> markSpriteAsActive;
122+
private final Supplier<Consumer<TextureAtlasSprite>> markSpriteAsActive;
126123

127-
SpriteUtilCompat(Predicate<Version> doesWork, Consumer<TextureAtlasSprite> markSpriteAsActive) {
124+
SpriteUtilCompat(Predicate<Version> doesWork, Supplier<Consumer<TextureAtlasSprite>> markSpriteAsActive) {
128125
this.doesWork = doesWork;
129126
this.markSpriteAsActive = markSpriteAsActive;
130127
}
@@ -138,8 +135,10 @@ private enum SpriteUtilCompat {
138135
} catch (Throwable ignored) {}
139136
}
140137

141-
public static void invokeOld(TextureAtlasSprite sawSprite) throws Throwable {
142-
markSpriteActiveHandle.invoke(sawSprite);
138+
public static void invokeOld(TextureAtlasSprite sawSprite) {
139+
try {
140+
markSpriteActiveHandle.invoke(sawSprite);
141+
} catch(Throwable ignored) {}
143142
}
144143
}
145144
}

0 commit comments

Comments
 (0)