嗨,每当我在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()))进行了测试,并且侦听器工作正常。怎么了?
最佳答案
如果那是您的主要mod类,则永远不要为其创建新实例。相反,您应该有一个
@Instance('yourmodid')
public static CSmain instance;
这样,您可以从任何地方检索您的mod实例,如下所示:
// assuming your getSpawn() returns chunk coordinates
ChunkCoordinates cc = CSmain.instance.getSpawn();
您还可以从event.entity.worldObj.getSpawn或getWorldSpawn获取世界生成位置-我不记得了,也没有代码在我面前。
编辑:我看到您的生成“位置”字段既是公共的又是静态的,这意味着您可以直接访问它:
CSmain.location;
我敦促您阅读static keyword的含义,因为如果您不完全理解的话,它可能会以意想不到的方式极大地影响您的代码。请不要仅使用它,以便您可以轻松访问字段。