使用bukkit API,是否可以进行类似以下伪代码的调用:
Bukkit.getPluginManager().getPlugin("PluginName").getJarFile();
对于像MobBountyReloaded这样的插件,它会返回plugins/MobBountyReloaded_v235.jar
。
我尝试使用众所周知的命名方案来查找文件,例如只需将.jar
或<version>.jar
附加到插件的名称,但这并不总能产生正确的结果。上述示例失败,因为plugin.yml
文件中的版本号仅为235
而不是_v235
,而某些插件使用<PluginName>-<Version>-<buildnumber>.jar
等方案。
有一种简单的方法可以实现这一目标吗?每个加载的插件的文件信息必须在内存中某处,不是吗?
答案 0 :(得分:6)
如果您从插件加载了类,则可以使用代码源功能来获取加载类的jar。
Bukkit.getPluginManager().getPlugin("PluginName").getClass().getProtectionDomain().getCodeSource().getLocation();
答案 1 :(得分:1)
在你的org.bukkit.plugin.java.JavaPlugin子类中,
this.getFile().getAbsoluteFile();
返回包含路径的完整jar文件名 只有this.getFile()返回如下内容: “插件\ CLJ-的Minecraft-1.0.1-快照standalone.jar”
就我而言,我需要这个: “file:/ S:/cb/plugins/memorystone-2.0.0-SNAPSHOT.jar”作为URL(不是URI) 这是: 。this.getFile()toURI()的toURL();
在[org.bukkit / bukkit“1.4.5-R0.3-SNAPSHOT”中测试