2015-01-06 3 views
1

Привет У меня проблема с моим кодом каждый раз, когда я делаю объект в классе Listener, слушатель не работает, например.Плагин Bukkit - прослушиватель не работает?

У меня есть этот открытый переменный в моем главном классе (CSmain.java):

public static Location spawn; 

У меня также есть метод в этом классе под названием getSpawn(), который возвращает икру:

public Location getSpawn(){ 
    return spawn; 
} 

I инициализировали переменную в my 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 = новый CSmain();) (. Event.getPlayer() телепортироваться (mainClass.getSpawn());) и и Слушатель работает отлично. Что не так?

ответ

1

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

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

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

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

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

EDIT: Я вижу ваше отродье поле «Location» является общедоступной и статичной, то есть вы можете получить доступ к нему напрямую:

CSmain.location; 

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