그래서 내가하고있는 일은 플레이어가 PlayerInteractEvent
을 사용하여 공기를 오른쪽 클릭하면 플레이어의 타겟 블록을 가져 와서 "블록"이라는 변수로 저장하는 것입니다.버튼을 누르기 (먼 곳에서)
이 모든 것은 정상적으로 작동하지만이 블록과 버튼이 맞는지 확인하고 싶습니다. 그렇다면 "밀어 넣기"만하면됩니다. 그 형태는 참으로 버튼 인 경우
내가 확인 후 org.bukkit.material.Button
에 블록을 캐스팅 시도, 그때과 같이 전원으로 설정합니다 ((Button) block.getState().getData()).setPowered(true);
,하지만 난 다음 시도 그래서 아무 짓도 안 했어요 : block.setData((byte) (block.getData() | 0x8)));
을, 그 그것을 켜 놓았지만 계속 머물렀다.
어떻게하면 제대로 할 수 있습니까?
@SuppressWarnings("deprecation")
@EventHandler
public void onPlayerInteraction(PlayerInteractEvent e) {
if (e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
Block block = e.getPlayer().getTargetBlock((Set<Material>) null, 200);
if (block.getType().equals(Material.STONE_BUTTON) || block.getType().equals(Material.WOOD_BUTTON)) {
block.setData((byte) (block.getData() | 0x8));
}
}
}
PS :
여기에 전체 코드 나는 Spigot 1.12.2 API
을 사용하고 있습니다.
아, 그래서, 당신은 공기 이벤트에서 마우스 오른쪽 버튼으로 클릭이 자동으로 bukkit 취소 때문에, 취소 무시 추가해야합니다. '@EventHandler (ignoreCancelled = true)'를 시도하십시오. – i0xHeX
댓글 상자에 "댓글을 사용하여 더 많은 정보를 요청하거나 개선을 제안합니다."라고 표시됩니다. 단순히 "이것이 작동하지 않는다"고 말하면 무엇이 잘못되었는지 찾아내는 데 도움이되지 않습니다. – Moira
그래, 버튼을 클릭하는 방법을 알아 냈어.하지만 이제는 플레이어가 아무 아이템도 가지고 있지 않을 때 공중에서 오른쪽 클릭을 감지하는 또 다른 문제가있다. –