마인크래프트/플러그인/개발

{{{#!html <div style="margin-left:50px;"><b style="font-size:14px">

이 문서는 <a href="/w/나무위키 마인크래프트 프로젝트">나무위키 마인크래프트 프로젝트</a>에서 다루는 문서입니다. </b><br /> 해당 프로젝트 문서를 방문하여 도움이 필요한 문서에 기여하여

주세요!</div>}}}


마인크래프트 주요 문서

{{{#!folding [ 펼치기 · 접기 ]

{{{#!wiki style="margin:-11px;margin-top:-10px;margin-bottom:-16px"

게임 진행

명령어

마법부여

아이템

회로

업적

세계

차원

생물군계

구조물

진행 외

모드

리소스팩

데이터팩

멀티플레이

플러그인

서버 구동

2차 창작

출시
에디션

자바에디션(JE)

포켓에디션(PE)

콘솔에디션(CE)

베드락에디션(BE)

에듀케이션 에디션(EE)

파이에디션

기타

튜토리얼

여담

닉네임 스킨

커뮤니티

사건사고

조합법

엔딩

MINECON

개발

기초

모드 개발

플러그인 개발

ModPE 개발

업데이트

JE 업데이트 내역

BE 업데이트 내역

게임

마인크래프트: 던전

마인크래프트: 스토리 모드

분류:마인크래프트
문서 열람하기

마인크래프트 문서의
하위 문서 문단

}}}}}}

마인크래프트 프로젝트

1. 개요
2. 도입
2.1. 플러그인 이란?
2.2. 기초적인 지식
3. 준비
3.1.1. 구버전 Eclipse (Mars 버전 이전; 미설치형)
3.1.2. 신버전 Eclipse (Mars.1 버전 이후; 설치형)
3.1.3. 신버전 Eclipse (Mars.1 버전 이후; 미설치형)
3.2. Java Development Kit(JDK) 설치
4. 첫 프로젝트 만들기
4.1. 이클립스 실행
4.2. 작업공간(Workspace) 설정
4.3. 프로젝트 만들기
5. 마인크래프트 버킷 외부 라이브러리 다운로드
5.1. SpigotMC 의 BuildTools 를 이용한 다운로드
5.2. MCAdmin 홈페이지를 이용한 개별 다운로드
6. 마인크래프트 버킷 외부 라이브러리 적용하기
6.1. 패키지와 클래스 생성
6.2. 코드 작성
7. 명령어 입력 받기
8. 제목 표시하기
9. 팁
10. 레퍼런스
10.1. 콜백 함수
10.1.1. onEnable
10.1.2. onDisable
10.2. JavaPlugin
10.2.1. getFile
10.2.2. getDefaultWorldGenerator(String worldName, String id)
10.2.3. getDatabase()
10.2.4. public FileConfiguration getConfig()
10.2.5. public InputStream getResource(String filename)
10.2.6. protected void installDDL()
10.2.7. protected void removeDDL()
10.2.8. public PluginCommand getCommand(String name)
10.2.9. public void onLoad()
10.2.10. public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args)
10.2.11. public void reloadConfig()
10.2.12. public void saveConfig()
10.2.13. public void saveDefaultConfig()
10.2.14. public void saveResource(String resourcePath, boolean replace)
10.2.15. public List<Class<?>> getDatabaseClasses()
10.3. 패키지
10.3.1. org.bukkit.entity
10.3.1.1. Player 인터페이스
10.3.1.1.1. setPlayerListName
10.3.1.2. HumanEntity 인터페이스

1. 개요

목차 다시 보고 싹 포기하자

본 문서는 마인크래프트 서버에 사용되는 플러그인 개발에 도움을 주고자 생성되었습니다.

또한 내용은 영상 촬영 및 문서 작성[1]일 기준jdk 1.8.0_91craftbukkit-1.9.4 를 기반으로,

코드 및 전반 내용은 Bukkit WikiSpigotMC Wiki, Bukkit API, Spigot API 를 기반으로 작성되었습니다.

플러그인 코딩에 사용되는 코드는 Color Scripter 의 Java 기능을 이용해 주세요. 나무위키 에서 HTML 지원이 종료될 경우 테이블(표) 기능을 이용해 대채해 주시기 바랍니다.

만약 마인크래프트 모드 개발 을 찾아오셨다면 마인크래프트/모드/개발 문서로 이동해 주세요.

