2017-04-10 8 views
2

私はスピゴット1.11.2を使用しています。 スピゴットPlayerInteractEntityEvent

私はこの単純なコードを持っている:行うことになっているもの

@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()); 
    } 
} 

私は馬を右クリックした場合、私はその名前を取得する必要がありますが、私は理由​​の、それに乗るべきではないです。それは期待どおりに機能しますが、問題は、私が馬を右クリックすると、ゲームは私の視界(私のプレーヤーのヨー)を一定しない数に変えてしまうことです。しかし、私は回りたいとは思わない。私はまだ馬を右クリックした後、私のプレイヤーが見ている場所(この場合は馬)を見てほしい。

私は、イベントをキャンセルした後、再びそれを設定、その後、私のピッチとヨーを保存するようないくつかの方法を、試してみました:

@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()経由)プレイヤーの方向を保存しようとしたが、その後キャンセルした後、再びそれを設定しますイベント、無駄に。私はここで何か間違っていますか?それともバグですか?

答えて

1

まあ、私はあなたが実際に直接プレイヤーのピッチとヨーを編集することはできませんことがわかりました。

@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()); 
    } 
} 

はだから今、プレイヤーがまだあるが、彼らは右クリックし、馬の前に見ていたところに見られる:あなたはこのように、カスタムのピッチとヨー値とカスタムの場所にプレイヤーをテレポートする必要がありますそれは不愉快に見える。これまでにこれを行う方法は他にありません。

-1

あなたはピッチを取得するためにplayer.getEyeLocation()を使用する必要があるとヨーは、あなたの場合、条件でentityを使用しているが、あなたはそれを宣言したことがない

+0

OPの問題には役に立ちません – Kerooker

0

値。このコードを使用:

@EventHandler 
public void onPlayerInteractEntity (PlayerInteractEntityEvent event) { 
    Entity entity = event.getRightClicked(); 

    if (entity instanceof AbstractHorse) { 
     event.setCancelled(true); 

     AbstractHorse horse = (AbstractHorse) entity; 
     Player player = event.getPlayer(); 
     player.sendMessage(horse.getName()); 
    } 
} 
+0

これは当てはまりますが、問題ではありません。下の私の答えをチェック – Kerooker

0

あなたはVehicleEnterEventを探しています。エンティティが別のエンティティ(馬、ミニカード、またはその他のエンティティを含む)に乗るときにスローされるイベントです。

それは、それを実装する方法についてspigot javadocs


クイック例で定義されています:

@EventHandler 
public void onHorseMount(VehicleEnterEvent e) { 
    Entity entered = e.getEntered(); 
    Vehicle enteredOn = e.getVehicle(); 
    if (enteredOn instanceof AbstractHorse) { 

     //Entity entered a Horse 

     if (!(entered instanceof Player))return; //Returns if this is not a player 

     Player mountingHorse = (Player) entered; 
     AbstractHorse horseEntered = (AbstractHorse) enteredOn; 
     mountingHorse.sendMessage(horseEntered.getName()); //Sending the message 
     e.setCancelled(true); 
    } 
}