개인 자료란 (JE)

  서버 커뮤니티

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 123,105명 ( +65명 )

※ 장기간 미활동 회원 제외

Profile cch 대표칭호 없음

Hello_OvO 449ebec3985c41808f68c1af338770e7

Profile

커뮤니티new 개발자란new 개발자 강좌new 플러그인

[마인크래프트 플러그인 제작 강의] 7-1 강 클릭 가능한 채팅 구현하기.

2020.07.22 조회 수 478 추천 수 0

이 글은 개인 블로그에 작성한 내용을 공유하는 글 입니다.

( 해당 블로그에서 원본을 보실 수 있습니다.  https://cchplugin.tistory.com/ )


https://cchplugin.tistory.com/14
해당 강좌를 다 보신 후 보신다면 쉽게 응용 하실 수 있을 것이라 생각합니다.



 

안녕하세요. 

 

오늘은 클릭 가능한 채팅을 구현하는 방법에 대해서 알아보겠습니다.

 

bukkit 버전 1.12.2 기준에서 진행하도록 하겠습니다.

 

예시로 들어드릴 플러그인의 기능은 다음과 같습니다.

 

1. /대전 신청 [닉네임] 명령어를 입력

2. [닉네임]을 가진 플레이어에게 다음과 같은 메시지를 보냄.

ff7288c66d7708a96ecb1d221a15df07.jpeg

3. [수락] 을 클릭시 /대전 수락 이라는 명령어를 실행함.

4. [거절] 을 클릭시 /대전 거절 이라는 명령어를 실행함.

5. [수락], [거절] 에 마우스를 올릴 시 다음과 같은 메시지를 출력함.

 

439ed59fea5e1af7d566fac49f9eac56.jpeg


 

e177e20d8c7be8f2eaa92b50575d8c16.jpeg


 

전체 코드는 다음과 같습니다.


@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 형식에 맞추어 쉽게 작성 할 수 있습니다.

https://minecraftjson.com/

 

4. 처음 접속하시면 이런 식으로 페이지가 구성되어 있습니다.

48c46d7e03c09345f4a11c280043422b.jpeg


5. 아래 그림처럼 따라 하시기 바랍니다.

 

fefdacb7aa5360b121f638d212365f6d.jpeg


 

6. 원하는 글씨, 클릭시 실행될 명령어 , 마우스 올릴 시 보여질 글씨 등을 입력후 save를 눌려주세요.

 

b62da9921b122e2d6123dca48ad44ddc.jpeg


 

7. save를 눌릴시 다음과 같은 결과가 나타납니다.

 

75233f73e45722c8646add60f0539992.jpeg


8. 저희가 필요한 부분은 { 부터 시작해서 } 까지 부분입니다. 저 부분만 복사 해줍니다.

71a6801d47f889aa2b6111793c7b1f07.jpeg


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);

 

실행 결과는 아래 영상에서 확인 가능합니다.

 

https://youtu.be/4UHZgkBWID0

 


1개의 댓글

roa9618
1 일 전

좋은 정보 감사합니다.

컨텐츠
https://www.koreaminecraft.net/files/thumbnails/180/890/002/262x150.crop.jpg?20211025201038

시험지

한마탐 5주차 (한마포 마인크래프트 탐구 영역) (10 / 25) 4

베개냥이

2021-10-25

2

https://www.koreaminecraft.net/files/thumbnails/291/881/002/262x150.crop.jpg?20211021165153

데일리픽

초간단 전투기 만들기 8

megat88

2021-10-20

4

https://www.koreaminecraft.net/files/thumbnails/850/878/002/262x150.crop.jpg?20211018191640
(포션 시리즈) 3편 - 비 3

GlassesFilm

2021-10-18

4