모드 만들기 프로그램은 있지만 플러그인 만들기 프로그램은 그런거 없다.

2. 도입

2.1. 플러그인 이란?

플러그 인(Plug-in; PIN) 은 호스트 프로그램과 상호작용하는 컴퓨터 소프트웨어이다.

위에서 정의한 내용이 "플러그 인" 의 원래 정의이며, 마인크래프트 에서 정의하는 플러그인은

서버에 부가 기능을 추가하여 커맨드, 이벤트, 내부 연산 등을 통해 게임 내부에 새로운 요소를 추가하는 것

을 의미합니다.

플러그인을 활용한 예로는 게임화폐 추가, 미니게임 개발, 새로운 커맨드 추가 등이 있습니다.

게임 클라이언트를 수정하는 모드 와는 다르게, 바닐라 서버의 동작을 조작하는 것이 플러그인입니다. 즉, 서버의 모드라고 볼 수 있죠.

모드와 비교하면, 서버 관리자가 플러그인을 추가해도 접속하는 유저들이 덩달아 같은 플러그인을 설치할 필요가 없는 이점이 있지만,

싱글 플레이나 LAN 서버, Realms 서버에서 사용할 수 없다는 단점이 있습니다.

2.2. 기초적인 지식

3. 준비

3.1. 통합 개발 환경(IDE) 설치

3.1.1. 구버전 Eclipse (Mars 버전 이전; 미설치형)

자동 설치기가 있고 구버전을 사용할 이유도 없기 때문에 이 방법은 권장하지 않는다.

3.1.2. 신버전 Eclipse (Mars.1 버전 이후; 설치형)

빠르게 이클립스를 설치하는 등의 이유가 있을 때는 최신버전도 미설치가 가능하다.

3.1.3. 신버전 Eclipse (Mars.1 버전 이후; 미설치형)

이클립스 Mars 이후에도 미설치형으로 사용하는 것이 가능하다.

1. 우선 이클립스 zip 이 있는 페이지로 가야한다. #

2. 왼쪽에서 다운받을 버전을 선택한다.

3. 다운로드 가능한 zip 파일이 뜬다. 필요한 것을 다운로드하자. (플러그인 개발에는 Java와 Java EE중 하나를 하면 된다.)

3.2. Java Development Kit(JDK) 설치

4. 첫 프로젝트 만들기

4.1. 이클립스 실행

위의 사진처럼 eclipse.exe 를 더블클릭하여 실행하면 됩니다.

4.2. 작업공간(Workspace) 설정

후에 생성할 프로젝트의 저장공간을 설정해 주시면 됩니다.

4.3. 프로젝트 만들기

이 문단에서 생략된 과정이 있는데, Java EE 개발 환경을 Java SE 개발 환경으로 변경하는 과정입니다.
이는 우측 상단 Open Perspective 버튼을 눌러 Java 를 선택한 다음 OK 를 눌러주면 됩니다.

이 과정은 제일 중요하고 제일 기초적인 부분 이며, 공통적으로 사용되기 때문에 각 과정에서 생략됩니다.

프로젝트는 File - New - Java Project 또는 New (추가 아이콘) - Java Project 를 통해 생성할 수 있습니다.

이는 Java EE 환경에서 일반 프로젝트 생성할 때 또는 Java SE 환경에서 New 아이콘만 클릭했을 때 설정합니다.

Project Name 은 한글 로 해도 상관 없습니다. 다만, 패키지명에 프로젝트 명을 포함시킬 생각[2]이라면 띄어쓰기를 하지 않는게 좋습니다.

이로써 프로젝트 생성 및 설정은 끝났습니다.

5. 마인크래프트 버킷 외부 라이브러리 다운로드

서버를 실행할 때 사용되는 "Craftbukkit-1.8.9-R0.2.jar" 과 같은 파일을 '외부 라이브러리 라고 합니다.

이 파일을 이클립스를 통해 플러그인에 적용시켜야 정상적인 코딩이 가능하고, 서버에 적용시킬 수 있습니다.

하지만 Craftbukkit 은 DMCA 테이크 다운 사태로 인해 공식 사이트에서의 Bukkit 과 관련한 모든 개발 활동이 불가능하게 되었습니다.

그래서 다운로드 방법이 2가지로 나누어 집니다.

