Вызов метода экземпляра PlayerMoveEvent
Я просто пытаюсь вызвать метод, но я немного растерялся из-за того, как это сделать с параметрами, которые мне нужно использовать из 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 ответ
Вам не нужно вызывать события, они автоматически запускаются, когда событие происходит. Например,
@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... Я предполагаю, что вы получите расстояние между местоположением игрока, и location
, проверив игроков X
, Y
, а также Z
Coords...
Просто убедитесь, что класс, в который вы помещаете событие в implements Listener
Кроме того, если вы хотите поместить событие в класс, отличный от вашего основного файла, зарегистрируйте события в вашем onEnable()
, использовать этот:
this.getServer().getPluginManager().registerEvents(new classNameHere(), this);
Если это в вашем основном файле, вы можете заменить new classNameHere()
с this
Хотя в последний раз, и я не могу не подчеркнуть, насколько это важно, вам НИКОГДА не нужно вызывать методы вашего события. Пока события регистрируются (сделано в коде выше), а методы имеют @EventHandler
над ними. События ВСЕГДА будут вызываться автоматически всякий раз, когда событие происходит