<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>https://tcatmon.com/w/index.php?action=history&amp;feed=atom&amp;title=%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8%2F%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8%2F%EA%B0%9C%EB%B0%9C</id>
		<title>마인크래프트/플러그인/개발 - 편집 역사</title>
		<link rel="self" type="application/atom+xml" href="https://tcatmon.com/w/index.php?action=history&amp;feed=atom&amp;title=%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8%2F%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8%2F%EA%B0%9C%EB%B0%9C"/>
		<link rel="alternate" type="text/html" href="https://tcatmon.com/w/index.php?title=%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8/%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/%EA%B0%9C%EB%B0%9C&amp;action=history"/>
		<updated>2026-07-28T03:06:14Z</updated>
		<subtitle>이 문서의 편집 역사</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://tcatmon.com/w/index.php?title=%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8/%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/%EA%B0%9C%EB%B0%9C&amp;diff=401153&amp;oldid=prev</id>
		<title>2017년 2월 4일 (토) 14:32에 Maintenance script님의 편집</title>
		<link rel="alternate" type="text/html" href="https://tcatmon.com/w/index.php?title=%EB%A7%88%EC%9D%B8%ED%81%AC%EB%9E%98%ED%94%84%ED%8A%B8/%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/%EA%B0%9C%EB%B0%9C&amp;diff=401153&amp;oldid=prev"/>
				<updated>2017-02-04T14:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt; * 관련 문서: [[마인크래프트/개발]], [[마인크래프트/모드/개발]]&lt;br /&gt;
 * 상위항목: [[마인크래프트/플러그인]]&lt;br /&gt;
