Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions gradle/fabric.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ loader = "0.19.2"
[libraries]
fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "loader" }
clothconfig = { module = "me.shedaniel.cloth:cloth-config-fabric", version = "0" }
midnightlib = { module = "eu.midnightdust:midnightlib", version = "0" }
walksylib = { module = "maven.modrinth:walksylib", version = "0" }

[plugins]
loom-remap = {id = "net.fabricmc.fabric-loom-remap", version.ref = "loom"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ public List<String> getMixins() {
//? clothconfig_compat
mixins.add("compat.cloth.Mixin_ConfigBuilderImpl");

//? midnightlib_compat
mixins.add("compat.midnightlib.Mixin_MidnightConfig");

//? walksylib_compat
mixins.add("compat.walksylib.Mixin_WalksyLib_ModEntryPointList");

//? tr7zw_compat
mixins.add("compat.tr7zw.Mixin_AbstractConfigScreen");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.polyfrost.oneconfig.internal.mixin.compat.midnightlib;

//? midnightlib_compat {
import org.polyfrost.oneconfig.internal.compat.MidnightLibCompat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@Mixin(targets = "eu.midnightdust.lib.config.MidnightConfig", remap = false)
public class Mixin_MidnightConfig {

@Inject(method = "init", at = @At("TAIL"), remap = false)
private static void oneconfig$onInit(String modid, Class<?> config, CallbackInfo ci) {
try {
MidnightLibCompat.onInit(modid, config);
} catch (Throwable ignored) {
}
}
}
//? }
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.polyfrost.oneconfig.internal.mixin.compat.walksylib;

//? walksylib_compat {
import org.polyfrost.oneconfig.internal.compat.WalksyLibCompat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@Mixin(targets = "main.walksy.lib.core.mods.ModEntryPointList", remap = false)
public class Mixin_WalksyLib_ModEntryPointList {

@Inject(method = "loadModConfigs", at = @At("TAIL"), remap = false)
private void oneconfig$onLoadModConfigs(CallbackInfo ci) {
try {
WalksyLibCompat.onLoad(this);
} catch (Throwable ignored) {
}
}
}
//? }
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,30 @@ object CompatLoader {

fun hasMod(id: String): Boolean = ModInfo.loadedMods.any { it.id == id }

private const val MOD_MENU_CLASS = "com.terraformersmc.modmenu.ModMenu"

fun originalScreenOpener(modId: String): Runnable? {
val hasScreen = runCatching {
Class.forName(MOD_MENU_CLASS)
.getMethod("hasConfigScreen", String::class.java)
.invoke(null, modId) as? Boolean
}.getOrNull() ?: false
if (!hasScreen) return null
return Runnable {
runCatching {
val parent = Platform.screen().current<Any?>()
val method = Class.forName(MOD_MENU_CLASS).methods.firstOrNull {
it.name == "getConfigScreen" && it.parameterCount == 2
} ?: return@runCatching
var screen: Any? = null
withForcedModId(modId) {
screen = method.invoke(null, modId, parent)
}
screen?.let { Platform.screen().display(it) }
}
}
}

private val list: MutableList<Pair<Int, () -> Unit>> = mutableListOf()

init {
Expand Down
Loading
Loading