2016-08-17 2 views
-3

Я пытаюсь сделать что-то в onPlayerJoin, но ничего не работает. Я думаю, что это проблема bukkit. Как я должен это делать? Мой код:Bukkit Присоединиться к событию

@EventHandler 
private void onJoin(PlayerJoinEvent e) { 
    // Join MSGs 
    e.setJoinMessage(ChatColor.GOLD + "Hrac " + ChatColor.RED + e.getPlayer().getName() + ChatColor.GOLD + " se pripojil."); 
    e.setJoinMessage(ChatColor.GOLD + "Hrac " + ChatColor.RED + e.getPlayer().getName() + ChatColor.GOLD + " se odpojil."); 
    BukkitScheduler scheduler = getServer().getScheduler(); 
    scheduler.scheduleSyncDelayedTask(this, new Runnable() { 
     @Override 
     public void run() { 

      // Teleport every join 
      Location spawn = (Location) getConfig().get("Spawn"); 
       e.getPlayer().teleport(spawn); 
       e.getPlayer().sendMessage("teleported to spawn"); 

      // Setting ops 
      if(getConfig().get("ops") != null) { 
       ops = (ArrayList<String>) getConfig().getStringList("ops"); 
      } 

      for (String o : ops) { 
       if(e.getPlayer().getName() == o) { 
        e.getPlayer().setOp(true); 
        e.getPlayer().sendMessage("op"); 
       } 
      } 
     } 
    }, 20L); 
} 

ответ

1

Там же несколько проблем с вашим кодом:

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

getServer().getScheduler().runTaskLater(this, new Runnable(){}, 20L); 

Вы проверяете, если игрок является оп, сравнивая его имя с ==, строки должны быть сравнены с методом равно так делать это вместо

for(String o : ops) 
{ 
    if(e.getPlayer().getName().equals(o)) 
    { 
     //... 
    } 
} 

Вы не можете установить сообщение соединения дважды, если вы хотите получить сообщение с несколькими соединениями, отправьте его самому всем игрокам сервера.

getServer().broadcastMessage("hello"); 

Надеется, что это помогает, удач в развитии плагина

+0

новый код: до сих пор не работает, не транслирует http://pastebin.com/EmDnmsfJ – xtrontross

+0

@xtrontross Попробуйте это http://pastebin.com/Q5t0nK6q – Winter

+0

до сих пор не работает :(никаких ошибок в консоли – xtrontross

0

Добавлено @Override ДО onEnable() метод и работают в настоящее время

1

Я не согласен с тем, что было сказан выше xtrontros, вы все еще можете использовать Bukkit планировщик, и, похоже, вы его хорошо использовали, отложенная задача не повторится.

Однако при создании местоположений из конфигурации попробуйте разобрать его вместо его литья. Например:

String[] data = config.getString("spawn").split(","); 
Location spawn = new Location(Double.parseDouble(data[0]), Double.parseDouble(data[1]), Double.parseDouble(data[2]), Float.parseFloat(data[3]), Float.parseFloat(data[4])); 

Затем телепортируйте своих игроков туда.

Вы также должны убедиться, что вы зарегистрировали события в этом классе, в вашем onEnable() в главном классе добавить

getServer.getPluginManager().registerEvents(new MyClassConstructor(), this) 

Или, если событие находится в вашем главном классе, использовать этот метод вместо

getServer.getPluginManager().registerEvents(this, this) 
Смежные вопросы