[include(틀:마인크래프트/관련 문서)]&lt;br /&gt;
&lt;br /&gt;
[목차]&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
본 문서는 [[마인크래프트/버킷|마인크래프트 서버]]에 사용되는 [[마인크래프트/플러그인|플러그인]] 개발에 도움을 주고자 생성되었습니다.&lt;br /&gt;
&lt;br /&gt;
또한 내용은 영상 촬영 및 문서 작성[* 처음 작성하신 분이 튜토리얼을 위해 [[유튜브]] 영상을 촬영하여 업로드하셨습니다.]일 기준{{{jdk 1.8.0_91}}} 과 {{{craftbukkit-1.9.4}}} 를 기반으로,&lt;br /&gt;
코드 및 전반 내용은 [[http://wiki.bukkit.org/Main_Page|Bukkit Wiki]] 와 [[https://www.spigotmc.org/wiki/spigot/|SpigotMC Wiki]], [[https://hub.spigotmc.org/javadocs/bukkit/|Bukkit API]] 를 기반으로 작성되었습니다.&lt;br /&gt;
&lt;br /&gt;
플러그인 코딩에 사용되는 코드는 [[http://colorscripter.com/|Color Scripter]] 의 Java 기능을 이용해 주세요. [[나무위키]] 에서 [[HTML]] 지원이 종료될 경우 테이블(표) 기능을 이용해 대채해 주시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
만약 '''[[마인크래프트/모드|마인크래프트 모드]] 개발''' 을 찾아오셨다면 [[마인크래프트/모드/개발]] 문서로 이동해 주세요.&lt;br /&gt;
&lt;br /&gt;
~~하지만 모드 만들기 프로그램 있지만 플러그인 만들기 프로그램은 '''그런거 없다.'''~~&lt;br /&gt;
&lt;br /&gt;
== 도입 ==&lt;br /&gt;
=== [[마인크래프트/플러그인|플러그인]] 이란? ===&lt;br /&gt;
&amp;gt; 플러그 인(Plug-in; PIN) 은 호스트 프로그램과 상호작용하는 컴퓨터 소프트웨어이다.&lt;br /&gt;
위에서 정의한 내용이 &amp;quot;플러그 인&amp;quot; 의 원래 정의이며, [[마인크래프트]] 에서 정의하는 플러그인은 &lt;br /&gt;
&amp;gt;서버에서 '''모드 없이''' 바닐라 상태에서 커맨드와 이벤트 등을 추가시켜 플레이에 도움을 주거나 새로운 방식을 추가하는 파일&lt;br /&gt;
을 의미합니다.&lt;br /&gt;
&lt;br /&gt;
'''모드''' 와는 다르게, 클라이언트 측 (플레이어)이 설치할 필요 없이 오로지 설치된 서버에만 접속하면 사용이 가능하다는 장점이 있지만,&lt;br /&gt;
싱글플레이에서는 이 파일로만 사용할 수 없고, 서버에 설치하여 사용해야한다는 단점이 있습니다.[* 다만 싱글에서는 커맨드 블럭을 이용해 비슷하거나 거의 똑같이 만들 수 있습니다. ~~레드스톤이랑 커맨드에 자신이 있다면...~~]&lt;br /&gt;
&lt;br /&gt;
=== 기초적인 지식 ===&lt;br /&gt;
 * 기본적인 [[마인크래프트]] 지식 (어떻게 하면 무엇을 얻을수 있는지 등)&lt;br /&gt;
 * [[Java]] 또는 [[객체 지향 프로그래밍]] 에 대한 기초적인 상식&lt;br /&gt;
 * 기초적인 [[중학교]] [[영어]] 실력 (우리가 쓸 프로그램과 짤 코드가 전부 다 영어)&lt;br /&gt;
 * (옵션) [[API]] 등의 레퍼런스 이해 능력&lt;br /&gt;
&lt;br /&gt;
== 준비 ==&lt;br /&gt;
=== [[통합 개발 환경|통합 개발 환경(IDE)]] 설치 ===&lt;br /&gt;
==== 구버전 [[Eclipse]] (Mars 버전 이전; 미설치형) ====&lt;br /&gt;
[youtube(iiSh2fLfECc,width=400,height=300)]&lt;br /&gt;
==== 신버전 [[Eclipse]] (Mars.1 버전 이후; 설치형) ====&lt;br /&gt;
[youtube(POP1xvkXOu0)]&lt;br /&gt;
=== [[Java]] Development Kit(JDK) 설치 ===&lt;br /&gt;
[youtube(9vIrrZrYpDQ,width=400,height=300)]&lt;br /&gt;
&lt;br /&gt;
== 첫 프로젝트 만들기 ==&lt;br /&gt;
=== 이클립스 실행 ===&lt;br /&gt;
[[파일:플러그인 개발 - 이클립스 폴더.png|width=50%]]&lt;br /&gt;
위의 사진처럼 {{{eclipse.exe}}} 를 더블클릭하여 실행하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 작업공간(Workspace) 설정 ===&lt;br /&gt;
[[파일:플러그인 개발 - 이클립스 Workspace 설정.png|width=50%]]&lt;br /&gt;
후에 생성할 프로젝트의 저장공간을 설정해 주시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 프로젝트 만들기 ===&lt;br /&gt;
&amp;gt; 이 문단에서 생략된 과정이 있는데, Java EE 개발 환경을 Java SE 개발 환경으로 변경하는 과정입니다. [br] 이는 우측 상단 '''Open Perspective''' 버튼을 눌러 '''Java''' 를 선택한 다음 OK 를 눌러주면 됩니다.&lt;br /&gt;
&lt;br /&gt;
이 과정은 '''제일 중요하고 제일 기초적인''' 부분 이며, 공통적으로 사용되기 때문에 각 과정에서 생략됩니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 새 프로젝트 만들기.png|width=50%]]&lt;br /&gt;
프로젝트는 '''File - New - Java Project''' 또는 '''[[https://www.google.co.kr/search?q=eclipse+new+project+icon&amp;amp;espv=2&amp;amp;biw=1680&amp;amp;bih=925&amp;amp;tbm=isch&amp;amp;imgil=IkipTGhXnaJ_8M%253A%253BoYxBbpDEvljPfM%253Bhttp%25253A%25252F%25252Ffornwall.net%25252Feclipsecoder%25252F&amp;amp;source=iu&amp;amp;pf=m&amp;amp;fir=IkipTGhXnaJ_8M%253A%252CoYxBbpDEvljPfM%252C_&amp;amp;usg=__dLSSSTEWwODddwP2e23bjm7tF4U%3D&amp;amp;ved=0ahUKEwipkb6fqqXOAhUBzpQKHev3DTsQyjcIOQ&amp;amp;ei=qe6hV-mYFYGc0wTr77fYAw#imgrc=IkipTGhXnaJ_8M%3A|New (추가 아이콘)]] - Java Project''' 를 통해 생성할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 프로젝트 선택.png|width=50%]]&lt;br /&gt;
이는 '''Java EE''' 환경에서 일반 프로젝트 생성할 때 또는 '''Java SE''' 환경에서 New 아이콘만 클릭했을 때 설정합니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 프로젝트 설정.png|width=50%]]&lt;br /&gt;
Project Name 은 '''한글''' 로 해도 상관 없습니다. 다만, '''패키지명에 프로젝트 명을 포함시킬 생각'''[* 기본적으로 패키지는 '''최상위도메인.도메인 또는 닉네임.프로젝트 명''' 을 사용합니다.]이라면 띄어쓰기를 하지 않는게 좋습니다.&lt;br /&gt;
&lt;br /&gt;
이로써 프로젝트 생성 및 설정은 끝났습니다.&lt;br /&gt;
&lt;br /&gt;
== [[마인크래프트/버킷|마인크래프트 버킷]] 외부 라이브러리 다운로드 ==&lt;br /&gt;
서버를 실행할 때 사용되는 &amp;quot;Craftbukkit-1.8.9-R0.2.jar&amp;quot; 과 같은 파일을 ''''외부 라이브러리''' 라고 합니다.&lt;br /&gt;
이 파일을 이클립스를 통해 플러그인에 적용시켜야 정상적인 코딩이 가능하고, 서버에 적용시킬 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
하지만 Craftbukkit 은 [[DMCA|DMCA 테이크 다운]] 사태로 인해 공식 사이트에서의 Bukkit 과 관련한 모든 개발 활동이 불가능하게 되었습니다.&lt;br /&gt;
&lt;br /&gt;
그래서 다운로드 방법이 2가지로 나누어 집니다.&lt;br /&gt;
첫번째로는 '''SpigotMC''' 의 BuildTools 를 이용하여 Spigot 과 Craftbukkit 을 동시에 다운로드하는 방법[* 이 방법은 Git 으로 부터 코드를 컴파일하여 내려받는 방법을 사용하기 때문에 다운로드 속도가 느릴 수 있습니다.]과, 두번째로는 MCAdmin 홈페이지를 통해 다운로드 하는 방법[* 문서 수정 전 다운로드 할 수 있는 방법이었습니다.]이 있습니다.&lt;br /&gt;
&lt;br /&gt;
이는 하위 문단에서 따로 설명합니다.&lt;br /&gt;
&lt;br /&gt;
==== SpigotMC 의 BuildTools 를 이용한 다운로드 ====&lt;br /&gt;
{{{#!wiki style=&amp;quot;border:1px solid gray;border-top:5px solid crimson;padding:12px&amp;quot;&lt;br /&gt;
{{{+1 주의!}}}[br][br]본 문단에서 다룬 활동으로 다운로드 한 파일들을 디컴파일하여 재배포 하는 것은 엄연한 저작권 위반 행위입니다.}}}&lt;br /&gt;
&lt;br /&gt;
본 문서의 내용은 [[https://www.spigotmc.org/wiki/buildtools/|SpigotMC Wiki 의 BuildTools 항목]]에서 가져옴을 알립니다.&lt;br /&gt;
&lt;br /&gt;
BuildTools 를 이용해 파일을 다운로드 하기 위해선 다음과 같은 준비물이 필요합니다.&lt;br /&gt;
&lt;br /&gt;
 * BuildTools.jar [[https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar|BuildTools 다운로드 (자동 다운로드)]]&lt;br /&gt;
 * Java Development Kit (자바 개발자용 도구; 이하 &amp;quot;jdk&amp;quot;) [[http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html|JDK 다운로드]]&lt;br /&gt;
 * Git [[https://git-for-windows.github.io/|Git 다운로드]]&lt;br /&gt;
&lt;br /&gt;
준비물의 준비가 모두 끝났으면 아래와 같은 순서를 통해 진행합니다.&lt;br /&gt;
&lt;br /&gt;
 1. BuildTools 을 다운로드하여 '''폴더 위치 중 띄어쓰기가 없는 폴더'''[* 예를 들어 C: 또는 D:/BuildTools 등등]에 저장 또는 옮깁니다.&lt;br /&gt;
 1. BuildTools 가 다운로드된 폴더로 이동하여 빈 공간에 커서를 옮기고 '''Shift + 우클릭''' 을 이용해 팝업 메뉴를 소환합니다. 그리고 '''Git Bash Here''' 를 클릭하여 Git 콘솔을 실행합니다.&lt;br /&gt;
 1. 콘솔에 {{{java -jar BuildTools.jar}}} 을 입력하고 '''엔터''' 를 누릅니다.&lt;br /&gt;
 1. 컴파일이 완료될 때 까지 '''콘솔을 종료하지 말고''' 기다립니다.&lt;br /&gt;
 1. 빌드가 종료되면 콘솔이 다시 입력 가능 상태로 변하고, BuildTools 가 저장된 폴더에 '''Craftbukkit''' 과 '''Spigot''' 이 저장된 것을 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
위와 같이 진행할 경우 그 시기의 '''최신 버전''' 이 다운로드가 되는데, 만약 1.6.2 버전을 다운로드 하고 싶다면&lt;br /&gt;
&lt;br /&gt;
{{{java -jar BuildTools.jar --rev 1.6.2}}} 를 입력하여 1.6.2 버전의 Craftbukkit 과 Spigot 을 다운로드할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
==== MCAdmin 홈페이지를 이용한 개별 다운로드 ====&lt;br /&gt;
하지만 [[DMCA|DMCA 테이크 다운]] 사태로 인해 공식 사이트에서 다운받을수 없게 되었습니다. 자세한 내용은 [[마인크래프트/버킷#s-6.1|항목 참조]]&lt;br /&gt;
그래서 [[https://mcadmin.net/|MCAdmin]] 같은 비공식 사이트에서 다운로드 받을수 있습니다. [[https://ci.mcadmin.net/job/CraftBukkit/lastSuccessfulBuild/artifact/craftbukkit-1.10.jar|#1.10 다이렉트]]&lt;br /&gt;
&lt;br /&gt;
== [[마인크래프트/버킷|마인크래프트 버킷]] 외부 라이브러리 적용하기 ==&lt;br /&gt;
마인크래프트 플러그인은 외부 라이브러리가 없으면 적용되지 않습니다. '''무조건''' 등록해 주셔야 합니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - Properties 메뉴.png|width=50%]]&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - Properties.png|width=50%]]&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - Jar 파일 선택.png|width=50%]]&lt;br /&gt;
&lt;br /&gt;
'''프로젝트 우클릭 - Build Path... - Configure Build Path... - Libraries 탭으로 이동 - Add External JARs...''' 를 사용하면 빠르게 등록 및 제거하실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 패키지와 클래스 생성 ===&lt;br /&gt;
패키지(Package) 의 역할은 클래스(Class) 를 단위 또는 그룹별로 모으는 역할과 클래스의 위치를 알려주는 역할을 합니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 패키지 메뉴.png|width=50%]]&lt;br /&gt;
패키지는 '''(프로젝트가 선택된 상태에서) File - New - Package''' 와 '''프로젝트 우클릭 - New - Package''', [[https://www.google.co.kr/search?q=eclipse+new+package+icon&amp;amp;espv=2&amp;amp;biw=1680&amp;amp;bih=925&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwjH59HpraXOAhWKipQKHWHqAUEQ_AUIBigB#imgrc=n4AeS35Yy5g1CM%3A|패키지 추가 아이콘]] 의 세가지 방법을 사용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 패키지.png|width=50%]]&lt;br /&gt;
패키지 이름은 프로젝트와 다르게 '''무조건 영어''' 로 입력하여야 합니다. 후에 입력할 {{{plugin.yml}}} 파일에서 메인 클래스를 찾지 못하는 상황이 발생할 수 있습니다. 또한 프로젝트 이름과 달리 절대 '''띄어쓰기''' 를 하면 안됩니다.&lt;br /&gt;
&lt;br /&gt;
또한 통상적으로 [[Java]] 개발 시에는 패키지는 다음과 같은 규칙을 이용합니다.&lt;br /&gt;
&amp;gt; 최상위도메인(com, net 등등)'''.'''도메인 이름 또는 닉네임'''.'''프로젝트 이름&lt;br /&gt;
&lt;br /&gt;
굳이 위의 규칙을 지키지 않아도 프로그래밍 및 컴파일시에는 문제되지 않습니다.&lt;br /&gt;
&lt;br /&gt;
클래스(Class) 는 Java 에서 컴파일 후 실행할 명령들이 ~~코드로~~ 담긴 문서라고 생각하시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 클래스 메뉴.png|width=50%]]&lt;br /&gt;
클래스는 패키지와 비슷하게 '''(프로젝트가 선택된 상태에서) File - New - Class''' 와 '''프로젝트 우클릭 - New - Class''', [[https://www.google.co.kr/search?q=eclipse+new+package+icon&amp;amp;espv=2&amp;amp;biw=1680&amp;amp;bih=925&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwjH59HpraXOAhWKipQKHWHqAUEQ_AUIBigB#tbm=isch&amp;amp;q=eclipse+new+class+icon&amp;amp;imgrc=g3HNNZnIL-z5YM%3A|클래스 추가 아이콘]] 의 세가지 방법을 사용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:플러그인 개발 - 클래스.png|width=50%]]&lt;br /&gt;
클래스 이름을 작성할 때에도 '''무조건 영어''' 로 작성하여야 하며, 굳이 대문자를 사용하지 않아도 됩니다.&lt;br /&gt;
또한 메인 클래스의 이름은 '''Main''' 이 아닌 '''자신의 플러그인의 이름''' 으로 사용해도 됩니다. (예: MyPlugin.java, YourPlugin.java 등등)&lt;br /&gt;
클래스도 패키지와 마찬가지로 절대 '''띄어쓰기''' 하면 안됩니다.&lt;br /&gt;
&lt;br /&gt;
=== 코드 작성 ===&lt;br /&gt;
[[파일:플러그인 개발 - 메인 클래스 코드 작성.png|width=75%]]&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
import org.bukkit.Bukkit;&lt;br /&gt;
import org.bukkit.ChatColor;&lt;br /&gt;
import org.bukkit.plugin.java.JavaPlugin;&lt;br /&gt;
&lt;br /&gt;
public class Main extends JavaPlugin{&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onEnable(){&lt;br /&gt;
		Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + &amp;quot;플러그인이 활성화 되었습니다.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void onDisable(){&lt;br /&gt;
		Bukkit.getConsoleSender().sendMessage(ChatColor.RED + &amp;quot;플러그인이 비활성화 되었습니다.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
[br]&lt;br /&gt;
[[파일:플러그인 개발 - 파일 추가 메뉴.png|width=50%]]&lt;br /&gt;
[[파일:플러그인 개발 - plugin.yml 파일.png]]&lt;br /&gt;
[[파일:플러그인 개발 - plugin.yml 에디터 선택.png]]&lt;br /&gt;
[[파일:플러그인 개발 - plugin.yml 에디터 선택2.png]]&lt;br /&gt;
[[파일:플러그인 개발 - plugin.yml 작성.png|width=75%]]&lt;br /&gt;
||||&amp;lt;#000000&amp;gt;&amp;lt;:&amp;gt;&amp;lt;table width=100%&amp;gt;'''{{{#white 코드}}}'''||&lt;br /&gt;
||&amp;lt;width=20%&amp;gt;&amp;lt;#616161&amp;gt;&amp;lt;:&amp;gt;{{{#white 파일명}}} || plugin.yml ||&lt;br /&gt;
||&amp;lt;width=20%&amp;gt;&amp;lt;#616161&amp;gt;&amp;lt;:&amp;gt;{{{#white 종류}}} || YAML ||&lt;br /&gt;
||||{{{#!html &amp;lt;!-- HTML generated using hilite.me --&amp;gt;&amp;lt;div style=&amp;quot;background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&amp;quot;&amp;gt;&amp;lt;pre style=&amp;quot;margin: 0; line-height: 125%&amp;quot;&amp;gt;name: First Minecraft Plugin&lt;br /&gt;
version: 1.0&lt;br /&gt;
author: Devonnuri&lt;br /&gt;
description: My First Minecraft Plugin&lt;br /&gt;
&lt;br /&gt;
main: main.Main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}}||&lt;br /&gt;
&lt;br /&gt;
||name||'''플러그인의 이름 (필수)'''||&lt;br /&gt;
||version||'''플러그인의 버전 (필수)'''||&lt;br /&gt;
||author||플러그인의 저자||&lt;br /&gt;
||description||플러그인의 설명||&lt;br /&gt;
||main||'''플러그인의 메인 클래스 (필수)'''||&lt;br /&gt;
[br]&lt;br /&gt;
&lt;br /&gt;
== 명령어 입력 받기 ==&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
public class 클래스명 implements CommandExecutor&lt;br /&gt;
{&lt;br /&gt;
    @Override&lt;br /&gt;
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args)&lt;br /&gt;
    {&lt;br /&gt;
   코드입력&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
}}}&lt;br /&gt;
JavaPlugin을 상속받은 곳에서 &lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
getCommand(&amp;quot;명령어이름&amp;quot;).setExecutor(클래스);&lt;br /&gt;
}}}&lt;br /&gt;
~~프로젝트에 쓰고있는거 복붙~~&lt;br /&gt;
&lt;br /&gt;
== 제목 표시하기 ==&lt;br /&gt;
[[파일:플러그인 개발 - Title 테스트.png|width=75%]]&lt;br /&gt;
이런걸 표시해봅시다.&lt;br /&gt;
&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
public class 클래스명&lt;br /&gt;
{&lt;br /&gt;
    public void sendTitle(Player player, String title, int FadeInTime, int ShowTime, int FadeOutTime){&lt;br /&gt;
			CraftPlayer p = (CraftPlayer)player;&lt;br /&gt;
		    PlayerConnection c = p.getHandle().playerConnection;&lt;br /&gt;
		    IChatBaseComponent TitleText = ChatSerializer.a(title);&lt;br /&gt;
		    Packet&amp;lt;?&amp;gt; Length = new PacketPlayOutTitle(EnumTitleAction.TIMES, TitleText, FadeInTime*20, ShowTime*20, FadeOutTime*20);&lt;br /&gt;
		    Packet&amp;lt;?&amp;gt; TitlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, TitleText, FadeInTime*20, ShowTime*20, FadeOutTime*20);&lt;br /&gt;
		    c.sendPacket(TitlePacket);&lt;br /&gt;
		    c.sendPacket(Length);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}}}&lt;br /&gt;