첫번째로는 SpigotMC 의 BuildTools 를 이용하여 Spigot 과 Craftbukkit 을 동시에 다운로드하는 방법[3]과, 두번째로는 MCAdmin 홈페이지를 통해 다운로드 하는 방법[4]이 있습니다. 세번째, 검색하여 불법으로 다운로드 가능합니다.

이는 하위 문단에서 따로 설명합니다.

5.1. SpigotMC 의 BuildTools 를 이용한 다운로드

이 문단에서는 저작권 위반으로 발전될 가능성이 있는 행위에 대해 다루고 있습니다.

본 문단에서 다룬 활동으로 다운로드 한 파일들을 디컴파일하여 재배포 하는 것은 엄연한 저작권 위반 행위입니다.

본 문서의 내용은 SpigotMC Wiki 의 BuildTools 항목에서 가져옴을 알립니다.

BuildTools 를 이용해 파일을 다운로드 하기 위해선 다음과 같은 준비물이 필요합니다.

준비물의 준비가 모두 끝났으면 아래와 같은 순서를 통해 진행합니다.

  1. BuildTools 을 다운로드하여 폴더 경로에 띄어쓰기가 없는 폴더[5]에 저장 또는 옮깁니다.
  2. 해당 폴더로 이동하여 빈 공간에 커서를 옮기고 Shift + 우클릭 을 이용해 팝업 메뉴를 소환합니다. 그리고 Git Bash Here 를 클릭하여 Git 콘솔을 실행합니다.
  3. 콘솔에 java -jar BuildTools.jar 을 입력하고 엔터 를 누릅니다.
  4. 컴파일이 완료될 때 까지 콘솔을 종료하지 말고 기다립니다.
  5. 빌드가 끝나면[6] target 폴더에 CraftbukkitSpigot 이 컴파일된 것을 확인할 수 있습니다.

위와 같이 진행할 경우 그 시기의 최신 버전 [7] 이 다운로드가 되는데, 만약 다른 구버전이나 아직 정식 출시되지 않은 신버전을 받고 싶다면 명령어 끝에 --rev 1.x.x을 붙여 입력하면 됩니다.

예시 : java -jar BuildTools.jar --rev 1.12.2 를 입력하여 1.12.2 버전의 Craftbukkit 과 Spigot 을 다운로드할 수 있습니다.

5.2. MCAdmin 홈페이지를 이용한 개별 다운로드

하지만 DMCA 테이크 다운 사태로 인해 공식 사이트에서 다운받을수 없게 되었습니다. 자세한 내용은 항목 참조

그래서 MCAdmin 같은 비공식 사이트에서 다운로드 받을수 있습니다. #1.10 다이렉트

다음 방법, 검색으로 불법 다운로드는 직접 할수 있게끔 인터넷 관리자들이 잘 해주었으므로 자세한 설명은 생략한다.

프로그래밍을 배우고 젠킨과 언어를 마스터한 다음 업데이트가 감지되면 자동으로 빌드하게 한다[8]

6. 마인크래프트 버킷 외부 라이브러리 적용하기

마인크래프트 플러그인은 외부 라이브러리가 없으면 적용되지 않습니다. 무조건 등록해 주셔야 합니다.

프로젝트 우클릭 - Build Path... - Configure Build Path... - Libraries 탭으로 이동 - Add External JARs... 를 사용하면 빠르게 등록 및 제거하실 수 있습니다.

6.1. 패키지와 클래스 생성

패키지(Package) 의 역할은 클래스(Class) 를 단위 또는 그룹별로 모으는 역할과 클래스의 위치를 알려주는 역할을 합니다.

패키지는 (프로젝트가 선택된 상태에서) File - New - Package프로젝트 우클릭 - New - Package, 패키지 추가 아이콘 의 세가지 방법을 사용할 수 있습니다.

패키지 이름은 프로젝트와 다르게 무조건 영어 로 입력하여야 합니다. 후에 입력할 plugin.yml 파일에서 메인 클래스를 찾지 못하는 상황이 발생할 수 있습니다. 또한 프로젝트 이름과 달리 절대 띄어쓰기 를 하면 안됩니다.

또한 통상적으로 Java 개발 시에는 패키지는 다음과 같은 규칙을 이용합니다.

최상위도메인(com, net 등등).도메인 이름 또는 닉네임.프로젝트 이름

