*이 글은 Spigot 1.19.3 버전을 기준으로 하여 제작되었습니다.
이전 화
https://zepelown.tistory.com/48
이전 강의에서 만들었던 플레이어 입장 메시지를
config 통해 사용자가 변수 및 색깔 코드까지 설정할 수 있게 해보겠습니다.
이전 화에서 저희는 '경로(path)'라는 걸 배웠습니다.
하지만 일대일로 대응하는 Map이라
저장할 데이터가 많아지면 가독성이 떨어져 불편함이 큽니다.
그래서 sub-path를 지원합니다.
이는 단순하게 .을 추가하면 됩니다.
TestPlugin.java
(메인 클래스)
config.addDefault("join-message.display-message", true);
config.addDefault("join-message.message", "안녕하세요!");
config.options().copyDefaults(true);
saveConfig();
사용자가 message 수정할 때 player 이름의 위치까지 설정할 수 있게 하면 더 좋겠죠??
이 player 이름을 {playername}으로 지정해 보겠습니다.
예를 들자면 {playername} 님 안녕하세요! 를 config에 작성 시
서버에 접속하게 되면
TestNickName 님 안녕하세요!
이렇게 출력하게 되는 겁니다.
먼저 config의 default 값부터 수정하겠습니다.
TestPlugin.java
(메인 클래스)
config.addDefault("join-message.display-message", true);
config.addDefault("join-message.message", "{playername} 님 안녕하세요!");
config.options().copyDefaults(true);
saveConfig();
그 후 접속 시에 플레이어에게 메시지를 전달하면 되는데
이때 String의 메서드 중 replace를 사용하여 {playername}을 실제 플레이어 이름으로 바꿔줍니다.
JoinEvent.java
player.sendMessage(config.getString("join-message.message").replace("{playername}",player.getName()))
정상적으로 출력이 되는 것을 알 수가 있습니다.
이제 여기서 색깔까지 config에 추가해 보겠습니다.
일반적으로 &를 사용합니다.
색깔코드는 https://www.digminecraft.com/lists/color_list_pc.php
를 참고하시길 바랍니다.
예를 들어 노란색으로 메시지를 출력하고 싶다면
위와 같이 작성하게 하는 겁니다.
JoinEvent.java
player.sendMessage(ChatColor.translateAlternateColorCodes('&',config.getString("join-message.message")
.replace("{playername}",player.getName())));
CharColor의 translateAlternateColorCodes 메서드를 사용하여
String에 있는 &를 색깔코드로 바꿔주는 겁니다.
결과는 다음과 같습니다.
마지막으로 이를 관리하는 클래스를 만들어
다른 config message가 생기더라도 반복 작업을 하지 않게 해 보겠습니다.
ChatManager.Java 를 만들어줍니다.
package io.github.zepelown.testplugin;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
public class ChatManager {
public static String prefix = ChatColor.GRAY+"["+ChatColor.YELLOW+"테스트"+ChatColor.GRAY+"]";
public static void sendConfigMessageToPlayer(Player player, String path){
TestPlugin plugin = TestPlugin.getPlugin();
FileConfiguration config = plugin.getConfig();
player.sendMessage(prefix + ChatColor.translateAlternateColorCodes('&',config.getString(path)
.replace("{playername}",player.getName())));
}
public static void sendMessageToPlayer(Player player, String string){
player.sendMessage(prefix + string);
}
}
prefix(접두사)를 만들어 플러그인의 메시지에 일종의 칭호를 달아주고
config의 메시지를 플레이어에게 전달할 메서드와
기존에 사용하던 player.sendMessage 메서드를 대체할 sendMessageToPlayer를 만들어주었습니다.
이제 이 메서드들을 사용하여 JoinEvent.java, TestPlugin.java를 정리 및 마무리해보겠습니다.
TestPlugin.java
(메인 클래스)
package io.github.zepelown.testplugin;
import io.github.zepelown.testplugin.commands.*;
import io.github.zepelown.testplugin.event.BreakEvent;
import io.github.zepelown.testplugin.event.InvClickEvent;
import io.github.zepelown.testplugin.event.JoinEvent;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
public final class TestPlugin extends JavaPlugin {
private static TestPlugin plugin;
FileConfiguration config = this.getConfig();
private void initConfig(){
config.addDefault("join-message.display-message", true);
config.addDefault("join-message.message", "&7{playername} 님 안녕하세요!");
config.options().copyDefaults(true);
saveConfig();
}
private void registerEvents(){
getServer().getPluginManager().registerEvents(new BreakEvent(), this);
getServer().getPluginManager().registerEvents(new InvClickEvent(), this);
getServer().getPluginManager().registerEvents(new JoinEvent(), this);
}
private void registerCommands(){
getServer().getPluginCommand("thelp").setExecutor(new Help());
getServer().getPluginCommand("tgivedia").setExecutor(new GiveDia());
getServer().getPluginCommand("topeninv").setExecutor(new OpenInv());
getServer().getPluginCommand("tgetpotion").setExecutor(new GetPotion());
}
@Override
public void onEnable() {
plugin = this;
// Plugin startup logic
getLogger().info("플러그인 활성화!!");
registerCommands();
registerEvents();
initConfig();
}
@Override
public void onDisable() {
// Plugin shutdown logic
getLogger().info("플러그인 비활성화");
}
public static TestPlugin getPlugin() {
return plugin;
}
}
config의 default 값을 수정하고 기존에 있던 코드들을 가독성 좋게 변경하였습니다.
JoinEvent.java
package io.github.zepelown.testplugin.event;
import io.github.zepelown.testplugin.ChatManager;
import io.github.zepelown.testplugin.TestPlugin;
import org.bukkit.ChatColor;
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();
ChatManager.sendConfigMessageToPlayer(player, "join-message.message");
}
}
ChatManager를 사용하여 메시지를 전달하였습니다.
최종 결과물입니다.
'마인크래프트 > 플러그인 제작 강좌(자바)' 카테고리의 다른 글
[인텔리제이로 마크 플러그인 개발하기](보충) 플레이어 퇴장시 공지사항(PlayerQuitEvent 와 PlayerKickEvent의 관계) (5) | 2023.01.21 |
---|---|
[인텔리제이로 마크 플러그인 개발하기](보충) 플레이어 입장 시 공지사항 수정하기 (2) | 2023.01.19 |
[인텔리제이로 마크 플러그인 개발하기]9. config.yml 제작하기 1편 (플레이어 입장 메시지 만들기) (0) | 2023.01.13 |
[인텔리제이로 마크 플러그인 개발하기]8. 나만의 포션 제작하기 (커스텀 포션) (0) | 2023.01.11 |
[인텔리제이로 마크 플러그인 개발하기](보충) Gradle로 jar 빌드하기 (0) | 2023.01.10 |
댓글