Bukkit插件中获取当前插件实例的方法求助
Bukkit插件中获取当前插件实例的方法求助
嘿,看来你卡在获取当前插件实例这一步了!看你代码里注释掉的那行p.setMetadata("OpenedMenu", new FixedMetadataValue(plugin, "main"));,这里的plugin就是你缺的当前插件实例,我给你两种实用的解决办法:
方法一:通过主类静态实例获取(最推荐)
Bukkit插件的主类(也就是你导入的cz.untitled.Untitled)通常会维护一个静态自身实例,方便其他类调用。你只需要在主类Untitled里添加这段代码:
import org.bukkit.plugin.java.JavaPlugin; public class Untitled extends JavaPlugin { // 静态实例字段 private static Untitled instance; @Override public void onEnable() { // 插件启动时把当前实例赋值给静态变量 instance = this; } // 对外提供获取实例的静态方法 public static Untitled getInstance() { return instance; } }
之后在你的serverselectcommand类里,直接用Untitled.getInstance()就能拿到插件实例,修改那行注释的代码:
p.setMetadata("OpenedMenu", new FixedMetadataValue(Untitled.getInstance(), "main"));
方法二:通过插件管理器获取
如果不想修改主类,也可以通过Bukkit插件管理器根据插件名称获取实例:
// 这里的"Untitled"要和你plugin.yml里的name字段完全一致 Plugin plugin = Bukkit.getPluginManager().getPlugin("Untitled"); // 记得判断是否为null,避免空指针异常 if (plugin != null) { p.setMetadata("OpenedMenu", new FixedMetadataValue(plugin, "main")); }
不过这种方法不如第一种可靠,万一插件名称写错或者插件未正常加载,会返回null导致报错,所以优先推荐第一种方式。
另外提醒下,你的主类Untitled必须继承JavaPlugin,这是Bukkit插件的标准要求,否则无法被服务器正确识别哦!
备注:内容来源于stack exchange,提问作者vitekform
相关产品推荐
相关产品推荐