굳이 위의 규칙을 지키지 않아도 프로그래밍 및 컴파일시에는 문제되지 않습니다.

클래스(Class) 는 Java 에서 컴파일 후 실행할 명령들이 코드로 담긴 문서라고 생각하시면 됩니다.

클래스는 패키지와 비슷하게 (프로젝트가 선택된 상태에서) File - New - Class프로젝트 우클릭 - New - Class, 클래스 추가 아이콘 의 세가지 방법을 사용할 수 있습니다.

클래스 이름을 작성할 때에도 무조건 영어 로 작성하여야 하며, 굳이 대문자를 사용하지 않아도 됩니다.

또한 메인 클래스의 이름은 Main 이 아닌 자신의 플러그인의 이름 으로 사용해도 됩니다. (예: MyPlugin.java, YourPlugin.java 등등)

클래스도 패키지와 마찬가지로 절대 띄어쓰기 하면 안됩니다.

6.2. 코드 작성

#!syntax java
package main;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
	@Override
	public void onEnable(){
		Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + "플러그인이 활성화 되었습니다.");
	}
	
	@Override
	public void onDisable(){
		Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "플러그인이 비활성화 되었습니다.");
	}
}


코드

파일명

plugin.yml

종류

YAML

name: First Minecraft Plugin
version: 1.0
author: Devonnuri
description: My First Minecraft Plugin

main: main.Main

name

플러그인의 이름 (필수)

version

플러그인의 버전 (필수)

author

플러그인의 저자

description

플러그인의 설명

main

플러그인의 메인 클래스 (필수)


7. 명령어 입력 받기

#!syntax java
public class 클래스명 implements CommandExecutor
{
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
    {
   코드입력
     }
}

JavaPlugin을 상속받은 곳에서

#!syntax java
getCommand("명령어이름").setExecutor(클래스);

프로젝트에 쓰고있는거 복붙

주의할 점은 반드시 plugin.yml 에서 getCommand 에 사용할 명령어를 정의해주어야 한다.

정의해주지 않을 시에는 NullPointerException 이 발생한다.

8. 제목 표시하기

이런걸 표시해봅시다.

#!syntax java
public class 클래스명
{
    public void sendTitle(Player player, String title, int FadeInTime, int ShowTime, int FadeOutTime){
			CraftPlayer p = (CraftPlayer)player;
		    PlayerConnection c = p.getHandle().playerConnection;
		    IChatBaseComponent TitleText = ChatSerializer.a(title);
		    Packet<?> Length = new PacketPlayOutTitle(EnumTitleAction.TIMES, TitleText, FadeInTime*20, ShowTime*20, FadeOutTime*20);
		    Packet<?> TitlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, TitleText, FadeInTime*20, ShowTime*20, FadeOutTime*20);
		    c.sendPacket(TitlePacket);
		    c.sendPacket(Length);
	}
}

주의: 패킷을 사용하면 nms 패키지를 참조하게 되고, 버전이 바뀔 때마다 패킷 구조가 바뀌므로 권장하지 않습니다. 최신 버전의 Spigot은 내부 API에서 타이틀 메세지 관련 함수를 제공하므로 이 내용은 바뀔 필요가 있습니다.

9. 팁

  • https://hub.spigotmc.org/javadocs/bukkit/ 에서 레퍼런스를 보실 수 있습니다. 레퍼런스를 볼 능력이 요구됩니다.
  • 딱히 Java를 모르셔도 그렇게 문제가 되지는 않습니다. 다만 객체 지향 프로그래밍 에 대해서는 알고 있어야 합니다.
  • 이 문서에서 다루는 버킷 외에 스피곳(spigot, 포크 버킷)에 대해 관심이 있다면, https://hub.spigotmc.org/javadocs/spigot 이곳을 확인하세요.
  • 이클립스에서는 단축키가 지원됩니다. 대표적으로 많이 쓰이는 단축키들 입니다.

Ctrl+Shift+F

자동 정렬

Ctrl+Space

자동 완성

Ctrl+Shift+O

자동 import문 추가

10. 레퍼런스

10.1. 콜백 함수

10.1.1. onEnable

#!syntax java
    public void onEnable(){
     //플러그인을 활성화 하였을때 발생하는 콜백 함수
     //버킷을 실행하거나 /reload 명령어로 재시작 하였을때 발생합니다.
}

10.1.2. onDisable

