마인크래프트 플러그인 강좌 11강 - [config.yml] saveDefaultConfig(), saveConfig(), reloadConfig() 차이와 실시간 적용 방법
https://github.com/gloomn/blogMCPluginProjects
GitHub - gloomn/blogMCPluginProjects
Contribute to gloomn/blogMCPluginProjects development by creating an account on GitHub.
github.com
플러그인 코드들은 모두 여기 있으니 코드가 필요하시면 다운로드 하시면 됩니다!
이전 강의
https://syntaxack.tistory.com/entry/minecraftplugin10
마인크래프트 플러그인 강좌 10강 - config.yml이란? 생성과 구조 이해하기
이전 강의https://syntaxack.tistory.com/entry/minecraftplugin9 마인크래프트 플러그인 강좌 9강 - GUI 투표 시스템 만들기(paper)이전 강의https://syntaxack.tistory.com/entry/minecraftplugin8 마인크래프트 플러그인 강좌 8
syntaxack.tistory.com
이번 강의 목표
- saveDefaultConfig()는 언제 사용하는가?
- saveConfig()와 reloadConfig()는 무슨 역할을 하는가?
- 저번 강의에서는 서버를 reload 해주어야 했는데 그렇지 않고 config 값을 바꾸는 방법은 무엇인가?
기본 개념 요약
메서드 | 설명 |
saveDefaultConfig() | 처음 한번만 resources/config.yml을 서버로 복사함 |
saveConfig() | 코드에서 설정 값을 바꾼 후 저장함 |
reloadConfig() | 서버에서 변경된 config.yml을 코드에 다시 반영함 |
1. 프로젝트 생성하기
Intellij를 실행해서 새로운 마인크래프트 프로젝트를 만들어준다.
프로젝트 생성 방법을 모르면 아래 링크를 눌러 한 번만 보면 된다.
https://syntaxack.tistory.com/entry/minecraftplugin1
마인크래프트 플러그인 강좌 1강 - 첫 플러그인 만들기
이전 강의https://syntaxack.tistory.com/entry/minecraftplugin0 마인크래프트 플러그인 강좌 0강 - 준비하기마인크래프트 플러그인이란?마인크래프트 플러그인은 마인크래프트 내에서 기능을 확장할 수 있도
syntaxack.tistory.com
1. paper/spigot/sponge 템플릿에서 여러분이 사용하는 버킷 플러그인을 선택한다.
2. 빌드 시스템은 Gradle를 선택한다.
3. 언어는 자바를 선택한다.
4. 마인크래프트 버전은 여러분이 플러그인을 적용항 버전과 paper 버전이 일치하도록 선택한다.
예를 들어서 마인크래프트 버전 1.21.4, paper 버전 1.21.4 이면 1.21.4를 선택한다.
5. 플러그인 이름과 클래스 이름을 적는다.
생성을 눌러준다.
https://syntaxack.tistory.com/entry/minecraftpluginproblem1
마인크래프트 플러그인 강좌 - 잘못된 Gradle JVM 구성을 발견했습니다.
IntelliJ를 사용해서 마인크래프트 플러그인 프로젝트를 만들었을 때 잘못된 Gradle JVM 설정이라는 알람이 뜰 때가 있다.이는 JDK와 Gradle이 호환되지 않아서 발생하는 문제이다.이때는 인터넷 검색
syntaxack.tistory.com
만약 Gradle과 JVM 버전이 안 맞는다는 오류가 뜨면 위의 포스트를 보면 된다.
2. Gradle build 설정
우리는 jar 파일로 빌드할 때 빌드 위치를 바로 플러그인 폴더로 빌드되게 설정할 것이다.
build.gradle 파일을 열어준다.
tasks.jar{
archiveFileName = 'configTest2.jar'
destinationDirectory = file('C:\\Users\\kijoon\\Desktop\\Server\\plugins')
}
3. config.yml 파일 만들기
resources 폴더에 만들어준다.
4. config.yml 작성하기
plugin-name: "기본 플러그인"
broadcast-message: "환영합니다!"
5. ConfigTest2.java 작성하기
package org.blog.configTest2;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
public final class ConfigTest2 extends JavaPlugin {
@Override
public void onEnable() {
saveDefaultConfig(); // config.yml이 없으면 복사
}
@Override
public boolean onCommand(@NotNull CommandSender sender, Command command, String label, String[] args) {
// /broadcast 명령어
if (command.getName().equalsIgnoreCase("broadcast")) {
String message = getConfig().getString("broadcast-message");
Bukkit.broadcast(Component.text("📢 " + message));
return true;
}
// /reloadconfig 명령어
if (command.getName().equalsIgnoreCase("reloadconfig")) {
reloadConfig();
sender.sendMessage("✅ 설정을 다시 불러왔습니다.");
return true;
}
return false;
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
}
6. 코드 설명
@Override
public void onEnable() {
saveDefaultConfig(); // config.yml이 없으면 복사
}
플러그인이 실행될 때 resource/config.yml파일을 서버 폴더의 플러그인 폴더로 복사된다.
@Override
public boolean onCommand(@NotNull CommandSender sender, Command command, String label, String[] args) {
// /broadcast 명령어
if (command.getName().equalsIgnoreCase("broadcast")) {
String message = getConfig().getString("broadcast-message");
Bukkit.broadcast(Component.text("📢 " + message));
return true;
}
// /reloadconfig 명령어
if (command.getName().equalsIgnoreCase("reloadconfig")) {
reloadConfig();
sender.sendMessage("✅ 설정을 다시 불러왔습니다.");
return true;
}
return false;
}
onCommand에 대한 설명은 아래 강의를 참고하길 바란다.
https://syntaxack.tistory.com/entry/minecraftplugin2
마인크래프트 플러그인 강좌 2강 - 커스텀 커맨드 구현
이전 강의https://syntaxack.tistory.com/entry/minecraftplugin1 마인크래프트 플러그인 강좌 1강 - 첫 플러그인 만들기이전 강의https://syntaxack.tistory.com/entry/minecraftplugin0 마인크래프트 플러그인 강좌 0강 - 준비
syntaxack.tistory.com
if (command.getName().equalsIgnoreCase("broadcast")) {
입력된 명령어가 boradcast인지 확인한다. 대소문자 구분 없이 말이다.
String message = getConfig().getString("broadcast-message");
config.yml에 broadcast-message 항목의 값을 읽어온다.
문자열 형식으로 message에 저장된다.
Bukkit.broadcastMessage("📢 " + message);
서버의 모든 플레이어에게 해당 메세지를 보낸다.
return true;
명령어가 정상적으로 처리되었음을 의미한다.
플러그인 내부에서 true를 반환하면 "사용법" 메세지를 출력하지 않는다.
if (command.getName().equalsIgnoreCase("reloadconfig")) {
reloadConfig();
sender.sendMessage("✅ 설정을 다시 불러왔습니다.");
return true;
}
만약 명령어가 대소문자 구분없이 reloadconfig이면 reloadConfig()를 실행한다. 이는 plugins/플러그인명/config.yml 파일을 다시 읽어온다. 서버를 껐다 켜지 않아도 새 설정값을 적용할 수 있다.
return false;
만약 broadcast, reloadconfig 말고 다른 명령어를 입력하면 false를 반환하여 플러그인 사용법이 출력되게 한다.
7. plugin.yml 파일 작성하기
name: configTest2
version: '1.0-SNAPSHOT'
main: org.blog.configTest2.ConfigTest2
api-version: '1.21'
commands:
broadcast:
description: config 메시지를 전체 채팅에 전송
reloadconfig:
description: config.yml 파일 다시 불러오기
명령어 2개를 만들었으니 해당 명령어를 plugin.yml에 적는다.
8. jar 파일로 빌드하기
9. 테스트하기
broadcast 명령어를 사용하면 정상적으로 메세지가 출력된다.
plugins/configTest2/config.yml에 들어가서 broadcast-message를 바꿔본다.
그 다음 저장하고 게임으로 돌아간다.
reloadconfig 명령어를 입력한다.
정상적으로 작동한다.
그 다음 다시 broadcast 명령어를 입력한다.
정상적으로 바뀐 것을 확인할 수 있다.
10. 다음 강의
이번 강의에서 설정 파일을 어떻게 실시간으로 저장하고 불러오는지 배웠다면 다음 강의에서는 실제로 설정 파일에서 다양한 자료형의 값을 읽어보는 실습을 해볼 것이다.
- getString()으로 텍스트 가져오기
- getInt()로 숫자 설정값 읽기
- getBoolean()으로 점검 모드 등 on/off 기능 만들기
/configtest 명령어로 값을 직접 출력해보기
<응용>
플러그인 이름을 설정해서 출력
최대 접속 인원을 제한
점검 모드 여부에 따라 서버 입장 막기까지 확장 가능!
'마인크래프트 플러그인' 카테고리의 다른 글
마인크래프트 플러그인 강좌 13강 - [config.yml] getStringList로 금지어 목록 만들기 실습 (2) | 2025.07.13 |
---|---|
마인크래프트 플러그인 강좌 12강 - [config.yml] getString, getInt, getBoolean 값 읽기 실습 (0) | 2025.06.22 |
마인크래프트 플러그인 강좌 10강 - config.yml이란? 생성과 구조 이해하기 (0) | 2025.06.21 |
마인크래프트 플러그인 강좌 9강 - GUI 투표 시스템 만들기(paper) (6) | 2025.06.21 |
마인크래프트 플러그인 강좌 8강 - 특정 아이템을 들면 버프 주기 (0) | 2025.06.21 |