개인 자료란 (JE)

  서버 커뮤니티

Profile d1092 대표칭호 없음
Profile

질문하기 플러그인

플러그인에 이제 막 입문했습니다ㅠㅠ 도와주세요

16 일 전 조회 수 241 추천 수 1
이해도 입문자 
게임버전 (JE) 1.19.2 
게임버전 (BE) 관련없음 

발사체로 유리를 두 번 맞추면 성공이라는 메시지가 나오고 다시 유리를 두 번 맞춰도 성공이라는 메시지가 나오게 할려고 했는데 안되 가지고요 ㅠㅜㅠ 도와주실 분 있으면 도와주시면 감사하겠습니다


아래는 코드입니다

@EventHandler

    public void aedpopq(ProjectileHitEvent e) {

        int i = 1;
        int i1 = 2;
        Player p = (Player) e.getHitEntity();

        if (e.getEntity() instanceof Snowball) {

            if (e.getHitBlock().getType() == Material.GLASS) {

                System.out.println(i1 - i);

                if (i1 == 0) {
                    p.sendMessage("성공");
                    i1 = 2;
            }
        }
    }
}

12개의 댓글

Dalsu
16 일 전

코드 알고리즘 자체가 잘못되었습니다. 자바를 조금 더 배우고 오시는걸 추천드립니다

d1092
16 일 전
@Dalsu

그럼 어디에서 잘못됐는지 알수 있을까요?


 

@d1092

1. i1 값이 method 안에 있음 ( method 밖에 나두는 형식으로 바꿔야함 )

2. i1 값이 바뀌지 않음( i1 -1 은 값을 바꾸는게 아닙니다)

 

코드 느낌마다 다르겠지만 번외

3. 위에걸 고쳤어도 다른 플레이어 혹은 다른 위치의 유리에 쏘더라도 성공으로 뜨게됨

0reo
16 일 전

메소드 안에서만 처리되는 지역변수가지고는 못만듭니다 저거도 제가 전에 딴분한테 써드렸던거 코드 어찌 변경해서 쓰시는거같은데 eventhandler 어노테이션이 붙은경우에는 이벤트가 일어났을때 호출되는거라.. 호출당할때마다 매번 초기화당하는걸 아시면 될거같아요

0reo
16 일 전
private static HashMap<Player, Integer> map = new HashMap<>();
@EventHandler
public void onHit(ProjectileHitEvent e) {
    if (e.getEntity() instanceof Player shooter) {
        if (e.getHitBlock() != null) {
            if (e.getHitBlock().getType().equals(Material.GLASS)) {
                if (map.get(shooter) == null) {
                    map.put(shooter, 1);
                } else if (map.get(shooter) == 2) {
                    shooter.sendMessage("success!");
                    map.put(shooter, 0);
                } else {
                    map.put(shooter, map.get(shooter) + 1);
                }
            }
        }
    }
}

테스트 안해봤습니다

0reo
16 일 전
@0reo

윗분 댓글대로 구현하려면 머리 좀 아플거에요 ㅋㅋ 3번에 집어주신거 고치려면 메타데이터쓰면 편할겁니다

d1092
15 일 전
@0reo

앗 알겠습니다!

 

d1092
15 일 전
@0reo

어.. 저 그 위에 코드를 해보았는데 안돼가지고요.. 어떻게 해결할수 있을까용?

0reo
15 일 전
@d1092

e.getEntity 대신에 e.getEntity().getShooter()로 바꿔보세요

d1092
15 일 전
@0reo

아 감사합니당 혹시 실례가 안된다면 눈덩이나 엔더진주 말고 화살로만 맞췄을 때 작동되는 방법도 알려주실 수 있나용?

0reo
15 일 전
@d1092

e.getEntity instanceof Arrow 조건문 넣으세요

0reo
15 일 전
@0reo

자바 기초도좀 익히시는게 나을거같아요 그리고

뉴스 및 창작물
/files/thumbnails/305/420/003/262x150.crop.jpg?20230207232544

업데이트

마인크래프트 1.19.4 스냅샷 23w04a 업데이트

마리오군

2023-02-07

1

/files/thumbnails/992/417/003/262x150.crop.jpg?20230206022118

건축

안녕하세요 마인크래프트 건축하는 유저입니다 :) 3

준아키

2023-02-06

1

/files/thumbnails/966/417/003/262x150.crop.jpg?20230206125413

건축

BE로 이것저것 건축하는 아마추어 건축가입니다! 5

NICKY

2023-02-06

3

/files/thumbnails/356/417/003/262x150.crop.jpg?20230205190831

모델링

대나무낚싯대를 만들어보자 ! [ 스피드모델링 ] 1

미초는미초

2023-02-05

2

/files/thumbnails/018/417/003/262x150.crop.jpg?20230205140341

애니메이터

아재개그

GlassesFilm

2023-02-05

0