개인 자료란 (JE)

  서버 커뮤니티

Profile d1092 대표칭호 없음
Profile

질문하기 플러그인

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

2023.01.23 조회 수 257 추천 수 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
2023.01.23

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

d1092
2023.01.23
@Dalsu

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


 

@d1092

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

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

 

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

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

0reo
2023.01.23

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

0reo
2023.01.23
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
2023.01.23
@0reo

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

d1092
2023.01.24
@0reo

앗 알겠습니다!

 

d1092
2023.01.24
@0reo

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

0reo
2023.01.24
@d1092

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

d1092
2023.01.24
@0reo

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

0reo
2023.01.24
@d1092

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

0reo
2023.01.24
@0reo

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

뉴스 및 창작물
/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1

/files/thumbnails/576/775/003/262x150.crop.jpg?20240426232553

아티클

이달의 블록: 단단한 진흙

학교가기싫다

2024-04-26

0