嗨,每当我在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的含义,因为如果您不完全理解的话,它可能会以意想不到的方式极大地影响您的代码。请不要仅使用它,以便您可以轻松访问字段。

10-06 13:49