嗨,每当我在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工作正常。怎么了?
答案 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的含义,因为如果您不完全理解它,它会以意想不到的方式对您的代码产生重大影响。请不要使用它,以便您可以轻松访问该字段。