Плагин Bukkit - Listener не работает?

Привет, у меня возникает эта проблема с моим кодом каждый раз, когда я создаю объект в классе 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());), и прослушиватель работает нормально. Что случилось?


person Digbywood    schedule 06.01.2015    source источник


Ответы (1)


Если это ваш основной класс мода, вы никогда не должны создавать его новый экземпляр. Вместо этого у вас должен быть

@Instance('yourmodid')
public static CSmain instance;

Таким образом, вы можете получить свой экземпляр мода из любого места, например:

// assuming your getSpawn() returns chunk coordinates
ChunkCoordinates cc = CSmain.instance.getSpawn();

Вы также можете получить позицию возрождения мира из event.entity.worldObj.getSpawn или getWorldSpawn — я не могу вспомнить навскидку, и передо мной нет кода.

РЕДАКТИРОВАТЬ: я вижу, что ваше поле «Местоположение» является общедоступным и статическим, что означает, что вы можете получить к нему прямой доступ:

CSmain.location;

Я призываю вас прочитать, что такое статическое ключевое слово означает, что оно может сильно повлиять на ваш код неожиданным образом, если вы не полностью его понимаете. Пожалуйста, не используйте его только для того, чтобы вы могли легко получить доступ к полю.

person Brian    schedule 06.01.2015