Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的minecraft插件没有加载API?_Java_Api_Plot_Minecraft_Bukkit - Fatal编程技术网

Java 为什么我的minecraft插件没有加载API?

Java 为什么我的minecraft插件没有加载API?,java,api,plot,minecraft,bukkit,Java,Api,Plot,Minecraft,Bukkit,我为自己制作了一个奇特的TikZ Api,它允许对数据进行可视化(绘图、图表)。它的工作方式是,创建一个API实例,如 TikZAPI api=new TikZAPI()然后添加绘图数据(带点的简单绘图),如api.addPoint(xCoord,yCoord)。收集了一些数据后,我可以使用api.print()打印绘图的整个代码。然后代码将出现在控制台中,我可以手动复制并粘贴到LaTeX文档中,在那里我可以查看绘图。现在实际问题与API无关,API工作得非常好。我想收集我的minecraft服

我为自己制作了一个奇特的TikZ Api,它允许对数据进行可视化(绘图、图表)。它的工作方式是,创建一个API实例,如
TikZAPI api=new TikZAPI()
然后添加绘图数据(带点的简单绘图),如
api.addPoint(xCoord,yCoord)
。收集了一些数据后,我可以使用
api.print()打印绘图的整个代码。然后代码将出现在控制台中,我可以手动复制并粘贴到LaTeX文档中,在那里我可以查看绘图。现在实际问题与API无关,API工作得非常好。我想收集我的minecraft服务器的一些数据,例如每小时的最大玩家数量,并将这些数据添加到绘图中,以便将其打印到控制台中。但是,当我将API用作库(IntelliJ:Project Structure->Libraries->+->library,工作正常,我可以在插件中访问API的所有方法)并重新加载服务器时,我会遇到以下错误:

org.bukkit.command.CommandException: Unhandled exception executing command 'test' in plugin TestAPI v1.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[Spi
got.jar:git-Spigot-ad703da-e2403a3]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
9) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at org.bukkit.craftbukkit.v1_16_R1.CraftServer.dispatchCommand(CraftServ
er.java:755) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.PlayerConnection.handleCommand(PlayerCo
nnection.java:1703) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.PlayerConnection.a(PlayerConnection.jav
a:1546) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.PacketPlayInChat.a(PacketPlayInChat.jav
a:47) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.PacketPlayInChat.a(PacketPlayInChat.jav
a:1) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.PlayerConnectionUtils.lambda$0(PlayerCo
nnectionUtils.java:19) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.TickTask.run(SourceFile:18) ~[Spigot.ja
r:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.IAsyncTaskHandler.executeTask(SourceFil
e:144) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.IAsyncTaskHandlerReentrant.executeTask(
SourceFile:23) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.IAsyncTaskHandler.executeNext(SourceFil
e:118) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.MinecraftServer.aZ(MinecraftServer.java
:943) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.MinecraftServer.executeNext(MinecraftSe
rver.java:936) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.IAsyncTaskHandler.awaitTasks(SourceFile
:127) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.MinecraftServer.sleepForTick(MinecraftS
erver.java:920) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:
852) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at net.minecraft.server.v1_16_R1.MinecraftServer.lambda$0(MinecraftServe
r.java:164) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_291]
Caused by: java.lang.NoClassDefFoundError: tikzapi/TikZAPI
        at test.Commands.onCommand(Commands.java:39) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[Spi
got.jar:git-Spigot-ad703da-e2403a3]
        ... 18 more
Caused by: java.lang.ClassNotFoundException: tikzapi.TikZAPI
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_291]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:167) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:96) ~[Spigot.jar:git-Spigot-ad703da-e2403a3]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_291]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_291]
        at test.Commands.onCommand(Commands.java:39) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[Spi
got.jar:git-Spigot-ad703da-e2403a3]
        ... 18 more

我认为错误在于API没有被加载。但是我该怎么做呢?我已经把API放在我服务器的plugins文件夹中,不起作用。我在插件文件夹中创建了一个名为“lib”的子文件夹,但也不起作用。无论我使用Eclipse还是IntelliJ,这两个IDE都不起作用。我已经读到它与清单文件有关,但是我如何制作这样一个清单文件,它真的解决了我的问题吗?我不能使用maven,因为它是我自己为自己制作的API,我想像使用普通库一样使用它。有什么想法吗?

