Events Bukkit加入活动

Events Bukkit加入活动,events,minecraft,bukkit,Events,Minecraft,Bukkit,我正在尝试在PlayerJoin上做一些事情,但没有任何效果。我认为这是bukkit的问题。我该怎么做?我的代码: @EventHandler private void onJoin(PlayerJoinEvent e) { // Join MSGs e.setJoinMessage(ChatColor.GOLD + "Hrac " + ChatColor.RED + e.getPlayer().getName() + ChatColor.GOLD + " se prip

我正在尝试在PlayerJoin上做一些事情,但没有任何效果。我认为这是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);
}
@EventHandler
专用void onJoin(playerjoin事件e){
//加入MSG
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调度程序=getServer().getScheduler();
scheduleSyncDelayedTask(这是新的Runnable(){
@凌驾
公开募捐{
//传送每个连接
Location spawn=(Location)getConfig().get(“spawn”);
e、 getPlayer().传送(繁殖);
e、 getPlayer().sendMessage(“传送到产卵”);
//设置操作
if(getConfig().get(“ops”)!=null){
ops=(ArrayList)getConfig().getStringList(“ops”);
}
用于(字符串o:ops){
如果(例如getPlayer().getName()==o){
e、 getPlayer().setOp(true);
e、 getPlayer().sendMessage(“op”);
}
}
}
},20L);
}

您的代码存在多个问题:

您使用的是BukkitScheduler.scheduleSyncDelayedTask方法,而不是runTaskLater方法,因此您的任务将每秒执行一次,而不是播放器加入后的每秒

getServer().getScheduler().runTaskLater(this, new Runnable(){}, 20L);
您通过将玩家的名字与==进行比较来检查玩家是否是op,字符串应该与equals方法进行比较,所以改为这样做

for(String o : ops)
{
    if(e.getPlayer().getName().equals(o))
    {
         //...
    }
}
您不能两次设置加入消息,如果您想要多行加入消息,请自己将其发送给服务器的所有玩家

getServer().broadcastMessage("hello");

希望这有帮助,祝你的插件开发好运,添加了@Override upto onEnable()方法,现在可以工作了。我不同意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)

新代码:仍然不工作,不广播@xtrontross试试这个仍然不工作:(中没有错误)console@xtrontross你能描述更多吗?正在编译吗?命令是否工作?如果忽略事件的哪一部分,全部?只有可运行部分?(连接消息是否更改为你的?)你确定你有一个有效的plugin.yml并且你的配置有一个字符串列表吗?请不要跳过这些问题中的任何一个。join消息没有更改。命令和对配置的写入工作正常。整个onEnable方法不工作。