Bukkit 插件 - 监听器没有运行?
Bukkit plugin - Listener not running?
嗨,每次我在监听器中创建一个对象时,我的代码都会遇到这个问题class监听器将无法工作,例如
我的主 class (CSmain.java) 中有这个 public 变量:
public static Location spawn;
我在 class 中还有一个名为 getSpawn() 的方法,它 returns 生成:
public Location getSpawn(){
return spawn;
}
我已经在我的 onEnable() 中初始化了变量,但是当我尝试从我的另一个 class 获取它时,class (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 class,你永远不应该创建它的新实例。相反,你应该有一个
@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' 字段是 public 和静态的,这意味着你可以直接访问它:
CSmain.location;
我敦促您仔细阅读 static keyword 的含义,因为如果您不完全理解它,它可能会以意想不到的方式严重影响您的代码。请不要只是为了方便访问字段而使用它。
嗨,每次我在监听器中创建一个对象时,我的代码都会遇到这个问题class监听器将无法工作,例如
我的主 class (CSmain.java) 中有这个 public 变量:
public static Location spawn;
我在 class 中还有一个名为 getSpawn() 的方法,它 returns 生成:
public Location getSpawn(){
return spawn;
}
我已经在我的 onEnable() 中初始化了变量,但是当我尝试从我的另一个 class 获取它时,class (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 class,你永远不应该创建它的新实例。相反,你应该有一个
@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' 字段是 public 和静态的,这意味着你可以直接访问它:
CSmain.location;
我敦促您仔细阅读 static keyword 的含义,因为如果您不完全理解它,它可能会以意想不到的方式严重影响您的代码。请不要只是为了方便访问字段而使用它。