|
56 | 56 | import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; |
57 | 57 | import net.fabricmc.loader.api.FabricLoader; |
58 | 58 | import net.fabricmc.loader.api.ModContainer; |
| 59 | +import net.fabricmc.loader.api.Version; |
| 60 | +import net.fabricmc.loader.api.metadata.ModMetadata; |
| 61 | +import net.fabricmc.loader.api.metadata.version.VersionPredicate; |
59 | 62 | import net.minecraft.commands.CommandBuildContext; |
60 | 63 | import net.minecraft.commands.CommandSourceStack; |
61 | 64 | import net.minecraft.commands.Commands; |
@@ -205,10 +208,22 @@ private void registerCommands(CommandDispatcher<CommandSourceStack> dispatcher, |
205 | 208 | private FabricPermissionsProvider getInitialPermissionsProvider() { |
206 | 209 | try { |
207 | 210 | Class.forName("me.lucko.fabric.api.permissions.v0.Permissions", false, getClass().getClassLoader()); |
| 211 | + Optional<Version> version = FabricLoader.getInstance().getModContainer("fabric-permissions-api-v0") |
| 212 | + .map(ModContainer::getMetadata) |
| 213 | + .map(ModMetadata::getVersion); |
| 214 | + |
| 215 | + if (version.isPresent() && !VersionPredicate.parse(">=0.3.3").test(version.get())) { |
| 216 | + throw new RuntimeException("Fabric permissions version " + version.get() + " is not supported. Please update Fabric Permissions API"); |
| 217 | + } |
| 218 | + |
208 | 219 | return new FabricPermissionsProvider.LuckoFabricPermissionsProvider(platform); |
209 | 220 | } catch (ClassNotFoundException ignored) { |
210 | 221 | // fallback to vanilla |
| 222 | + } catch (Throwable e) { |
| 223 | + // catch any exception to prevent crashing the server, but still print a warning |
| 224 | + LOGGER.warn("Failed to load Fabric permissions provider. Falling back to Minecraft", e); |
211 | 225 | } |
| 226 | + |
212 | 227 | return new FabricPermissionsProvider.VanillaPermissionsProvider(platform); |
213 | 228 | } |
214 | 229 |
|
|
0 commit comments