diff --git a/plugin/src/main/kotlin/trplugins/menu/module/conf/Loader.kt b/plugin/src/main/kotlin/trplugins/menu/module/conf/Loader.kt index 8a29ffad..5abd5c14 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/conf/Loader.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/conf/Loader.kt @@ -54,8 +54,6 @@ object Loader { true } - val errors = mutableListOf() - val files = mutableListOf().also { it.addAll(filterMenuFiles(folder)) it.addAll(TrMenu.SETTINGS.getStringList("Loader.Menu-Files").flatMap { filterMenuFiles(File(it)) }) @@ -82,7 +80,7 @@ object Loader { result = MenuSerializer.serializeMenu(it) } catch (t: Throwable) { return@start SerialzeResult(SerialzeResult.Type.MENU, SerialzeResult.State.FAILED).also { - t.message?.let { msg -> it.errors.add(msg) } + it.submitError(t) } } if (result.state == SerialzeResult.State.IGNORE) { @@ -90,7 +88,7 @@ object Loader { } if (result.succeed() && TrMenu.SETTINGS.getBoolean("Loader.Listen-Files", true)) { listen(it) - } else errors.addAll(result.errors) + } result }, // success @@ -113,7 +111,7 @@ object Loader { result.first.nameWithoutExtension, result.second.type.name ) - result.second.errors.forEach { console().sendMessage(" §8$it") } + result.second.printStackTrace() console().sendMessage("") } Menu.menus.add(menu) @@ -139,7 +137,7 @@ object Loader { file.nameWithoutExtension, it.type.name ) - it.errors.forEach { console().sendMessage(" §8$it") } + it.printStackTrace() console().sendMessage("") } } diff --git a/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt b/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt index a70e592d..c8f79db1 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt @@ -85,7 +85,7 @@ object MenuSerializer : ISerializer { // 读取菜单设置 val settings = serializeSetting(conf, languages) if (!settings.succeed()) { - result.errors.addAll(settings.errors).also { + result.submitErrors(settings).also { return result } } @@ -93,12 +93,12 @@ object MenuSerializer : ISerializer { // 读取菜单布局 val layout = serializeLayout(conf) if (!layout.succeed()) { - result.errors.addAll(layout.errors).also { return result } + result.submitErrors(layout).also { return result } } // 读取菜单图标 val icons = serializeIcons(conf, languages, layout.asLayout()) if (!icons.succeed()) { - result.errors.addAll(icons.errors).also { + result.submitErrors(icons).also { return result } } diff --git a/plugin/src/main/kotlin/trplugins/menu/module/conf/prop/SerialzeResult.kt b/plugin/src/main/kotlin/trplugins/menu/module/conf/prop/SerialzeResult.kt index a3e142da..6ef78be8 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/conf/prop/SerialzeResult.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/conf/prop/SerialzeResult.kt @@ -1,5 +1,6 @@ package trplugins.menu.module.conf.prop +import taboolib.common.platform.function.console import taboolib.common.util.replaceWithOrder import trplugins.menu.module.display.icon.Icon import trplugins.menu.module.display.layout.MenuLayout @@ -11,7 +12,7 @@ import trplugins.menu.module.display.layout.MenuLayout class SerialzeResult( val type: Type, var state: State = State.SUCCESS, - val errors: MutableList = mutableListOf(), + val errors: MutableList = mutableListOf(), var result: Any? = null ) { @@ -19,9 +20,37 @@ class SerialzeResult( return state == State.SUCCESS && result != null } + fun submitError(error: Throwable) { + errors.add(error) + } + fun submitError(error: SerializeError, vararg args: Any) { state = State.FAILED - errors.add(SerializeError.formatInfo(error).replaceWithOrder(*args)) + errors.add(RuntimeException(SerializeError.formatInfo(error).replaceWithOrder(*args))) + } + + fun submitErrors(result: SerialzeResult): Boolean { + return errors.addAll(result.errors) + } + + fun printStackTrace() { + errors.forEach { printStackTrace(it) } + } + + fun printStackTrace(t: Throwable) { + printStackTrace(t, " §8") + } + + fun printStackTrace(t: Throwable, prefix: String) { + console().sendMessage(prefix + t) + + t.stackTrace.forEach { console().sendMessage("$prefix\tat $it") } + + val cause = t.cause + if (cause != null) { + console().sendMessage(prefix + "Caused by:") + printStackTrace(cause) + } } @Suppress("UNCHECKED_CAST")