diff --git a/build.gradle b/build.gradle index 1e3a508..53f7bf3 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ subprojects { allprojects { apply plugin: "fabric-loom" sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 - version = project.mod_version + version = project.mod_version + "-" + project.minecraft_version repositories { maven { diff --git a/gradle.properties b/gradle.properties index b403080..d8f37f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ loader_version=0.12.11 #Fabric api fabric_version=0.44.0+1.18 # Mod Properties -mod_version=1.2.0 +mod_version=1.2.1 maven_group=draylar archives_base_name=omega-config diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/OmegaConfigGui.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/OmegaConfigGui.java index af0311c..936a175 100644 --- a/omega-config-gui/src/main/java/draylar/omegaconfiggui/OmegaConfigGui.java +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/OmegaConfigGui.java @@ -2,21 +2,47 @@ package draylar.omegaconfiggui; import draylar.omegaconfig.OmegaConfig; import draylar.omegaconfig.api.Config; +import draylar.omegaconfiggui.api.screen.OmegaModMenu; import draylar.omegaconfiggui.api.screen.OmegaScreenFactory; import me.shedaniel.clothconfiglite.api.ConfigScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.LiteralText; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; @Environment(EnvType.CLIENT) public class OmegaConfigGui { + private static final Map> REGISTERED_CONFIGURATIONS = new HashMap<>(); + public static boolean modMenuInitialized = false; + + /** + * Registers a ModMenu configuration screen for the given {@link Config} instance. + * + * @param config registered config to create a ModMenu screen for + * @param config type + */ + public static void registerConfigScreen(T config) { + if(FabricLoader.getInstance().isModLoaded("modmenu")) { + OmegaScreenFactory factory = OmegaConfigGui.getConfigScreenFactory(config); + + if(modMenuInitialized) { + OmegaModMenu.injectScreen(config, factory); + } else { + REGISTERED_CONFIGURATIONS.put(config, factory); + } + } + } + /** * Returns a factory which provides new Cloth Config Lite {@link Screen} instances for the given {@link Config}. + * * @param config Omega Config instance to create the screen factory for * @return a factory which provides new Cloth Config Lite {@link Screen} instances for the given {@link Config}. */ @@ -60,4 +86,8 @@ public class OmegaConfigGui { return null; }; } + + public static Map> getConfigScreenFactories() { + return REGISTERED_CONFIGURATIONS; + } } diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaModMenu.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaModMenu.java index 6690cd8..760a9de 100644 --- a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaModMenu.java +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaModMenu.java @@ -3,54 +3,20 @@ package draylar.omegaconfiggui.api.screen; import com.google.common.collect.ImmutableMap; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import draylar.omegaconfig.api.Config; -import draylar.omegaconfiggui.OmegaConfigGui; import draylar.omegaconfiggui.mixin.modmenu.ModMenuAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.Screen; -import java.util.HashMap; -import java.util.Map; - @Environment(EnvType.CLIENT) public class OmegaModMenu { - private static final Map> REGISTERED_CONFIGURATIONS = new HashMap<>(); - public static boolean modMenuInitialized = false; - - /** - * Registers a ModMenu configuration screen for the given {@link Config} instance. - * - * @param config registered config to create a ModMenu screen for - * @param config type - */ - public static void registerConfigScreen(T config) { - if(FabricLoader.getInstance().isModLoaded("modmenu")) { - OmegaScreenFactory factory = OmegaConfigGui.getConfigScreenFactory(config); - - if(modMenuInitialized) { - OmegaModMenu.injectScreen(config, factory::get); - } else { - addConfiguration(config, factory::get); - } - } - } - - public static void injectScreen(T config, ConfigScreenFactory factory) { + public static void injectScreen(T config, OmegaScreenFactory factory) { // they will suspect nothing ModMenuAccessor.setConfigScreenFactories( new ImmutableMap.Builder>() .putAll(ModMenuAccessor.getConfigScreenFactories()) - .put(config.getModid(), factory) + .put(config.getModid(), factory::get) .build()); } - - public static Map> getRegisteredConfigurations() { - return REGISTERED_CONFIGURATIONS; - } - - public static void addConfiguration(Config config, ConfigScreenFactory screen) { - REGISTERED_CONFIGURATIONS.put(config, screen); - } } diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/mixin/ModMenuMixin.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/mixin/ModMenuMixin.java index 445990f..53b9aec 100644 --- a/omega-config-gui/src/main/java/draylar/omegaconfiggui/mixin/ModMenuMixin.java +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/mixin/ModMenuMixin.java @@ -1,6 +1,7 @@ package draylar.omegaconfiggui.mixin; import com.terraformersmc.modmenu.ModMenu; +import draylar.omegaconfiggui.OmegaConfigGui; import draylar.omegaconfiggui.api.screen.OmegaModMenu; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -15,9 +16,9 @@ public class ModMenuMixin { @Inject(method = "onInitializeClient", at = @At("RETURN"), remap = false) private void addOmegaConfigurationScreens(CallbackInfo ci) { - OmegaModMenu.modMenuInitialized = true; + OmegaConfigGui.modMenuInitialized = true; // Add loaded configuration screens to mod menu. - OmegaModMenu.getRegisteredConfigurations().forEach(OmegaModMenu::injectScreen); + OmegaConfigGui.getConfigScreenFactories().forEach(OmegaModMenu::injectScreen); } } diff --git a/src/testmod/java/draylar/omegatest/OmegaTestClient.java b/src/testmod/java/draylar/omegatest/OmegaTestClient.java index 37a517c..9a6c743 100644 --- a/src/testmod/java/draylar/omegatest/OmegaTestClient.java +++ b/src/testmod/java/draylar/omegatest/OmegaTestClient.java @@ -1,6 +1,6 @@ package draylar.omegatest; -import draylar.omegaconfiggui.api.screen.OmegaModMenu; +import draylar.omegaconfiggui.OmegaConfigGui; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; @@ -10,7 +10,7 @@ public class OmegaTestClient implements ClientModInitializer { @Override public void onInitializeClient() { - OmegaModMenu.registerConfigScreen(OmegaTestMain.CONFIG); + OmegaConfigGui.registerConfigScreen(OmegaTestMain.CONFIG); HudRenderCallback.EVENT.register((stack, delta) -> { MinecraftClient.getInstance().textRenderer.draw(stack, new LiteralText(String.valueOf(OmegaTestMain.CONFIG.v)), 15, 15, 0xffffff);