
Leaves核心提供 -Dleavesclip.enable.mixin=true 参数,开启后插件可以在运行时修改 Java 类的行为。
因为要使用Aki-Async 异步优化插件,所以添加了这个启动参数。
-Dleavesclip.enable.mixin=true 是 Leaves 核心(LeavesMC)的一个 JVM 启动参数,用于启用 Mixin 支持。问题复现
从 Minecraft 1.20.5 开始,Paper 服务端改为在运行时直接使用 Mojang 官方映射(Mojang Mappings),而不是传统的 Spigot 映射。
在Paper对插件重映射之前将 -Dleavesclip.enable.mixin=true 参数添加到启动核心的命令中,会导致插件重映射失败。
[18:43:01 ERROR]: [EntrypointUtil] Self-suppression not permitted
java.lang.IllegalArgumentException: Self-suppression not permitted
at java.base/java.lang.Throwable.addSuppressed(Throwable.java:1096) ~[?:?]
at net.minecraft.util.ExceptionCollector.add(ExceptionCollector.java:13) ~[?:?]
at io.papermc.paper.pluginremap.PluginRemapper.waitForAll(PluginRemapper.java:422) ~[?:?]
at io.papermc.paper.pluginremap.PluginRemapper.rewritePluginDirectory(PluginRemapper.java:210) ~[?:?]
at io.papermc.paper.plugin.provider.source.DirectoryProviderSource.prepareContext(DirectoryProviderSource.java:42) ~[?:?]
...插件加载结果:
[18:43:01 INFO]: [PluginInitializerManager] Initialized 0 plugins
# 由于重映射失败,0 个插件被加载。服务端继续启动,但没有插件。查关键词PluginRemapper可以查到一堆issue,可以确定Leaves是基于Paper的分支,肯定继承了相同的问题。
测试
将 -Dleavesclip.enable.mixin=true 参数去掉后重新启动核心,所有插件便可以正常加载。那么可以确定就是这个Mixin导致插件重映射失败。
解决
.paper-remapped 目录主要用于:缓存重映射后的插件 JAR —— 将使用 Spigot 映射编译的插件转换为 Mojang 映射版本
缓存服务端 JAR —— 存储重映射后的服务端核心文件
加速启动 —— 避免每次启动都重新处理这些文件,显著提升服务器启动速度
先删掉\plugins下的\.paper-remapped文件夹,将 -Dleavesclip.enable.mixin=true 参数去掉后重新启动核心,缓存重映射后的插件JAR。
关闭核心,重新将 -Dleavesclip.enable.mixin=true 参数加回启动脚本即可正常运行。
Comments NOTHING