From 93fb08665861f05ea6e4021c27a5aa4e5895d712 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 31 Oct 2022 15:42:33 +0100 Subject: [PATCH] mod logger --- .../minosoft/modding/loader/ModLoader.kt | 9 ++++- .../minosoft/modding/loader/mod/ModMain.kt | 4 +- .../modding/loader/mod/logger/ModLogger.kt | 40 +++++++++++++++++++ .../de/bixilon/minosoft/util/logging/Log.kt | 8 ++-- .../minosoft/util/logging/LogMessageType.kt | 8 ++++ 5 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/modding/loader/mod/logger/ModLogger.kt diff --git a/src/main/java/de/bixilon/minosoft/modding/loader/ModLoader.kt b/src/main/java/de/bixilon/minosoft/modding/loader/ModLoader.kt index 47f70ba9e..974e003cf 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loader/ModLoader.kt +++ b/src/main/java/de/bixilon/minosoft/modding/loader/ModLoader.kt @@ -24,6 +24,7 @@ import de.bixilon.minosoft.modding.loader.LoaderUtil.load import de.bixilon.minosoft.modding.loader.error.* import de.bixilon.minosoft.modding.loader.mod.MinosoftMod import de.bixilon.minosoft.modding.loader.mod.ModMain +import de.bixilon.minosoft.modding.loader.mod.logger.ModLogger import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -32,6 +33,7 @@ import java.io.File import java.io.FileInputStream import java.util.jar.JarEntry import java.util.jar.JarInputStream +import kotlin.reflect.jvm.javaField object ModLoader { @@ -123,7 +125,8 @@ object ModLoader { if (main !is ModMain) { throw NoModMainError(mainClass) } - main.assets = assetsManager!! + ASSETS_MANAGER_FIELD[main] = assetsManager!! + LOGGER_FIELD[main] = ModLogger(manifest.name) this.main = main main.init() } @@ -288,4 +291,8 @@ object ModLoader { } throw IllegalStateException("$phase has not started yet!") } + + + private val ASSETS_MANAGER_FIELD = ModMain::assets.javaField!!.apply { isAccessible = true } + private val LOGGER_FIELD = ModMain::logger.javaField!!.apply { isAccessible = true } } diff --git a/src/main/java/de/bixilon/minosoft/modding/loader/mod/ModMain.kt b/src/main/java/de/bixilon/minosoft/modding/loader/mod/ModMain.kt index 8ed8b521a..cd7e1f5f8 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loader/mod/ModMain.kt +++ b/src/main/java/de/bixilon/minosoft/modding/loader/mod/ModMain.kt @@ -16,7 +16,9 @@ package de.bixilon.minosoft.modding.loader.mod import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.minosoft.assets.AssetsManager import de.bixilon.minosoft.gui.rendering.gui.hud.Initializable +import de.bixilon.minosoft.modding.loader.mod.logger.ModLogger abstract class ModMain : Initializable { - var assets: AssetsManager = unsafeNull() + val assets: AssetsManager = unsafeNull() + val logger: ModLogger = unsafeNull() } diff --git a/src/main/java/de/bixilon/minosoft/modding/loader/mod/logger/ModLogger.kt b/src/main/java/de/bixilon/minosoft/modding/loader/mod/logger/ModLogger.kt new file mode 100644 index 000000000..b3ef91425 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/modding/loader/mod/logger/ModLogger.kt @@ -0,0 +1,40 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.modding.loader.mod.logger + +import de.bixilon.minosoft.data.text.TextComponent +import de.bixilon.minosoft.data.text.formatting.color.ChatColors +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.logging.LogLevels +import de.bixilon.minosoft.util.logging.LogMessageType + +class ModLogger(name: String) { + private val prefix = TextComponent("[$name] ").color(ChatColors.BLUE) + + fun fatal(message: () -> Any?) { + Log.log(LogMessageType.MODS, LogLevels.FATAL, prefix, message) + } + + fun warn(message: () -> Any?) { + Log.log(LogMessageType.MODS, LogLevels.WARN, prefix, message) + } + + fun info(message: () -> Any?) { + Log.log(LogMessageType.MODS, LogLevels.INFO, prefix, message) + } + + fun verbose(message: () -> Any?) { + Log.log(LogMessageType.MODS, LogLevels.VERBOSE, prefix, message) + } +} diff --git a/src/main/java/de/bixilon/minosoft/util/logging/Log.kt b/src/main/java/de/bixilon/minosoft/util/logging/Log.kt index 505dcb97e..c4513aeb2 100644 --- a/src/main/java/de/bixilon/minosoft/util/logging/Log.kt +++ b/src/main/java/de/bixilon/minosoft/util/logging/Log.kt @@ -115,7 +115,7 @@ object Log { @DoNotCall @JvmOverloads @JvmStatic - fun log(type: LogMessageType, level: LogLevels = LogLevels.INFO, additionalPrefix: ChatComponent? = null, message: Any, vararg formatting: Any) { + fun log(type: LogMessageType, level: LogLevels = LogLevels.INFO, additionalPrefix: ChatComponent? = null, message: Any?, vararg formatting: Any) { if (skipLogging(type, level)) { return } @@ -151,7 +151,7 @@ object Log { } @JvmStatic - fun log(type: LogMessageType, level: LogLevels = LogLevels.INFO, additionalPrefix: ChatComponent? = null, messageBuilder: () -> Any) { + fun log(type: LogMessageType, level: LogLevels = LogLevels.INFO, additionalPrefix: ChatComponent? = null, messageBuilder: () -> Any?) { if (skipLogging(type, level)) { return } @@ -159,12 +159,12 @@ object Log { } @JvmStatic - fun log(type: LogMessageType, level: LogLevels, messageBuilder: () -> Any) { + fun log(type: LogMessageType, level: LogLevels, messageBuilder: () -> Any?) { log(type, level = level, additionalPrefix = null, messageBuilder = messageBuilder) } @JvmStatic - fun log(type: LogMessageType, messageBuilder: () -> Any) { + fun log(type: LogMessageType, messageBuilder: () -> Any?) { log(type, additionalPrefix = null, messageBuilder = messageBuilder) } } diff --git a/src/main/java/de/bixilon/minosoft/util/logging/LogMessageType.kt b/src/main/java/de/bixilon/minosoft/util/logging/LogMessageType.kt index e2630ba36..41f0b14c5 100644 --- a/src/main/java/de/bixilon/minosoft/util/logging/LogMessageType.kt +++ b/src/main/java/de/bixilon/minosoft/util/logging/LogMessageType.kt @@ -63,6 +63,14 @@ enum class LogMessageType( ), PROFILES(ChatColors.AQUA), + + MODS( + ChatColors.WHITE, mapOf( + LogLevels.FATAL to ChatColors.DARK_RED, + LogLevels.WARN to ChatColors.RED, + LogLevels.VERBOSE to ChatColors.YELLOW, + ) + ) ; companion object : ValuesEnum {