안녕하세여 쵸건이에요!
오늘은 플레이어 커맨드를 만들어보도록 하겠습니다.
그냥 커맨드 치면 아무 글자나 나오는 커맨드를 만들어보도록 하겠습니당.
응용은 나중에 해보죠
개발환경 : IntelliJ Idea Community(무료, Jetbrains, 설치방법)
choigun 디스코드 : choigun#1497
https://www.koreaminecraft.net/highquality/1647042
저번에 하던 프로젝트로 이어서 해볼게융
일단 인텔리제이 켜서 프로젝트 들어가줍니다.
(매일 보던 화면)
프로젝트에 들어오면
빨간색 줄 친 곧을 우클릭해주세요.
그럼 이렇게 드롭다운 메뉴가 뜨는데
New -> Package를 눌러줍니다.
이렇게 새로운 패키지 생성하는 창이 뜨면
Commands를 적어줍니다.
이 패키지는 명령어들을 모아둘 패키지입니다.
짜잔! 이렇게 패키지 하나가 생겼습니다.
이 패키지를 또 우클릭 해주세요.
이번엔 New -> Java Class를 클릭해주세요.
저 위에 입력란에는 커맨드 이름 등을 입력해주시면 됩니당.
Class를 클릭해줍니다.
됬네요!
이제 생성한 클래스로 들어가서
CommandExecutor를 구현(implements)해줍니다.
빨간줄이 뜹니다.
자바 배우신분은 알텐데
CommandExecutor 인터페이스에서 public으로 선언된 onCommand를
구현하지 않아서 뜨는 에러입니다.
onCommand 메소드를 구현해주면 되는데
인수들 다 쓰기 힘드니까 모두들 자동완성을 애용합시다.
TAB!!
@Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { return false; }
이게 생깁니다.
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; }
이제 클래스의 생성자를 만들어줍니다.
여기에 인수로
메인 클래스를 넣어주세요.
저는 메인클래스가 Paper115Learn이라
Paper115Learn을 인수로 받았어요
instance로 받읍니다.
그리고 클래스에 전역변수를 2개 생성해주는데
이렇게 생성해줍니다.
plugin의 변수형은 메인클래스로 해주세요.
그리고 클래스 생성자에
이렇게 해줍니다.
plugin.prefix에서 에러뜨시는분은 메인클래스에서 prefix가 public으로 되있는지 확인해주세요.
그럼 이제
onCommand의
sender.sendMessage("죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");
여기 앞부분에 prefix를 추가할수있습니다.
sender.sendMessage(prefix + "죄송합니다. 플레이어만 이 명령어를 사용할 수 있습니다.");
prefix까지 넣었고!
이제 메인클래스에서 커맨드를 등록해줍시다
메인클래스로 가주세요.
전역 변수로 명령 클래스를 선언해줍니다.
이름은 잘 알아볼수 있도록 해주시고
onEnable 메소드에서 test를 초기화해주세요.
그리고 이제 커맨드를 잡아봅시다(?).
이 구문은 자주쓰니 기억해두세요.
Build
그리고 플러그인 넣어주세요.
버킷에 가서 reload 처줍니다.
굳
test 버킷에서 쳐줍니다.
의도대로 버킷에선 잘 막힙니다.
플레이어가 치면 아무일도 안일어나게됩니다.
이제 여기에 메시지 하나를 추가해봅시당.
인텔리제이로 돌아와서
명령어 클래스로 가주세요.
onCommand에 이걸 추가시켜줍니다.
Player player = (Player)sender; player.sendMessage("TEEEEEEEEEEEEEEEEEEEEEEEEEEST!!");
끝났어요.
(하 쓰기 힘들다)
다시 빌드하고 적용 해주세요.
인게임에서 test 쳐봅시다.
굳!
안되시는분은 choigun#1497로!
다음에 만나요! ㅂㅂ
KimLotTV
2020.05.11설마 이거때문에 우리서버에 /test 라는 명령어가 존재했었다?!
마르카
2020.08.31sendMassage 말고 다른 이벤트는 없나요?