[Minecraft plugin] 설정 파일 만들기

jong·2021년 3월 7일
0

취미

목록 보기
4/12

플러그인 config.yml 파일 만들기

마인크래프트 서버를 열고 다양한 플러그인을 사용하다 보면 대부분 plugins/(plugin name) 폴더에 config.yml 파일이 대부분 있다.
나도 그 파일을 가지고 싶었기에.. 시작되는 config.yml 파일 만들기

https://bukkit.gamepedia.com/Configuration_API_Reference 를 참고하였습니다.

프로젝트에서 config.yml 파일 생성

config.yml 파일이 없으면 기본으로 생성되어야 하는 디폴트 파일을 만들어 주어야 한다.

config.yml 파일은 plugin.yml과 같은 위치에 있어야 한다고 설명되어 있다.

config.yml 파일 구성은
https://bukkit.gamepedia.com/Configuration_API_Reference#Keys 를 참고하세요.

필자는 config.yml 파일을 다음과 같이 준비했다.

name: "test"
time: 1
contents:
  - "test"
  - "test2"

Main class에 config 추가

https://velog.io/@jong/Minecraft-plugin-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0 에서 이어지는 소스코드입니다.

public class JongPlugin extends JavaPlugin {
+   FileConfiguration config = getConfig();

    @Override
    public void onEnable() {
        //플러그인 활성화
        getLogger().info("Jong Plugin 활성화");
+       this.saveDefaultConfig();
        getCommand("jt").setExecutor(new Command());
    }

보기 쉽도록 추가된 부분에 +를 맨 앞에 붙여놨다. this.saveDefaultConfig()를 통해 config.yml 파일이 존재하지 않는다면 아까 만들어둔 소스대로 플러그인 이름의 폴더에 생성된다.

config 값 불러오기

Main 클래스에서 사용할 때에는 비교적 간단하다.

this.getConfig().getString("name");

위 코드를 통해 불러올 수 있다.

다른 클래스 파일에서 config 값 가져오기

메인 클래스에서는 config 값에 바로 접근할 수 있었다. 그런데 getCommand("jt").setExecutor(new Command())과 같이 명령어 관련 클래스에서 config에 접근하려니 당황스러웠다.

  • 예시 코드
public class Command implements CommandExecutor { //명령어 처리 클래스는 CommandExecutor 인터페이스를 상속해야 한다.

    @Override
    public boolean onCommand(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
        if(sender instanceof Player){ //명령어를 사용자가 입력했으면
            Player player=(Player) sender; //명령어 사용자 객체를 플레이어 객체로 변환
            player.sendMessage("&6아이템을 지급하였습니다.");

+           player.sendMessage(JongPlugin.getPlugin(JongPlugin.class).getConfig().getString("name"));

JongPlugin.getPlugin(JongPlugin.class).getConfig().getString("name") 와 같이 접근하면 다음과 같이 정상적으로 출력이 되는 것을 확인할 수 있다.

profile
공부 기록

0개의 댓글