我正在为我的世界编译一个插件,它基本上在登录时播放一首歌曲。我的代码使用这个外部 jar 来完成这项工作:package com.iqbrod.excilysplugin;import net.mcjukebox.plugin.bukkit.api.JukeboxAPI;import net.mcjukebox.plugin.bukkit.api.ResourceType;import net.mcjukebox.plugin.bukkit.api.models.Media;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerJoinEvent;public class LoginListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Media media = new Media(ResourceType.MUSIC, "https://od.lk/s/MTFfMjQ2ODM2NTRf/music1.mp3"); JukeboxAPI.play(event.getPlayer(), media); }}此代码是正确的,应该在PlayerJoinEvent. 我的问题来自对 jar 的编译,其中包含:com/* #Source codelib/* #external Jars (MC_Jukebox)plugin.yml #required by Minecraft ServerMETA-INF/MANIFEST.MF #details below源代码com/*是基本的 Java,与现有的插件/代码相比是正确的。Lib包含我的库 jar。plugin.yml是正确的并且在没有对 lib 类的引用的情况下工作。MANIFEST.MF是Manifest-Version: 1.0Main-Class: EntryPointClass-Path: lib/问题即使在运行服务器和客户端的类路径中引用也会导致libMANIFEST[13:26:27] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to ExcilysPlugin v1.0 org.bukkit.event.EventException: null(...)Caused by: java.lang.NoClassDefFoundError: net/mcjukebox/plugin/bukkit/api/models/Media(...)Caused by: java.lang.ClassNotFoundException: net.mcjukebox.plugin.bukkit.api.models.Media如何在文件夹下引用我的 jar 中包含的 jar lib?我正在使用Intellij进行编码和编译。我读了这篇文章,也尝试使用“提取文件夹”。两者都会导致 ClassNotFoundException。
2 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
MANIFEST 中的 jars 引用指向本地目录 ( .minecraft/plugins/
) 而不是源代码目录。
要解决这个问题:我的外部罐子在.minecraft/plugins/lib
而不是.minecraft/plugins/myplugin/lib
。
另一种解决方案是将这些罐子MANIFEST.mf
指向
类路径:myplugin/lib
德玛西亚99
TA贡献1770条经验 获得超3个赞
在您的情况下,您必须在服务器上安装 McJukebox 插件,运行您自己的自定义插件。我想否则,您的插件将无法工作。一般来说,导出包含插件所需类的源/jar 文件就足够了。您还可以通过函数加载 jar。
添加回答
举报
0/150
提交
取消