개인 자료란 (JE)

  서버 커뮤니티

Profile JSD-ITHAN 대표칭호 없음
Profile

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

[2강]마인크래프트 플러그인 개발하기 - 긴 커맨드

2020.01.21 조회 수 8557 추천 수 5
분야 플러그인 
게임버전 모든버전 

0.준비 할 것

스피곳 버킷 Build Path 하기
이클립스 프로그램

자바 8 버전(스피곳에서 8버전을 사용해야 안정적임)


1.새 프로젝트 만들기

먼저 1강 처럼 새 프로젝트를 하나 만들어줍니다.

그다음에 프로젝트를 우클릭에서 BuildPath를 누르시고 Add External Archives를 눌러줍니다. 만약 이렇게 하면 파일을 고르라는 창이 하나 뜰 것입니다. 그 때 스피곳 버킷을 추가 해주시면 됩니다.

https://getbukkit.org/download/spigot 

여기서 자신의 마인크래프트 버전에 맞게 스피곳 버킷을 다운로드 해주시면 됩니다.

이클립스에서

프로젝트를 더블클릭 -> src 폴더 우클릭 -> New Package 만들기 -> 자신이 만든 패키지 우클릭 -> Class 만들기를 해주시면 됩니다.

저는 패키지 이름을 test라고 하였고 클래스 이름을 Main이라고 하였습니다. 그래서 코드를 보여 드릴 건데 복사 붙여넣기 하실 분들은 패키지와 클래스 이름을 바꾸시면 될 것 같습니다.

그럼 모든 준비는 다 끝났습니다.

2. 코드 적기

package test;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    @Override
    public void onEnable() {
        System.out.println("Plugin is Activated");
    }
    @Override
    public void onDisable() {
        System.out.println("Plugin is DisActivated");
    }
    
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String [] args)         
    {
    if(cmd.getName().equalsIgnoreCase("t")) {
        if(args.length == 0) {
             sender.sendMessage(ChatColor.RED + "Type the command to execute.");
        }
        else if(args[0].equalsIgnoreCase("info")) {
            sender.sendMessage(ChatColor.YELLOW + "This Plugin is Made By JSD-ITHAN");
        }
        else {
        sender.sendMessage(ChatColor.RED + "Command is not correct.");
        }
   return true;
    }
}

3. 코드 해석

위의 코드를 간단하게 해석 해들겠습니다. 먼저 boolean은 자바에서 논리형으로서, 뒤에 return true/false를 꼭 써주셔야 합니다

CommandSender sender은 커맨드를 입력한 사람입니다. 이것은 플레이어가 될 수도 있고 콘솔 창도 될 수 있습니다.

Command command cmd커맨드를 말하는 것입니다.

그리고 위의 코드는 long command라고 해서 "t" 로 여러가지 명령어를 수행 할 수 있습니다.

예를 들어서  /t info를 쓸 수 있고 명령어를 더 추가해 준다면 "/t 수행할 명령어" 이렇게 여러가지 명령을 수행 할 수 있습니다.

"if(args.length == 0)"은 플레이어가 /t 까지만 입력하고 뒤에 명령을 안 썼다면  빨간색으로 수행할 명령을 입력하라고 플레이어에게 메세지를 보내는 것입니다.

"else if(args[0].equalsIgnoreCase("info"))" 는 /t info라고 쳤을 때 노란색으로 "이 프로그램을 만든 사람은 JSD-ITHAN입니다"라고 영어로 출력해 줍니다.

마지막으로 else는 /t 뒤에 정확한 명령어가 아닌 잘못 된 명령을 입력하였을 때 "명령어가 정확하지 않습니다." 라고 플레이어에게 메세지를 보냅니다.

4.plugin.yml

마지막 단계는 plugin.yml 파일을 만들어야 합니다.

모든 마인크래프트 플러그인에는 plugin.yml 파일이 들어 있어야 합니다. 만약 없다면 실행 시킬 대 invalid plugin.yml이 뜨거나 

plugin.yml이 없다고 뜹니다.

프로젝트 우클릭 ->  New -> File -> 이름에다가 plugin.yml이라고 적어주시면 됩니다.

먼저 plugin.yml에는 이름, 버전, 메인, 커맨드가 있는 경우는 커맨드까지 써주셔야 합니다. 그리고 Description이라고 설명글을 쓸 수 있는데 여기서 한글을 쓰면 오류가 날 수도 있습니다.

