분야 | 플러그인 |
---|---|
장르 | 개발자 툴 |
게임버전 | 모든버전 |
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 파일을 생성하겠습니다.
접속메시지: 접속했습니다!
블록메시지:
첫번째: 첫번째 메시지
두번째: 두번째 메시지
config.yml 파일을 다음과 같이 작성하겠습니다.
https://yamlchecker.com/ 이 사이트에 config.yml 내용을 붙혀넣기 했을때
다음과 같이 나오지 않는다면 형식이 잘못 된 것입니다.
띄워쓰기에 유의하여 다시 잘 작성하시기 바랍니다.
config.yml 파일 작성이 끝났다면 코드작성을 시작해보겠습니다.
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);
}
}
실행결과는 다음과 같습니다.
결과가 잘 나왔다면 어떤 과정을 통해 작동했는지 살펴보도록 하겠습니다.
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을 하게 되면
다음과 같이 적용이 잘 됩니다.
이번 강의는 여기서 마무리 하도록 하겠습니다!
다음 강의에서는 이벤트에 대해서 좀 더 자세히 알려드리겠습니다.
히리지
2020.04.18오호잉 굿굿 신기하네요!!