2016-08-17 36 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); 

要检查,如果玩家是用==比较他的名字运算,字符串应该比较与equals方法,以便做到这一点,而不是

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

添加@覆盖高达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)