#!syntax java
    public void onDisable(){
     //플러그인을 비활성화 하였을때 발생하는 콜백 함수
     //버킷을 종료하거나 /reload 명령어로 재시작 하였을때 발생합니다.
}

10.2. JavaPlugin

아래의 메소드는 JavaPlugin에 있는 메소드입니다. (@Override가 있는경우 오버라이드 가능)

10.2.1. getFile

#!syntax java
   @Override
    protected File getFile()
    {
        return super.getFile();
    }

10.2.2. getDefaultWorldGenerator(String worldName, String id)

#!syntax java
    @Override
    public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
    {
        return super.getDefaultWorldGenerator(worldName, id);
    }

10.2.3. getDatabase()

#!syntax java
    @Override
    public EbeanServer getDatabase()
    {
        return super.getDatabase();
    }

10.2.4. public FileConfiguration getConfig()

#!syntax java
    @Override
    public FileConfiguration getConfig()
    {
        return super.getConfig();
    }

10.2.5. public InputStream getResource(String filename)

#!syntax java
    @Override
    public InputStream getResource(String filename)
    {
        return super.getResource(filename);
    }

10.2.6. protected void installDDL()

#!syntax java
    @Override
    protected void installDDL()
    {
        super.installDDL();
    }

10.2.7. protected void removeDDL()

#!syntax java
    @Override
    protected void removeDDL()
    {
        super.removeDDL();
    }

10.2.8. public PluginCommand getCommand(String name)

#!syntax java
    @Override
    public PluginCommand getCommand(String name)
    {
        return super.getCommand(name);
    }

10.2.9. public void onLoad()

#!syntax java
    @Override
    public void onLoad()
    {
        super.onLoad();
    }

10.2.10. public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args)

#!syntax java
    @Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args)
    {
        return super.onTabComplete(sender, command, alias, args);
    }

10.2.11. public void reloadConfig()

#!syntax java
    @Override
    public void reloadConfig()
    {
        super.reloadConfig();
    }

10.2.12. public void saveConfig()

#!syntax java
    @Override
    public void saveConfig()
    {
        super.saveConfig();
    }

10.2.13. public void saveDefaultConfig()

#!syntax java
    @Override
    public void saveDefaultConfig()
    {
        super.saveDefaultConfig();
    }

10.2.14. public void saveResource(String resourcePath, boolean replace)

#!syntax java
    @Override
    public void saveResource(String resourcePath, boolean replace)
    {
        super.saveResource(resourcePath, replace);
    }

10.2.15. public List<Class<?>> getDatabaseClasses()

#!syntax java
    @Override
    public List<Class<?>> getDatabaseClasses()
    {
        return super.getDatabaseClasses();
    }

10.3. 패키지

이 문단은 버킷의 패키지, 패키지 안에 있는 클래스와 인터페이스, 열거형에 대하여 다룬다.

10.3.1. org.bukkit.entity

10.3.1.1. Player 인터페이스

분류

의미

v

void(리턴 안함))

b

boolean(참, 거짓)

i

int(32비트 정수)

s

String(문자열)

d

Double (배정밀도 부동소수점 실수)

f

Float (단정밀도 부동소수점 실수)

<이름>

클래스

분류

메서드

기능

v

chat(String str)

채팅 띄우기

InetSocketAddress

getAddress()

접속 주소(IP) 구하기

i

getLevel())

레벨 구하기

f

getWalkSpeed()

걷는속도 구하기 (-1.0 ~ 1.0)

v

setWalkSpeed(float value)

걷는속도 설정하기 (-1.0 ~ 1.0)

v

setDisplayName(String name)

디스플레이 이름 변경

s

getPlayerListName()

플레이어 목록의 이름 구하기

v

setPlayerListName(String name))

링크 참고

v

setLevel(int level)

경험치 레벨 설정

i

getLevel()

경험치 레벨 얻어오기

v

giveExp(int amount)

경험치를 amount만큼 주기

v

giveExpLevels(int amount)

경험치 레벨을 amount만큼 주기

i

getFoodLevel()

배고픔 수치 구하기 (0~10)

v

setFoodLevel(int value)

배고픔 수치를 value로 설정

v

kickPlayer(String message)

message를 사유로 퇴장시키기

v

hidePlayer(Player player)

player를 보이지 않게 하기

v

sendMessage(String message)