我想您的TikZ Api已经编译好了.jar文件

我将尝试为您提供IntelliJ IDEA的解决方案,但总体思路对所有IDE都是一样的。当您将.jar添加到库中并编译插件时,IDE假设所有这些源代码都将在运行期间由VM实例提供,并且IDE不必将库源代码与插件jar文件打包在一起。这仅适用于
bukkit.jar
,因为bukkit首先启动,然后加载插件。它不知道某处还有另一个API JAR也应该加载

第一个简单的解决方案是将原始(未编译)API.java源代码复制到IDE中的插件中,而不添加任何库。(仅当API中的.java文件很少且仍然可用时才有用)

第二个解决方案是将.jar API添加到库中(如您所述),并告诉IDE,在编译过程中,某些库应该与插件一起打包,最终的.jar文件将包含它们。在IDEA中,您必须在编译到.jar之前创建工件配置。

然后选择提取

然后从那里删除bukkit条目(因为我们不想将整个bukkit源代码打包到我们的插件中),您应该在那里看到您的API.jar文件。然后单击应用/确定


现在,当您使用
buildartifacts
构建(编译)插件时,您的API.jar也将被编译并打包到插件jar文件中,该文件将生成in
out\artifacts

这里最好的方法是将API作为插件,并将依赖项加载到
plugin.yml
中。这样,通过任何其他插件都可以很容易地访问它,如果在不同的插件中使用API,则不会出现更新兼容性问题。在MC Server中,创建一个充当API的插件是API的规范。

您的API似乎没有加载。如果你把你的API单独放在plugins文件夹中,你会得到它加载的日志消息吗?您是否在
plugin.yml
依赖项中添加了API。您使用哪种类型的编译器(Maven、纯清单+IDE)?你的API是一个真正的插件还是仅仅是带有实用程序的类?我可以帮你了解这些信息。不,我只是加载了API,比如bukkitlib库,以便通过buildpath制作bukkit插件。我不使用maven,当我把我的API放在我的plugins文件夹中时,我会得到一个错误,API没有被识别为插件,但这应该没问题,因为它不是插件,但这一切都不起作用。我真的很困惑,我没有在我的plugin.yml中添加任何内容,我需要添加哪些行?首先,非常感谢您的详细回答!我已经设置了所有内容,就像你给我看的那样,但是我的API没有出现在列表中(最后一张图片)。我通过little plus按钮手动添加了它,并构建了我的插件,但它仍然不适用于我..:(它继续抛出“java.lang.ClassNotFoundException:tikzapi.tikzapi”错误。或者使用加号按钮添加API是错误的吗?您是否已将API JAR文件添加到项目结构中的库中?您可以检查生成的插件文件是否已将API打包到zip/rar查看器中。由于所有.JAR文件都只是打包的源文件,请使用WinRAR打开您的plugin.JAR文件,并检查是否也编译了这些文件。从您的API类文件。或者您可以尝试下面提到的解决方案,使您的API成为单独的插件。是的,当我创建我的项目时,我转到了“项目结构”>“库”,并添加了spigotlib.jar和我的TikZAPI.jar。从那时起,我转到了“工件”>“+”>“jar”>,来自具有依赖项的模块,选中了“提取到“目标JAR”并单击“确定”。在输出布局部分只有我的testplugin.JAR和一个子文件夹,其中有一个小小的青色方框。该文件夹名为“testplugin”compile output。当我用7Zip打开它时,里面没有API,我查看了JAR中的每个文件夹,没有什么…我真的不知道我做错了什么…谢谢你u谢谢你的回答,但是有没有一种方法可以加载API而不将其加载到bukkit插件?我还想加载JavaMail API,它不是我自己的,因此我无法将其加载到API。使用maven,你可以编译带有依赖项的插件。你可以在Google上查看一下。这就是我将如何处理的