我只是试图调用一个方法,但是我在使用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);
}
非常感谢任何帮助!
答案 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}},检查玩家location
,X
和Y
coords ......
请确保您在Z
此外,如果您希望将活动放在主文件以外的课程中,要在implements Listener
中注册活动,请使用此选项:
onEnable()
如果它位于您的主文件中,您可以将this.getServer().getPluginManager().registerEvents(new classNameHere(), this);
替换为new classNameHere()
最后一次,我无法强调这是多么重要,你 从不 必须调用你的事件方法。只要事件已注册(在上面的代码中完成),并且方法上面有this
。事件发生时,事件将 始终 自动调用