name: TestPlugin
version: 1.0
main: test.Main
commands:
  t:
    description: "About Plugin"

이렇게 써주시면 됩니다. description, name, version에는 마음대로 하시면 됩니다. 하지만 main에는 "패키지이름.클래스이름"

꼭! 이렇게 써주셔야 합니다. 저 같은 경우는 패키지 이름이 test이고 클래스 이름이 Main이기 때문에 test.Main이라고 했습니다.

5.Export Jar

이제 모든 것이 끝났습니다.

이제 프로젝트를 Jar 파일로 빼냅시다.

프로젝트 우클릭 -> Export -> Java 폴더에서 JAR file 선택 후 Next -> 자신의 프로잭트 선택, Jar 파일을 어느 폴더에다가 둘지 설정하기 -> Finish 누르면 끝.

그리고 자신이 만든 프로젝트를 버킷 서버의 plugins 폴더에 넣고 버킷을 실행시켜 줍니다.

콘솔에서 pl이라고 적어서 플러그인이 정상적으로 실행 되는 지 확인하고 게임에서 /t info를 치시거나 /t 를 치셔서 플러그인이 잘 실행 되는지 확인합니다.

궁금하시거나 안 되는 것들은 댓글에다가 적어주시면 감사하겠습니다:D


 









21개의 댓글

DDang_
2020.01.22

감사합니다 선생님

JSD-ITHAN
2020.01.22
@DDang_

:D

 

아이스틴
2020.01.22

좀 어렵네요 ㅠㅅㅠ

JSD-ITHAN
2020.01.22
@아이스틴

음...제가 다음 강좌에서는 쉽게 설명해드리도록 하겠습니닷!

피드백 감사합니다!

아이스틴
2020.01.22
@JSD-ITHAN

처음배워서 어려운것 같아요. 나중에는 익숙해지겠죠!

JSD-ITHAN
2020.01.22
@아이스틴

그러겠죠! 저도 처음에 어려워서 포기하려고 했던 적 많은데 지금은 많이 익숙해졌어요:D

inecraft_player
2020.02.01

그냥 스크립트에 있어야겠다..

JSD-ITHAN
2020.02.01
@inecraft_player

문법은 스크립트가 더 쉽긴 해요...

저도 요즘 스크립트에 빠져 살고 있어요 ㅋㅋㅋ

귤이
2020.02.10

코드적기 부분 리턴 위치 잘못되있는거 같아요..!

JSD-ITHAN
2020.03.26
@귤이

어느 부분이요??

DRDTF
2020.02.27

어려워보이지만 저도 한번 만들어볼게요

이엘
2020.03.13

저는 위에랑 똑같이 적었는데도 왜 안 될까요

JSD-ITHAN
2020.06.08
@이엘

제가 오타가 나서 그럴겁니다 ㅠㅠ

Dreamer_
2020.04.13

import 부분 import org.bukkit.commmand.CommandSender; 여기에 오타 있습니다

commmand라 적혀있어요

package test   test 뒤에 ;이거 들어가야 하지 않나요??

JSD-ITHAN
2020.06.08
@Dreamer_

수정했습니다

Dreamer_
2020.04.13

나중에 IntelliJ이걸로도 해주세요

JSD-ITHAN
2020.04.15
@Dreamer_

알겠습니다~

도개미
2020.06.05

특정한 위치에 블럭을 놓는건 어떻게 하나요?

단와시
2020.06.11

OnEnable 이 아니라 onEnable 이에엽

그리고 마지막에 있는 } 이거 오류로 뜨던데

김레유
2020.12.17

Could not load 'plugins\MSJ.jar' in folder 'plugins'

org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml

at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:162) ~[patched_1.16.4.jar:git-Paper-318]

at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:148) ~[patched_1.16.4.jar:git-Paper-318]

at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:389) ~[patched_1.16.4.jar:git-Paper-318]

at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:206) ~[patched_1.16.4.jar:git-Paper-318]

at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:936) ~[patched_1.16.4.jar:git-Paper-318]

at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:178) ~[patched_1.16.4.jar:git-Paper-318]

at java.lang.Thread.run(Thread.java:832) [?:?]

Caused by: java.io.FileNotFoundException: Jar does not contain plugin.yml

... 7 more

라고 오류가 뜨고 yml파일을 계속 수정하고 모니터링 해봐도 안나오는데 어디가 문제인건가요?ㅠㅠ

뉴스 및 창작물
/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