== 팁 ==&lt;br /&gt;
 * [[https://hub.spigotmc.org/javadocs/bukkit/]] 에서 레퍼런스를 보실 수 있습니다. 레퍼런스를 볼 능력이 요구됩니다.&lt;br /&gt;
 * 딱히 [[Java]]를 모르셔도 그렇게 문제가 되지는 않습니다. 다만 [[객체 지향 프로그래밍]] 에 대해서는 알고 있어야 합니다.&lt;br /&gt;
 * 이 문서에서 다루는 버킷 외에 스피곳(spigot, 포크 버킷)에 대해 관심이 있다면, [[https://hub.spigotmc.org/javadocs/spigot]] 이곳을 확인하세요.&lt;br /&gt;
 * 이클립스에서는 단축키가 지원됩니다. 대표적으로 많이 쓰이는 단축키들 입니다.&lt;br /&gt;
 ||Ctrl+Shift+F || 자동 정렬 ||&lt;br /&gt;
 ||Ctrl+Space || 자동 완성 ||&lt;br /&gt;
 ||Ctrl+Shift+O || 자동 import문 추가 ||&lt;br /&gt;
== 레퍼런스 ==&lt;br /&gt;
[include(틀:토론 중, 토론번호=62274)]&lt;br /&gt;
## 이 레퍼런스는 코드에 링크 되어있을수 있으니 anchor로 이어져 있어야 합니다.&lt;br /&gt;
=== 콜백 함수 ===&lt;br /&gt;
&lt;br /&gt;
==== onEnable ====&lt;br /&gt;
## onEnable 콜백함수&lt;br /&gt;
[anchor(onEnable)]&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    public void onEnable(){&lt;br /&gt;
     //플러그인을 활성화 하였을때 발생하는 콜백 함수&lt;br /&gt;
     //버킷을 실행하거나 /reload 명령어로 재시작 하였을때 발생합니다.&lt;br /&gt;
}&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
==== onDisable ====&lt;br /&gt;
## onDisable 콜백함수&lt;br /&gt;
[anchor(onDisable)]&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    public void onDisable(){&lt;br /&gt;
     //플러그인을 비활성화 하였을때 발생하는 콜백 함수&lt;br /&gt;
     //버킷을 종료하거나 /reload 명령어로 재시작 하였을때 발생합니다.&lt;br /&gt;
}&lt;br /&gt;
}}}&lt;br /&gt;
=== JavaPlugin ===&lt;br /&gt;
##정리 부탁드립니다.&lt;br /&gt;
아래의 메소드는 JavaPlugin에 있는 메소드입니다. (@Override가 있는경우 오버라이드 가능)&lt;br /&gt;
==== getFile ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
   @Override&lt;br /&gt;
    protected File getFile()&lt;br /&gt;
    {&lt;br /&gt;
        return super.getFile();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
====  getDefaultWorldGenerator(String worldName, String id) ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)&lt;br /&gt;
    {&lt;br /&gt;
        return super.getDefaultWorldGenerator(worldName, id);&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== getDatabase() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public EbeanServer getDatabase()&lt;br /&gt;
    {&lt;br /&gt;
        return super.getDatabase();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
====  public FileConfiguration getConfig() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public FileConfiguration getConfig()&lt;br /&gt;
    {&lt;br /&gt;
        return super.getConfig();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public InputStream getResource(String filename) ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public InputStream getResource(String filename)&lt;br /&gt;
    {&lt;br /&gt;
        return super.getResource(filename);&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
====  protected void  installDDL() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void installDDL()&lt;br /&gt;
    {&lt;br /&gt;
        super.installDDL();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
====  protected void  removeDDL() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void removeDDL()&lt;br /&gt;
    {&lt;br /&gt;
        super.removeDDL();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public PluginCommand  getCommand(String name) ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public PluginCommand getCommand(String name)&lt;br /&gt;
    {&lt;br /&gt;
        return super.getCommand(name);&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public void onLoad() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onLoad()&lt;br /&gt;
    {&lt;br /&gt;
        super.onLoad();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public List&amp;lt;String&amp;gt; onTabComplete(CommandSender sender, Command command, String alias, String[] args) ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public List&amp;lt;String&amp;gt; onTabComplete(CommandSender sender, Command command, String alias, String[] args)&lt;br /&gt;
    {&lt;br /&gt;
        return super.onTabComplete(sender, command, alias, args);&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
====  public void reloadConfig() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public void reloadConfig()&lt;br /&gt;
    {&lt;br /&gt;
        super.reloadConfig();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public void saveConfig() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public void saveConfig()&lt;br /&gt;
    {&lt;br /&gt;
        super.saveConfig();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public void  saveDefaultConfig() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public void saveDefaultConfig()&lt;br /&gt;
    {&lt;br /&gt;
        super.saveDefaultConfig();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public void saveResource(String resourcePath, boolean replace) ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public void saveResource(String resourcePath, boolean replace)&lt;br /&gt;
    {&lt;br /&gt;
        super.saveResource(resourcePath, replace);&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
==== public List&amp;lt;Class&amp;lt;?&amp;gt; getDatabaseClasses() ====&lt;br /&gt;
{{{#!syntax java&lt;br /&gt;
    @Override&lt;br /&gt;
    public List&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt; getDatabaseClasses()&lt;br /&gt;
    {&lt;br /&gt;
        return super.getDatabaseClasses();&lt;br /&gt;
    }&lt;br /&gt;
}}}&lt;br /&gt;
=== 패키지 ===&lt;br /&gt;
이 문단은 버킷의 패키지에 대해서 다룹니다.&lt;br /&gt;
&lt;br /&gt;
==== org.bukkit.entity ====&lt;br /&gt;
===== Player 클래스 =====&lt;br /&gt;
|| 분류 || 의미 ||&lt;br /&gt;
|| v || void(리턴 안함)) ||&lt;br /&gt;
|| b || boolean(참, 거짓) ||&lt;br /&gt;
|| i || int(32비트 정수) ||&lt;br /&gt;
|| s || String(문자열) ||&lt;br /&gt;
|| d || Double (배정밀도 [[부동소수점]] 실수) ||&lt;br /&gt;
|| f || Float (단정밀도 부동소수점 실수) ||&lt;br /&gt;
|| &amp;lt;이름&amp;gt; || 클래스||&lt;br /&gt;
&lt;br /&gt;
||분류 || 메서드 || 기능 ||&lt;br /&gt;
|| v || chat(String str) || 채팅 띄우기 ||&lt;br /&gt;
|| InetSocketAddress || getAddress() || 접속 주소(IP)  구하기 ||&lt;br /&gt;
|| i || getLevel()) || 레벨 구하기 ||&lt;br /&gt;
|| f || getWalkSpeed() || 걷는속도 구하기 (-1.0 ~ 1.0) ||&lt;br /&gt;
|| v || setWalkSpeed(float value) || 걷는속도 설정하기 (-1.0 ~ 1.0) ||&lt;br /&gt;
|| v ||  setDisplayName(String name) || 디스플레이 이름 변경 ||&lt;br /&gt;
|| s ||  getPlayerListName() || 플레이어 목록의 이름 구하기 ||&lt;br /&gt;
|| v || setPlayerListName(String name)) || [[마인크래프트/플러그인/개발#s-7.2.1.1.1|링크 참고]] ||&lt;br /&gt;
|| v ||  setLevel(int level) || 경험치 레벨 설정 ||&lt;br /&gt;
|| i || getLevel() || 경험치 레벨 얻어오기 ||&lt;br /&gt;
|| v || giveExp(int amount) || 경험치를 amount만큼 주기 ||&lt;br /&gt;
|| v || giveExpLevels(int amount) || 경험치 레벨을 amount만큼 주기 ||&lt;br /&gt;
|| i || getFoodLevel() || 배고픔 수치 구하기 (0~10) ||&lt;br /&gt;
|| v || setFoodLevel(int value) || 배고픔 수치를 value로 설정 ||&lt;br /&gt;
|| v || kickPlayer(String message) || message를 사유로 퇴장시키기 ||&lt;br /&gt;
|| v || hidePlayer(Player player) || player를 보이지 않게 하기 ||&lt;br /&gt;
|| v || sendMessage(String message) || 플레이어에게 메시지 보내기 (ChatColor와 혼용 가능) ||&lt;br /&gt;
|| PlayerInventory ||  getInventory() || 플레이어의 인벤토리를 불러옴 ([[마인크래프트/플러그인/개발#s-7.3.1.2|HumanEntity]]에서 상속됨) ||&lt;br /&gt;
====== setPlayerListName ======&lt;br /&gt;
인지 : String name&lt;br /&gt;
인게임 플레이어 리스트의 이름을 설정합니다.&lt;br /&gt;
16자까지 허용되며, 색깔이 지원됩니다.&lt;br /&gt;
일어날 수 있는 예외들:&lt;br /&gt;
 * IllegalArgumentException - 이름이 길거나 누군가 쓰고있는 이름인 경우&lt;br /&gt;
(원문)&lt;br /&gt;
Sets the name that is shown on the in-game player list.&lt;br /&gt;
The name cannot be longer than 16 characters, but ChatColor is supported.&lt;br /&gt;
&lt;br /&gt;
If the value is null, the name will be identical to HumanEntity.getName().&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
name - new player list name&lt;br /&gt;
Throws:&lt;br /&gt;
IllegalArgumentException - if the name is already used by someone else&lt;br /&gt;
IllegalArgumentException - if the length of the name is too long&lt;br /&gt;
===== HumanEntity =====&lt;br /&gt;
[[추가 바람]]&lt;br /&gt;
[각주]&lt;br /&gt;
[[분류:마인크래프트]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>	</entry>

	</feed>