플레이어에게 메시지 보내기 (ChatColor와 혼용 가능)

PlayerInventory

getInventory()

플레이어의 인벤토리를 불러옴 (HumanEntity에서 상속됨)

10.3.1.1.1. setPlayerListName

인지 : String name

인게임 플레이어 리스트의 이름을 설정합니다.

16자까지 허용되며, 색깔이 지원됩니다.

일어날 수 있는 예외들:

  • IllegalArgumentException - 이름이 너무 길거나[9] 누군가 쓰고있는 이름인 경우

(원문)

Sets the name that is shown on the in-game player list.

The name cannot be longer than 16 characters, but ChatColor is supported.

If the value is null, the name will be identical to HumanEntity.getName().

This name is case sensitive and unique, two names with different casing will appear as two different people. If a player joins afterwards with a name that conflicts with a player's custom list name, the joining player's player list name will have a random number appended to it (1-2 characters long in the default implementation). If the joining player's name is 15 or 16 characters long, part of the name will be truncated at the end to allow the addition of the two digits.

Parameters:

name - new player list name

Throws:

IllegalArgumentException - if the name is already used by someone else

IllegalArgumentException - if the length of the name is too long

10.3.1.2. HumanEntity 인터페이스

분류

의미

v

void(리턴 안함))

b

boolean(참, 거짓)

i

int(32비트 정수)

s

String(문자열)

d

Double (배정밀도 부동소수점 실수)

f

Float (단정밀도 부동소수점 실수)

<이름>

클래스

분류

메서드

기능

v

closeInventory()

보관함을 닫는다.

i

getCooldown(Material material)

특정한 아이템의 쿨타운을 구한다.(아마도)

Inventory

getEnderChest()

엔더 상자를 인벤토리 형태로 가져온다.

i

getExpToLevel()

다음 레벨까지 남은 경험치를 가져온다.

GameMode

getGameMode()

게임 모드를 가져온다.

PlayerInventory[10]

getInventory()

플레이어의 인벤토리를 가져온다.

ItemStack

getItemOnCursor()

마우스 커서 아래의 아이템을 구한다. 비어있을 수 있다.

MainHand

getMainHand()

주 손(설정에서 변경)을 가져온다.

s

getName()

플레이어의 이름을 반환한다.

Player 인터페이스에서도 상속받는 인터페이스로 마인크래프트에서 사람(플레이어)의 메소드를 대량 포함한다.

게임에서 NPC[11]나 플레이어에게 반영되는 내용을 그대로 포함한다.

항목

내용

선언

public interface HumanEntity

상속

LivingEntity, AnimalTamer, Permissible, InventoryHolder

추가 바람


  1. [1] 처음 작성하신 분이 튜토리얼을 위해 유튜브 영상을 촬영하여 업로드하셨습니다.
  2. [2] 기본적으로 패키지는 최상위도메인.도메인 또는 닉네임.프로젝트 명 을 사용합니다.
  3. [3] 이 방법은 Git 으로 부터 코드를 컴파일하여 내려받는 방법을 사용하기 때문에 다운로드 속도가 느릴 수 있습니다.
  4. [4] 문서 수정 전 다운로드 할 수 있는 방법이었습니다.
  5. [5] 예를 들어 C:\BuildTools 또는 D:\BuildTools 등
  6. [6] 빌드 종료 시 Build success! 메세지와 함께 콘솔 입력이 가능해진다.
  7. [7] 최신 버전이라고는 하지만 무조건 스피곳의 최신 버전이 아니다. 스피곳 개발자들이 어느정도 안정화가 되면 그 버전을 최신 버전으로 설정하고 그 전에 다운받으려면 rev 를 사용해야 한다. 보통 업데이트 뉴스는 spigotmc.org 홈에서 찾을 수 있다.
  8. [8] 불가능한건 아니고 모 위키러가 성공했다.
  9. [9] 16글자 정도
  10. [10] Inventory를 상속받는 인터페이스로 보관함과 더불어 갑옷 슬롯과 방패(왼손)의 내용도 포함한다.
  11. [11] 시티즌 등의 사람 추가 플러그인

최종 확인 버전:

cc by-nc-sa 2.0 kr

Contents from Namu Wiki

Contact - 미러 (Namu)는 나무 위키의 표가 깨지는게 안타까워 만들어진 사이트입니다. (299.67ms)