2017-04-10 5 views
2

Spigot 1.11.2를 사용하고 있습니다. Spigot 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()); 
    } 
} 

내가 말을 마우스 오른쪽 버튼으로 클릭하면, 내가 그 이름을 받아야하지만 때문에 event.setCancelled(true), 그것은을 타고 안이다. 그것은 예상대로 작동하지만 문제는 내가 마우스 오른쪽 버튼으로 클릭 할 때, 게임이 내 견해를 (내 선수의 요) 주위에 일관성이없는 숫자로 바꾼다는 것입니다. 그러나 나는 돌아 서고 싶지 않다. 나는 여전히 내 선수가 말을 우클릭 한 후에 내가보고있는 곳 (이 경우 말)을보고 싶어한다.

I 시도 몇 가지 방법, 이벤트 취소 후 다시 설정 한 후 내 피치와 요 절약 같은 :

@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()를 사용해야와의 요는

+0

OP의 문제에 도움이되지 않습니다. – Kerooker

0

당신은 entity를 사용하는 값 ​​귀하의-경우 상태,하지만 당신은 그것을 선언하지 않았다. 다음 코드 사용 :

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