Skip to content

Commit

Permalink
Add Fabric support for the Configured mod
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Jun 18, 2024
1 parent 1e587dc commit c372f3c
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Fabric/src/main/java/mezz/jei/fabric/platform/ConfigHelper.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package mezz.jei.fabric.platform;

import mezz.jei.api.constants.ModIds;
import mezz.jei.common.platform.IPlatformConfigHelper;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.minecraft.client.gui.screens.Screen;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.Optional;

public class ConfigHelper implements IPlatformConfigHelper {
private static final Logger LOGGER = LogManager.getLogger();

@Override
public Path getModConfigDir() {
return FabricLoader.getInstance()
Expand All @@ -16,6 +24,26 @@ public Path getModConfigDir() {

@Override
public Optional<Screen> getConfigScreen() {
FabricLoader loader = FabricLoader.getInstance();
if (loader.isModLoaded("configured")) {
return loader.getModContainer(ModIds.JEI_ID)
.flatMap(ConfigHelper::getConfiguredConfigScreen);
}
return Optional.empty();
}

private static Optional<Screen> getConfiguredConfigScreen(ModContainer jeiModContainer) {
try {
Class<?> configFactoryClass = Class.forName("com.mrcrayfish.configured.integration.CatalogueConfigFactory");
Method createConfigScreen = configFactoryClass.getDeclaredMethod("createConfigScreen", Screen.class, ModContainer.class);
Object screen = createConfigScreen.invoke(configFactoryClass, null, jeiModContainer);
if (screen instanceof Screen configScreen) {
return Optional.of(configScreen);
}
return Optional.empty();
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
LOGGER.error("Failed to load config screen with error:", e);
return Optional.empty();
}
}
}

0 comments on commit c372f3c

Please sign in to comment.