개인 자료란 (JE)

  서버 커뮤니티

Profile cch 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

[마인크래프트 플러그인 제작 강의] 4강 변수, config파일 만들기

2020.04.18 조회 수 1661 추천 수 1
분야 플러그인 
장르 개발자 툴 
게임버전 모든버전 
API 스피곳, 페이퍼 


이 글은 개인 블로그에 작성한 내용을 공유하는 글 입니다.
(공유 하는 과정에서 누락된 이미지나 글이 있을 수 있습니다. )

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



블로그글을 복사해서 붙혀넣기 시 이미지 첨부가 정상적으로 되지 않네요.

블로그 글을 참고하시는 것을 추천드립니다.

링크 : https://cchplugin.tistory.com/9


안녕하세요.

 

오늘은 저번 강좌에 이어 변수에 대해서 좀 더 자세히 알아본 후, 

 

config 파일을 만드는 방법에 대해서 알려드리겠습니다.

 

 

 

 

저번 시간에 숫자(정수)를 저장하는 상자 ( int형 변수 )를 선언하고, 대입하는 방법에 대해서 배웠습니다.

 

int count = 1;

자바에서는 int형을 제외하고도 다양한 데이터타입 ( 문자, 참거짓, 실수, 등)을 가지는 변수를 생성 할 수 있습니다.

 

이 강좌에서는 String , int 2가지만 다루겠습니다.

 

String형은 문자열을 나타내는 데이터타입입니다.

 

String의 선언과 , 대입은 아래와 같이 합니다.

 

String str = "ABC";

위 코드를 설명하자면 str이라는 이름을 가진 String타입 변수를 선언하고, "ABC" 이라는 문자열을 대입한 것 입니다.

 

 String에 문자열을 대입하기 위해서는 "" (따옴표) 안에 문자열을 넣어주어야 합니다.

 

따옴표를 써주는 이유는 숫자인지, 문자인지 컴퓨터에게 알려주기 위함입니다.

 

String str = "1";
int num = 1;

 

위 코드에서 str 변수와 num 변수에는 모두 1이 저장 되어있습니다.

 

우리가 생각하기엔 똑같은 1이 저장되었다고 생각 할 수도 있지만, 컴퓨터는 서로 다른 값으로 판단합니다.

 

str의 1은 String형을 가지는 문자 이고 , num의 1은 int형을 가지는 숫자 입니다.

 

 

 

 

 

마인크래프트 플러그인을 만들기 위해 사용할 수 있는 데이터타입, 변수들에 대해서 몇 가지 알아보겠습니다.

 

@EventHandler
    public void join(PlayerJoinEvent e) {
        
        Player player = e.getPlayer();
        String playerName = e.getPlayer().getName();
        UUID uuid = e.getPlayer().getUniqueId();
        World world = player.getWorld();
        Inventory inventory = e.getPlayer().getInventory();
        ItemStack itemStack = e.getPlayer().getInventory().getBoots();
        ItemMeta itemMeta = itemStack.getItemMeta();
        
}

위 코드는 단순한 예시입니다. 

 

플러그인을 만들기 위해서는 PlayerJoinEvent와 같은 event로 부터 다양한 데이터들을 얻고, 조건을 적용하여

원하는 결과를 얻는 과정을 반복해야 합니다.

 

플러그인을 만드는 과정을 간단하게 설명하자면 다음과 같습니다.

1. 원하는 기능이 무엇인지 생각한다.

2. 원하는 기능을 구현하기 위해 필요한 데이터들(데이터 타입)이 무엇인지 생각한다.

3. 어떻게 데이터를 얻어, 어떤 자료구조를 이용할 지 생각한다.

4. 데이터들에 특정한 조건을 적용하여 원하는 결과를 얻는다.

 

다시 말해, 적절한 데이터타입을 가진 변수를 만드는 과정은 플러그인 제작에 있어 매우 중요합니다. 

 

 

 

 

변수에 대한 설명은 여기까지만 하고,

 

config.yml 파일을 이용하여 변수를 이용하는 방법에 대해서 알려드리겠습니다.

 

마인크래프트에서 사용하는 config.yml 파일은 yaml 포멧에 맞춰 작성해야 합니다.

 

yaml 포멧에 대한 자세한 내용은 나중에 다루겠습니다.  

