개인 자료란 (JE)

  서버 커뮤니티

Profile choigun08 대표칭호 없음
Profile

플러그인 제작

[Paper 1.15 플러그인 만들기] 4.명령어 제작하기

2020.05.04 조회 수 1950 추천 수 0

안녕하세여 쵸건이에요!

오늘은 플레이어 커맨드를 만들어보도록 하겠습니다.

그냥 커맨드 치면 아무 글자나 나오는 커맨드를  만들어보도록 하겠습니당.

응용은 나중에 해보죠


개발환경 : IntelliJ Idea Community(무료, Jetbrains, 설치방법)

choigun 디스코드 : choigun#1497

https://www.koreaminecraft.net/highquality/1647042

저번에 하던 프로젝트로 이어서 해볼게융

일단 인텔리제이 켜서 프로젝트 들어가줍니다.

e3a7b31a766d84c2a957a6b8835f1b53.png

(매일 보던 화면)

프로젝트에 들어오면

빨간색 줄 친 곧을 우클릭해주세요.


4188f8411bc5050100832b1916772bf9.png

그럼 이렇게 드롭다운 메뉴가 뜨는데

New -> Package를 눌러줍니다.

bcf1494ec027a186c6890bfc174726fe.png

이렇게 새로운 패키지 생성하는 창이 뜨면

Commands를 적어줍니다.

이 패키지는 명령어들을 모아둘 패키지입니다.

5dbb159a54ac54e3001df4a35fd8b295.png

짜잔! 이렇게 패키지 하나가 생겼습니다.

이 패키지를 또 우클릭 해주세요.


7ed05c755e0933581e1e4d8212096785.png

이번엔 New -> Java Class를 클릭해주세요.


129932e5d144011baeb7e407847dcde5.png

저 위에 입력란에는 커맨드 이름 등을 입력해주시면 됩니당.

Class를 클릭해줍니다.

bea41294d4308dfdf1b276a04d3e1543.png

됬네요!

이제 생성한  클래스로 들어가서

CommandExecutor를 구현(implements)해줍니다.

20a17cb62334131b28868b42eb59ef6e.png

빨간줄이 뜹니다.

자바 배우신분은 알텐데 

CommandExecutor 인터페이스에서 public으로 선언된 onCommand를 

구현하지 않아서 뜨는 에러입니다.

onCommand 메소드를 구현해주면 되는데

인수들 다 쓰기 힘드니까 모두들 자동완성을 애용합시다.

e319e00e3c47abd955a73cd998cf1d35.png

 TAB!!

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    return false;
}

b1707ee41c4fd01dd64538c4f1ec0c90.png

이게 생깁니다.

return false;를 일단 지워줍시다.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    
}

onCommand 메소드 안에

플레이어인지 체크하는 구문을 넣어줍니다.

if(!(sender instanceof Player)) {
    sender.sendMessage("죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");
    return false;
}

이거를 onCommand에 넣어주고

onCommand에 마지막으로 return false를 해주세요.


@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(!(sender instanceof Player)) {
        sender.sendMessage("죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");
        return false;
    }
    return false;
}

이제 클래스의 생성자를 만들어줍니다.

d91f0b83c66c0bf75618c5de33444403.png

여기에 인수로

메인 클래스를 넣어주세요.

저는 메인클래스가 Paper115Learn이라

Paper115Learn을 인수로 받았어요

instance로 받읍니다.

798de4fed35441a7d09925015e4f37e2.png

그리고 클래스에 전역변수를 2개 생성해주는데

915293d2d3abd5f12f9b8c57bfb182de.png

이렇게 생성해줍니다.

plugin의 변수형은 메인클래스로 해주세요.

그리고 클래스 생성자에 

d5f634d84a957b27c9c366cf17a7cb4d.png

이렇게 해줍니다.

plugin.prefix에서 에러뜨시는분은 메인클래스에서 prefix가 public으로 되있는지 확인해주세요.

그럼 이제

onCommand의

sender.sendMessage("죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");

여기 앞부분에 prefix를 추가할수있습니다.


sender.sendMessage(prefix + "죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");

prefix까지 넣었고!

이제 메인클래스에서 커맨드를 등록해줍시다

  메인클래스로 가주세요.

전역 변수로 명령 클래스를 선언해줍니다.

b1bdeff01ba0ed58b6a740abf04cb823.png

이름은 잘 알아볼수 있도록 해주시고

onEnable 메소드에서 test를 초기화해주세요.

2ae91beac710fc7444b44a14494e0fd6.png

그리고 이제 커맨드를 잡아봅시다(?).

e03232a13cf180aa055b9e8042632c20.png

이 구문은 자주쓰니 기억해두세요.

a9ad139e1eed455ac61c4e54653341cd.png

Build

그리고 플러그인 넣어주세요.

버킷에 가서 reload 처줍니다.cbc558948c76a600612d6f2557b1bc43.png

8a21e9383ce07f2c63a3b61c745a4d15.png

test 버킷에서 쳐줍니다.
a36ad89d019514315eca7defbea10344.png

의도대로 버킷에선 잘 막힙니다.

플레이어가 치면 아무일도 안일어나게됩니다.

이제 여기에 메시지 하나를 추가해봅시당.

인텔리제이로 돌아와서

명령어 클래스로 가주세요.

onCommand에 이걸 추가시켜줍니다.

Player player = (Player)sender;
player.sendMessage("TEEEEEEEEEEEEEEEEEEEEEEEEEEST!!");

21ba6e6b2d4ee0bbce3c65074a83f83a.png

끝났어요.

(하 쓰기 힘들다)

다시 빌드하고 적용 해주세요.

b7a28e7763b1657247eabeecec783227.png

인게임에서 test 쳐봅시다.

65f98fada74f7884233e1fa9824eeb0e.png

206213b5cb77b2cf887dbef9c06c8d09.png

굳!

안되시는분은 choigun#1497로!

다음에 만나요! ㅂㅂ


2개의 댓글

KimLotTV
2020.05.11

설마 이거때문에 우리서버에 /test 라는 명령어가 존재했었다?!

마르카
2020.08.31

sendMassage 말고 다른 이벤트는 없나요?

뉴스 및 창작물
/files/thumbnails/477/930/003/262x150.crop.jpg?20241201030912

레드스톤

뉴진스 - Super Shy | 마크 노트블럭 커버

노트블럭전문가

2024-12-01

0

/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA 3

노트블럭전문가

2024-11-27

1

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ? 1

팀뉴일리시

2024-11-23

5

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 6

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2