Bukkit插件 - 监听器没有运行?

时间:2015-01-06 20:28:09

标签: java plugins bukkit listeners

嗨,每当我在Listener类中创建一个对象时,我的代码就会出现这个问题,例如,监听器无法工作。

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

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());)并且Listener工作正常。怎么了?

1 个答案:

答案 0 :(得分:1)

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

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

这样你可以从任何地方检索你的mod实例:

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

你也可以从event.entity.worldObj.getSpawn或getWorldSpawn获取世界生成位置 - 我不记得我头脑中没有代码在我面前。

编辑:我看到你的spawn'Location'字段是公共的和静态的,这意味着你可以直接访问它:

CSmain.location;

我恳请您阅读static keyword的含义,因为如果您不完全理解它,它会以意想不到的方式对您的代码产生重大影响。请不要使用它,以便您可以轻松访问该字段。