(참고내용  : https://ko.wikipedia.org/wiki/YAML )

 

먼저 config.yml 파일을 생성하겠습니다.

 

 


4ad8bce9541f27edc84603bbe1585303.jpeg8d0ee8348b20e096f1bc6458659244b8.jpeg


 

 


8d0ee8348b20e096f1bc6458659244b8.jpeg


접속메시지: 접속했습니다!
블록메시지:
첫번째: 첫번째 메시지
  두번째: 두번째 메시지

config.yml 파일을 다음과 같이 작성하겠습니다.

 

https://yamlchecker.com/ 이 사이트에 config.yml 내용을 붙혀넣기 했을때 

 


8d0ee8348b20e096f1bc6458659244b8.jpeg


다음과 같이 나오지 않는다면 형식이 잘못 된 것입니다.

띄워쓰기에 유의하여 다시 잘 작성하시기 바랍니다.

 

 

 

config.yml 파일 작성이 끝났다면 코드작성을 시작해보겠습니다.

 


3a1f78ffae95b1ab2c4d5282dea9c606.jpeg


 

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
    ConsoleCommandSender consol = Bukkit.getConsoleSender();
    @Override
    public void onEnable() {
        consol.sendMessage(ChatColor.AQUA + "[플러그인 활성화 중 입니다.]");
        getServer().getPluginManager().registerEvents(this, this);

        saveConfig();
        File cfile = new File(getDataFolder(), "config.yml");
        if (cfile.length() == 0) {
            getConfig().options().copyDefaults(true);
            saveConfig();
        }
    }
    @Override
    public void onDisable() {
        consol.sendMessage(ChatColor.AQUA + "[플러그인 비활성화 중 입니다.]");
    }
    @EventHandler
    public void join(PlayerJoinEvent e) {
        String msg = this.getConfig().getString("접속메시지");
        e.setJoinMessage(msg);
    }
    @EventHandler
    public void breakBlock(BlockBreakEvent e) {
        String msg1 = this.getConfig().getString("블록메시지.첫번째");
        String msg2 = this.getConfig().getString("블록메시지.두번째");
        e.getPlayer().sendMessage(msg1);
        e.getPlayer().sendMessage(msg2);
    }
}

 

실행결과는 다음과 같습니다.

 


8d0ee8348b20e096f1bc6458659244b8.jpeg


 

결과가 잘 나왔다면 어떤 과정을 통해 작동했는지 살펴보도록 하겠습니다.

 

saveConfig();

 

 

1. config파일을 저장해줍니다. 

( plugins/[플러그인이름]/config.yml 파일에서 내용을 불러와 저장합니다.)

(플러그인을 처음 실행하면 파일이 없기 때문에 아무 내용도 저장이 안됩니다. )

(두번째 실행 부터는 config.yml에 작성된 내용을 그대로 불러옵니다.)

 

File cfile = new File(getDataFolder(), "config.yml");
        if (cfile.length() == 0) {
            getConfig().options().copyDefaults(true);
            saveConfig();
}

2.1 - 생성된 config.yml파일에 아무것도 작성되어 있지 않다면  { } 부분을 실행합니다.

( getConfig().options().copyDefaults(true) 을 통해 우리가 eclipse에서 작성한 내용 그대로 저장하게 됩니다.)

 

2-2 - 만약 작성이 되어있다면 아무것도 실행되지 않습니다.

 

@EventHandler
    public void join(PlayerJoinEvent e) {
        String msg = this.getConfig().getString("접속메시지");
        e.setJoinMessage(msg);
}

3. PlayerJoinEvent가 실행되면 config의 "접속메시지" 부분에 작성된 내용을 출력합니다.

 

@EventHandler
    public void breakBlock(BlockBreakEvent e) {
        String msg1 = this.getConfig().getString("블록메시지.첫번째");
        String msg2 = this.getConfig().getString("블록메시지.두번째");
        e.getPlayer().sendMessage(msg1);
        e.getPlayer().sendMessage(msg2);
    }

4. BlockBreakEvent가 실행되면 player에게 config의 "블록메시지.첫번째" 와 "블록메시지.두번째"를 보냅니다.

 

 

 

config.yml 파일을 다음과 같이 수정한후 bukkit을 reload confirm을 하게 되면

 


3a1f78ffae95b1ab2c4d5282dea9c606.jpeg


 


4ad8bce9541f27edc84603bbe1585303.jpeg


다음과 같이 적용이 잘 됩니다.

 

이번 강의는 여기서 마무리 하도록 하겠습니다!

 

 

 

다음 강의에서는 이벤트에 대해서 좀 더 자세히 알려드리겠습니다.




1개의 댓글

히리지
2020.04.18

오호잉 굿굿 신기하네요!!

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3

/files/thumbnails/839/895/003/262x150.crop.jpg?20241006021227

SRV레코드는 보안도메인이 아닙니다. [서버오픈시 필독]

물귀신

2024-10-05

4

/files/thumbnails/648/892/003/262x150.crop.jpg?20241002184058

아티클

마인크래프트 라이브 2024 후기: 무성의가 느껴졌던 '절망편' 라이브

라비

2024-10-02

4