분야 | 플러그인 |
---|---|
장르 | 개발자 툴 |
게임버전 | 모든버전 |
API | 버킷, 스피곳, 페이퍼 |
이 글은 개인 블로그에 작성한 내용을 공유하는 글 입니다.
( 해당 블로그에서 원본을 보실 수 있습니다. https://cchplugin.tistory.com/ )
https://cchplugin.tistory.com/14
해당 강좌를 다 보신 후 보신다면 쉽게 응용 하실 수 있을 것이라 생각합니다.
안녕하세요.
오늘은 클릭 가능한 채팅을 구현하는 방법에 대해서 알아보겠습니다.
bukkit 버전 1.12.2 기준에서 진행하도록 하겠습니다.
예시로 들어드릴 플러그인의 기능은 다음과 같습니다.
1. /대전 신청 [닉네임] 명령어를 입력
2. [닉네임]을 가진 플레이어에게 다음과 같은 메시지를 보냄.
3. [수락] 을 클릭시 /대전 수락 이라는 명령어를 실행함.
4. [거절] 을 클릭시 /대전 거절 이라는 명령어를 실행함.
5. [수락], [거절] 에 마우스를 올릴 시 다음과 같은 메시지를 출력함.
전체 코드는 다음과 같습니다.
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
try {
Player player = (Player) sender;
if (args.length == 1) {
if (args[0].equals("수락")) {
player.sendMessage("대전을 수락 했습니다");
} else if (args[0].equals("거절")) {
player.sendMessage("대전을 거절 했습니다");
} else {
player.sendMessage(plugin.getConfig().getString("메시지.대전설명"));
}
} else if (args.length == 2 && args[0].equals("신청")) {
Player player1 = Bukkit.getPlayer(args[1]);
player.sendMessage( "§l§2"+ player1.getName() + " 님께 대전 신청을 했습니다.");
player1.sendMessage("§l§2" + player.getName() + " 님으로 부터 대전 신청이 왔습니다.");
PlayerConnection connection = ((CraftPlayer) player1).getHandle().playerConnection;
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a(
"{\"text\":\"§a[수락]\",\"bold\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/대전 수락\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":[\"\",{\"text\":\"§a대전을 수락합니다.\",\"bold\":true}]}}"));
PacketPlayOutChat packet1 = new PacketPlayOutChat(ChatSerializer.a(
"{\"text\":\"§c[거절]\",\"bold\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/대전 거절\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":[\"\",{\"text\":\"§c대전을 거절합니다.\",\"bold\":true}]}}"));
connection.sendPacket(packet);
connection.sendPacket(packet1);
} else {
player.sendMessage(plugin.getConfig().getString("메시지.대전설명"));
}
} catch (Exception e) {
}
return true;
}
단계 별로 설명 드리겠습니다.
1. 메시지를 받게 될 플레이어를 선언하고 입력하는 부분입니다.
PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
2. 다음 과 같이 입력 후 빈 공간에 json 형식으로 원하는 텍스트, 클릭이벤트 ,등의 정보를 입력합니다.
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a(" /*빈공간*/ "));
3. 아래 사이트에서 json 형식에 맞추어 쉽게 작성 할 수 있습니다.
4. 처음 접속하시면 이런 식으로 페이지가 구성되어 있습니다.
5. 아래 그림처럼 따라 하시기 바랍니다.
6. 원하는 글씨, 클릭시 실행될 명령어 , 마우스 올릴 시 보여질 글씨 등을 입력후 save를 눌려주세요.
7. save를 눌릴시 다음과 같은 결과가 나타납니다.
8. 저희가 필요한 부분은 { 부터 시작해서 } 까지 부분입니다. 저 부분만 복사 해줍니다.
9. 아까 입력하려 했던 빈 공간에 붙혀넣어 줍니다.
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a(" /*빈공간*/ "));
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a("{"text":"[수락]","bold":true,"color":"green","clickEvent":{"action":"run_command","value":"/대전 수락"},"hoverEvent":{"action":"show_text","value":[""]}}"));
10. 보내고자 하는 클릭가능한 메시지를 선언, 입력하는 부분이 끝났습니다.
11. 플레이어에게 메시지를 보내는 문구입니다.
connection.sendPacket(packet);
실행 결과는 아래 영상에서 확인 가능합니다.
roa9618
2021.10.27좋은 정보 감사합니다.
업로드
2022.06.05PacketPlayOutChat을 사용하면 에러만 뜨는데 따로 임포트 해야하는것이 있나요?