java - Bukkit 插件 - 监听器未运行?

标签 java plugins bukkit listeners

嗨,每次我在 Listener 类中创建一个对象时,我的代码都会遇到这个问题,监听器将无法工作,例如

我的主类(CSmain.java)中有这个公共(public)变量:

public static Location spawn;

我在该类中还有一个名为 getSpawn() 的方法,它返回 spawn:

public Location getSpawn(){
    return spawn;
}

我已经在 onEnable() 中初始化了变量,但是当我尝试从其他类获取它时,类 (JoinListener.java) 将无法工作,例如

@EventHandler
    public void onJoin(PlayerJoinEvent event){

        CSmain mainClass = new CSmain();

        Bukkit.broadcastMessage("Worked");
        event.getPlayer().teleport(mainClass.getSpawn());
        event.getPlayer().setGameMode(GameMode.ADVENTURE);

        setItem(event.getPlayer(), Material.COMPASS, "§2§kll §a§lGAMES §2§kll", 0);

}

我在没有创建对象 (CSmain mainClass = new CSmain();) 和 (event.getPlayer().teleport(mainClass.getSpawn());) 的情况下对其进行了测试,并且监听器工作正常。怎么了?

最佳答案

如果这是你的主要 mod 类,你不应该创建它的新实例。相反,你应该有一个

@Instance('yourmodid')
public static CSmain instance;

这样你就可以从任何地方检索你的 mod 实例,如下所示:

// assuming your getSpawn() returns chunk coordinates
ChunkCoordinates cc = CSmain.instance.getSpawn();

您还可以从 event.entity.worldObj.getSpawn 或 getWorldSpawn 获取世界生成位置 - 我记不清了,而且我面前没有代码。

编辑:我看到您的生成“位置”字段既是公共(public)的也是静态的,这意味着您可以直接访问它:

CSmain.location;

我强烈建议您阅读 static keyword 的内容意思是,如果您不完全理解它,它可能会以意想不到的方式严重影响您的代码。请不要仅仅为了轻松访问字段而使用它。

关于java - Bukkit 插件 - 监听器未运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27806678/

相关文章:

Java:将直接 ByteBuffer 转换为 double[]

java - 安装 Google App Engine 插件后 Eclipse 3.5 缺少新的 Web 应用程序选项

Python;如何将方法导入类 'pluginstyle' ?

java - MySQL - Java - BukkitAPI - 连接到 MySQL 数据库时出错

java - Spigot 插件尝试包含 Apache Commons Text 时出现 NoClassDefFoundError

java - 等待两分钟调用一个方法

找不到类型的 java.util.Date bean

java - 在保存实体之前避免 Spring Data JPA 选择

java - 由于 Java 的跨平台能力,Java 中的开销是否比 C# 更多?

java - Eclipse 插件计数点击/监听点击