调用PlayerMoveEvent实例方法

时间:2014-03-15 02:37:03

标签: java api methods bukkit

我只是试图调用一个方法,但是我在使用Bukkit API需要使用的参数方面有点迷失。

我打电话的方法:

@EventHandler   
    private void onPlayerMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();
        Location location = loc.get(player.getName());
        if (player.getLocation().distance(location) >= 65) {
            player.sendMessage(ChatColor.AQUA + "Out of reach.");
        }
    }

我从以下方式调用它的方法:

public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) {
    this.onPlayerMove(PlayerMoveEvent);
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您不需要致电事件,事件发生时会自动触发事件。例如,

@EventHandler   
public void onPlayerMove(PlayerMoveEvent event){
}

当玩家移动时会被调用。您从不需要召集活动。

如果您要做的是传送播放器,您可以使用:

Player p; //make sure that 'p' is assigned to something
Location l = new Location(world, x-coord, y-coord, z-coord);

p.teleport(l);

所以,你真正应该做的是,考虑到这一切都在你的主文件中:

@Override
public void onEnable(){
    //plugin enabled
    this.getServer().getPluginManager().registerEvents(this, this);
}

@Override
public void onDisable(){
    //plugin disabled
}

@EventHandler   
public void onPlayerMove(PlayerMoveEvent event){ //NEVER make events with the private modifier
    Player player = event.getPlayer();
    Location location = loc.get(player.getName()); //I really don't know what your trying to do here
    //if your trying to create a new location, check out the code above
    if(player.getLocation().distance(location) >= 65) {
        player.sendMessage(ChatColor.AQUA + "Out of reach.");
    }
}

只要玩家移动,就会调用onPlayerMove方法,无需额外的工作!

此外,请确保player.getLocation().distance(location)确实有效,因为它不是Bukkit中的方法......我假设您获得了玩家所在位置之间的距离,{\ n} {1}},检查玩家locationXY coords ......

请确保您在Z

中放置活动的课程

此外,如果您希望将活动放在主文件以外的课程中,要在implements Listener中注册活动,请使用此选项:

onEnable()

如果它位于您的主文件中,您可以将this.getServer().getPluginManager().registerEvents(new classNameHere(), this); 替换为new classNameHere()

最后一次,我无法强调这是多么重要,你 从不 必须调用你的事件方法。只要事件已注册(在上面的代码中完成),并且方法上面有this。事件发生时,事件将 始终 自动调用