嗨,每次我在 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/