개인 자료란 (JE)

  서버 커뮤니티

Profile 응애아기제니 대표칭호 없음
Profile

질문하기 플러그인

파이어볼 질문입니다

2024.01.24 조회 수 90 추천 수 0
이해도 초보자 
게임버전 (JE) 1.20.1 
게임버전 (BE) 관련없음 

1.20.2 스피곳 기준이며

@EventHandler
public void isOP_FireBall(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    ItemStack itemInHand = player.getInventory().getItemInMainHand();
    if (!player.isOp()) return;
    // 아이템이 블레이즈막대기 "지팡이"인지 확인
    if (itemInHand.getType() == Material.BLAZE_ROD && itemInHand.hasItemMeta() &&
            itemInHand.getItemMeta().getDisplayName().equals("지팡이")) {
        // 우클릭 확인
        if (event.getAction().name().contains("RIGHT")) {
            launchFireball(player);
        }
    }
}

private void launchFireball(Player player) {
    // 파이어볼 생성 및 발사
    Fireball fireball = player.launchProjectile(Fireball.class);
    // 원하는 파이어볼의 설정 (크기, 속도, 등)
    fireball.setIsIncendiary(false);
    fireball.setYield(5.0F);
    fireball.setVelocity(player.getLocation().getDirection().multiply(5)); // 속도 조절
}

전체 코드는 이렇습니다 문제가 없는거같은데 파이어볼을 발사하면 발사도잘되고 떨어지는지점에서 터지는것도 잘 되는데 나갈때 제몸에서도 한번터져서 저도 데미지를 입습니다 제가 뭘 잘못했을까요? 




4개의 댓글

응애아기제니
2024.01.24

쩝.. 글작성하고 또 혹시나하고 왼손에 방패 빼보니까 잘되네요.. 항상 왼손에방패가문제네..

응애아기제니
2024.01.24
@응애아기제니

혹시 저같은 상황에 놓이신분들

ItemStack itemInHand = player.getInventory().getItemInMainHand(); 를

ItemStack itemInHand = event.getItem(); 로 바꾸시면 됩니다

작은거인
2024.01.24

Action은 Enum이라서 그냥 ==로 확인하시면 됩니다

응애아기제니
2024.01.24
@작은거인

다른코드에선 ==로 확인했었는데 제가아직 경험이 부족한지라 남들이 만들어놓은거 보면서 만드느라 이번엔 contains가 들어갔네요. 감사합니다