본문 바로가기
마인크래프트/플러그인 제작 강좌(자바)

[인텔리제이로 마크 플러그인 개발하기]12. 채팅 및 탭리스트에 칭호 달기

by Zepelown 2023. 2. 6.

이 글은 Spigot 1.19.3 버전을 기준으로 하여 제작되었습니다.

 

이전 강의

https://zepelown.tistory.com/56

 

[인텔리제이로 마크 플러그인 개발하기]11. config.yml 제작하기 3편 (플레이어 데이터 저장 및 신규

*이 글은 Spigot 1.19.3 버전을 기준으로 하여 제작되었습니다. 이전 강의 https://zepelown.tistory.com/51 [인텔리제이로 마크 플러그인 개발하기](보충) 플레이어 퇴장시 공지사항(PlayerQuitEvent 와 PlayerKick *

zepelown.tistory.com


이전 강의에서 플레이어에게 랭크를 임의로 부여하였습니다.

 

이 랭크를 채팅이랑 탭리스트에 표시해 보도록 하겠습니다.

 

이번 강의는 그렇게 어렵지 않으니 금방 따라하실 수 있을 겁니다.

 


먼저 채팅 앞에 칭호를 붙여보겠습니다.

 

새로운 클래스를 만들어줄게요.

 

ChatEvent.java

package io.github.zepelown.testplugin.event;

import io.github.zepelown.testplugin.TestPlugin;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class ChatEvent implements Listener {

    static TestPlugin plugin = TestPlugin.getPlugin();

    @EventHandler
    public void onChat(AsyncPlayerChatEvent e) {
        Player player = e.getPlayer();
        String rank = plugin.getConfig().getString("players." + player.getName() + ".rank");
        e.setFormat("[" + rank + "] " + player.getName() + " : " + e.getMessage());
    }
}

정말 간단합니다.

 

rank 값은 config에서 불러오고

 

setFormat 메서드를 사용해 채팅의 형식을 정해줍니다.

 

여기서  e.getMessage()를 빼먹으면 채팅이 나오지 않으니 주의해 주세요.

 

 

자세한 디테일(색깔)은 이후 강의에서 직업, 랭크들을 상세하게 다룰 때

 

한 번에 정리할 예정입니다.

 

만약 색깔을 추가하고 싶다면


탭 리스트에 칭호를 뜨게 하는 방법은 더 쉽습니다.

 

플레이어가 입장할 때 칭호를 부여하면 됩니다. 

 

JoinEvent.jar

package io.github.zepelown.testplugin.event;

import io.github.zepelown.testplugin.ChatManager;
import io.github.zepelown.testplugin.TestPlugin;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class JoinEvent implements Listener {


    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {

        Player player = e.getPlayer();
        TestPlugin plugin = TestPlugin.getPlugin();
        String playerName = player.getName();
        FileConfiguration config = plugin.getConfig();

        //만약 플레이어의 정보가 없다면
        if (!config.contains("players." + playerName)) {
            if (config.getBoolean("message.new-player-join-message.display-message"))
                plugin.getServer().broadcastMessage(ChatManager.getConfigMessage("message.new-player-join-message.message").replace("{playername}", playerName));
            config.set("players." + playerName + ".rank", "newbie");
            config.set("players." + playerName + ".job", "jobless");
        } else {
            ChatManager.sendMessageToPlayer(player, "최근 접속 시간 : " + config.getString("players." + playerName + ".recent-join-date"));
        }
        player.setPlayerListName("[" + config.getString("players." + playerName + ".rank") + "] " + playerName);
        if (config.getBoolean("message.join-message.display-message"))
            e.setJoinMessage(ChatManager.getConfigMessage("message.join-message.message").replace("{playername}", playerName));
        plugin.saveConfig();
    }


}

코드가 딱 한 줄 추가 됐습니다.

player.setPlayerListName("[" + config.getString("players." + playerName + ".rank") + "] " + playerName);

 


결과물입니다.

 

 

댓글