我正在使用Spigot 1.11.2.
我有这个简单的代码:
@EventHandler
public void onPlayerInteractEntity (PlayerInteractEntityEvent event) {
if (entity instanceof AbstractHorse) {
event.setCancelled(true);
AbstractHorse horse = (AbstractHorse) event.getRightClicked();
Player player = event.getPlayer();
player.sendMessage(horse.getName());
}
}
它应该做的是如果我右键单击一匹马,我应该得到它的名字,但我不应该骑它,因为event.setCancelled(true).它按预期工作,但问题是,当我右键单击一匹马时,游戏会将我的视图(我的玩家的偏航)转变为一些不一致的数字.但我不想转身;在我右键单击马后,我仍然希望我的播放器能够看到我正在看的位置(在这种情况下是马).
我尝试了一些方法,比如保存我的音高和偏航,然后在取消事件后重新设置它:
@EventHandler
public void onPlayerInteractEntity (PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
float pitch = player.getLocation().getPitch();
float yaw = player.getLocation().getYaw();
if (entity instanceof AbstractHorse) {
event.setCancelled(true);
player.getLocation().setPitch(pitch);
player.getLocation().setYaw(yaw);
AbstractHorse horse = (AbstractHorse) event.getRightClicked();
player.sendMessage(horse.getName());
}
}
并且同样尝试保存玩家的方向(通过player.getLocation().getDirection())然后在取消事件后再次设置它,无济于事.我在这里做错了吗?或者这是一个错误?
最佳答案 好吧,我发现你实际上无法直接编辑球员的投球和偏航.您必须使用自定义音高和偏航值将播放器传送到自定义位置,如下所示:
@EventHandler
public void onPlayerInteractEntity (PlayerInteractEntityEvent event) {
Entity entity = event.getRightClicked();
Player player = event.getPlayer();
float pitch = player.getLocation().getPitch();
float yaw = player.getLocation().getYaw();
if (entity instanceof AbstractHorse) {
event.setCancelled(true);
Location loc = player.getLocation();
loc.setPitch(pitch);
loc.setYaw(yaw);
player.teleport(loc);
AbstractHorse horse = (AbstractHorse) event.getRightClicked();
player.sendMessage(horse.getName());
}
}
所以现在玩家仍然会在右键点击一匹马之前寻找他们所看到的位置,尽管它看起来很奇怪.我相信到目前为止没有别的方法可以做到.