Events Bukkit加入活动
我正在尝试在PlayerJoin上做一些事情,但没有任何效果。我认为这是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
@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方法不工作。