From bb90bad1d1e5b60ddd282e5032447402bd88ce58 Mon Sep 17 00:00:00 2001 From: Username404-59 Date: Wed, 16 Apr 2025 17:29:49 +0200 Subject: [PATCH] Fix the mod on neoforge 1.21.5 by notably using the mod loader configuration directories Signed-off-by: Username404-59 --- common/build.gradle.kts | 2 +- .../snowygui/config/Configuration.kt | 30 ++++++++++++------- .../snowygui/gui/feature/DiscordRPC.kt | 5 ++-- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index a921d0e..488f878 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,4 +1,4 @@ -architectury { common("fabric", "forge"); injectInjectables = false } +architectury { common("fabric", "forge"); injectInjectables = true } dependencies { modImplementation("net.fabricmc:fabric-loader:${rootProject.property("fabric_loader_version")}") modImplementation("me.shedaniel.cloth:cloth-config:${rootProject.property("clothconfig_version")}") { diff --git a/common/src/main/kotlin/fr/username404/snowygui/config/Configuration.kt b/common/src/main/kotlin/fr/username404/snowygui/config/Configuration.kt index 9db4022..aea244e 100644 --- a/common/src/main/kotlin/fr/username404/snowygui/config/Configuration.kt +++ b/common/src/main/kotlin/fr/username404/snowygui/config/Configuration.kt @@ -8,34 +8,30 @@ import com.typesafe.config.ConfigFactory.parseFile import com.typesafe.config.ConfigFactory.parseString import com.typesafe.config.ConfigRenderOptions import com.typesafe.config.ConfigValueFactory +import dev.architectury.injectables.targets.ArchitecturyTarget import fr.username404.snowygui.ClickGui import fr.username404.snowygui.Snowy import fr.username404.snowygui.Snowy.Companion.MissingComponent -import fr.username404.snowygui.gui.feature.shouldSave import fr.username404.snowygui.gui.feature.Category import fr.username404.snowygui.gui.feature.Macro +import fr.username404.snowygui.gui.feature.shouldSave import io.github.config4k.extract import io.github.config4k.getValue -import net.minecraft.client.Minecraft - -import java.io.File - -import kotlin.reflect.KProperty import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import net.minecraft.network.chat.MutableComponent import net.minecraft.network.chat.contents.TranslatableContents import org.jetbrains.annotations.ApiStatus +import java.io.File +import java.nio.file.Path +import kotlin.io.path.absolutePathString import kotlin.reflect.KClass +import kotlin.reflect.KProperty import kotlin.reflect.full.isSuperclassOf -@OptIn(ExperimentalSerializationApi::class) object Configuration { @Deprecated("Use the getValue or setValue methods instead", level = DeprecationLevel.ERROR) @JvmStatic @@ -54,7 +50,19 @@ object Configuration { }.toTypedArray()), ) } - private val configDirectory: String = (Minecraft.getInstance().gameDirectory.absolutePath + File.separator + "config").also { File(it).mkdir() } + private val configDirectory: String = + (if (ArchitecturyTarget.getCurrentTarget() == "fabric") { + Class.forName("net.fabricmc.loader.api.FabricLoader").run { + getMethod("getConfigDir").invoke(getMethod("getInstance").invoke(null)) + } + } else { + Class.forName("net.neoforged.fml.loading.FMLPaths") + .getField("CONFIGDIR") + .get(null) + .let { enum -> + enum.javaClass.getMethod("get").invoke(enum) + } + } as Path).absolutePathString() private val file: File = File(configDirectory + File.separator + "snowy.conf") private val obtained: Config = run { var result: Config = empty() diff --git a/common/src/main/kotlin/fr/username404/snowygui/gui/feature/DiscordRPC.kt b/common/src/main/kotlin/fr/username404/snowygui/gui/feature/DiscordRPC.kt index 08c4c30..5c840fc 100644 --- a/common/src/main/kotlin/fr/username404/snowygui/gui/feature/DiscordRPC.kt +++ b/common/src/main/kotlin/fr/username404/snowygui/gui/feature/DiscordRPC.kt @@ -9,12 +9,13 @@ import net.arikia.dev.drpc.DiscordRPC as discord_rpc @ButtonInfo(Category.MISC) object DiscordRPC: ButtonImpl() { private val RPCHandlers: DiscordEventHandlers = DiscordEventHandlers.Builder().build() - private val RichPresence: DiscordRichPresence.Builder = DiscordRichPresence + private val RichPresence: Lazy = lazy { DiscordRichPresence .Builder("Playing Minecraft ${Minecraft.getInstance().launchedVersion}") .setDetails("Launched with ${Minecraft.getInstance().versionType}") .setBigImage("icon", "SnowyGUI") + } override fun execAction() { - if (toggled) discord_rpc.discordUpdatePresence(RichPresence.build()) + if (toggled) discord_rpc.discordUpdatePresence(RichPresence.value.build()) else discord_rpc.discordClearPresence() } init {