티거의 개발 공간

월드에딧


월드에딧 플러그인은 건축에서 단순 작업이나 입체적인 모양을 구현할 때 쉽게 제작하도록 도와주는 플러그인이다.

이 플러그인을 연동하면 월드에딧에서의 첫번째 지점과 두번째 지점을 선택한 지역을 불러오는 등 월드에딧 기능을 자신의 플러그인에서 사용할 수 있게 된다.

우선 월드에딧을 연동하기 위해서는 사용하는 또는 사용하고자 하는 월드에딧 플러그인을 다운로드하여 자신의 버킷의 플러그인에 넣어두자, 

연동했을 때 주의점은 꼭 그 연동한 플러그인이 자신의 버킷의 플러그인안에 있어야하고 서버에 인식되어야한다. 그렇지 않다면 플러그인의 기능을 사용하려 하는데

플러그인을 찾을 수 없기에 오류가 발생한다.


연동



프로젝트에 라이브러리로 월드에딧을 추가하기 위해 Build Path에 들어간다.



위와 같은 윈도우에서 'Add External JARs' 를 눌러 월드에딧 파일을 추가한다.


이 단계를 거치면 자신의 프로젝트 안에서 월드에딧의 기능을 사용할 수 있게된다.




1
2
3
4
5
public WorldEditPlugin getWorldEdit() {
    Plugin p = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
    if (p instanceof WorldEditPlugin) return (WorldEditPlugin) p;
    else return null;
}
cs


위의 메서드는 월드에딧 플러그인을 불러오는 메서드이다. 필자는 한번 사용할 때 onEnable() 메서드에 플러그인이 활성화 될 때 한번만 불러오게 한 후 변수에 저장해서

계속 사용한다.


1
Selection sel = getWorldEdit().getSelection(Player);
cs


위의 메서드를 호출하여 플레이어가 선택한 두 지점으로 정의된 구역을 받을 수 있다.

물론 이 정의된 구역으로 첫 번째 지점과 두 번째 지점 모두 구할 수 있다.


1
2
3
Selection sel = getWorldEdit().getSelection(Player);
Location pos1 = sel.getMaximumPoint();
Location pos2 = sel.getMinimumPoint();

cs


위처럼 pos1은 첫 번째 지점, pos2는 두 번째 지점이다.


1
2
3
4
Selection sel = getWorldEdit().getSelection(Player);
if(sel.contains(player.getLocation()){
    player.sendMessage("구역 안에 있습니다.");
}
cs


이런 식으로 위치값이 구역 안에 있는지도 파악 할 수 있다.


만약 플레이어에 의해서 정의된 구역 뿐만이 아닌 자신의 플러그인 상에서 구역을 정의하고 싶다면


1
2
3
Location loc1 = new Location(Bukkit.getWorld("world"), 0,0,0);
Location loc2 = new Location(Bukkit.getWorld("world"), 5,5,5);
CuboidSelection sel = new CuboidSelection(loc1.getWorld(), loc1, loc2);
cs


이렇게 새로운 구역을 정의할 수 있다.


1
getWorldEdit().setSelection(player, sel);
cs


위의 메서드는 플레이어가 정의한 구역을 플러그인 내부에서 임의로 교체할 수 있다.


이 이외에도 많은 기능들이 있지만 필자는 모든 내용을 이 게시글에서 다룰 수 없다.

필자는 많이 사용하는 기능들만 적어놓았고 아래 예시 프로젝트를 첨부했으니 참고바란다.







코딩 예시

우선 필자는 아래의 코딩 예시를 먼저 들어 설명을 시작하고자 한다.


1
2
3
4
5
public class Main{
    public static void main(String[] args){
        System.out.println("Hello, World!");
    }
}
cs


위의 예시는 프로그램을 실행했을 때 'Hello, World!' 라고 출력하는 가장 기초적인 프로그램이다.


코딩 방법


위의 예시를 계속 인용해 설명하겠다. 우선 코드는 블럭을 이해해야한다. 블럭이란, 중괄호 { 나 } 로 묶여있는 한 덩어리를 의미한다.


1
2
3
4
5
public class Main{ //첫번째 중괄호 시작
    public static void main(String[] args){ //두번째 중괄호 시작
        System.out.println("Hello, World!"); //세미콜론
    } //두번째 중괄호 
//첫번째 중괄호 끝
cs


이렇게 블럭은 시작과 끝이 정확히 존재해야하며 시작과 끝이 정확하지 않을 경우 오류가 발생한다.


그 다음으로 세미콜론( ; ) 이다. 세미콜론은 실행할 코드의 끝을 맺을 때 사용하는 문자다. 국어 문법에 비유하자면 마침표(.) 와 같다고 할 수 있다.

세미콜론을 찍지 않는다면 해당 코드의 끝은 정확해 지지 않아 오류가 발생한다.


첫번째 중괄호는 '클래스' 인 Main의 블럭이다.

Main 클래스 블럭 안에 무언가 생성된다면 그것들은 모두 Main에 소속된다.


두번째 중괄호는 '메서드' 인 main의 블럭이다.

이 메서드는 프로그램이 실행될 때 가장 먼저 실행되는 메서드이다. 메서드에 붙어있는

(String[] args) 는 메서드 호출에 필요한 '인자'이다. 이 부분은 아직 우리가 손대지 않을 것이므로 용어에 대해서

알아가기만 하자.


변수


변수는 프로그램이 실행되는 중 바뀔 수 있는 유동적인 값을 의미한다.

변수는 아래와 같이 선언할 수 있다.


1
int i = 0//선언 후 0으로 초기화
cs


1
2
int i; //선언
= 0//변수에 0 
cs


위처럼 두 가지 사용법이 있다. 기본적으로 int 는 해당 변수의 형(形)이다. int 는 정수형으로 정수만 대입될 수 있다.

그리고 i 는 변수의 이름이다. 선언 후 아래코드에서 i라는 이름으로 변수 사용이 가능하다.

= 는 이후 연산자 파트에서 언급하겠지만 '대입 연산자' 라는 연산자이다. 


1
2
3
4
5
6
public class Main{
    public static void main(String[] args){
        int i = 0;
        System.out.println(i);
    }
}
cs


위는 변수의 사용 예시이다. 메서드 안에 정수형 변수인 i가 선언되고 0으로 초기화됐다. 그리고 아래에서 변수 i를 출력하고 있다.

이 때 이 프로그램의 결과는 '0' 이라고 출력한다.


여기서 가장 중요한 것은 변수의 '명명(命名)규칙' 이다. 4개가 존재하니 아래 언급하는 4개의 내용은 모두 숙지하자.


1. 대, 소문자가 구분되며 길이에 제한이 없다.

2. 예약어를 사용해서는 안된다.

3. 숫자로 시작해서는 안된다.

4. 특수문자는 '_'와 '$' 만 허용된다.


1번은 변수의 이름이 Hello 와 hello가 있다고 한다면, 두 변수는 다른 변수로 인식된다는 것이다.

2번은 예약어가 무엇인지에 대해 알아야하는데 예약어는 위의 코드에서 자주 보이는 public, class, static, void 와 같이 보라색으로 하이라이팅되는 단어들이다.

이러한 단어들이 포함되는것은 가능하나, 한 예약어 자체가 변수 이름이 되어서는 안된다.

3번 'hello1' 과 같이 명명은 가능하지만 '1hello' 와 같이 명명은 불가능하다는 뜻이다.

4번은 변수 이름안에 'frame_hello' 와 같이 명명은 가능하지만, 'frame!hello' 와 같이 위에 언급된 두 특문이 아니라면 사용이 안된다.


형(形)


변수의 형은 크게 기본형과 참조형으로 나뉜다.


기본형은 다시 논리형, 문자형, 정수형, 실수형 으로 나뉜다.


 논리형

문자형 

정수형 

실수형 

 boolean

char 

byte 

float

 

 

short

double

 

 

int

 

 

 

long

 


아래 표는 변수의 형들이 받을 수 있는 값의 범위이다.


 형

 저장할 수 있는 값의 범위

 boolean

 false,true

 char

 \u0000 ~ \uffff

 byte

 -128 ~ 127

 short

 -32,768 ~ 32,767

 int

 -2147483648 ~ 2147483647

 long

 -9223372036854775808 ~ 9223372036854775807

 float

 1.4E-45 ~ 3.4028235E38

 double

 4.9E-324 ~ 1.7976931348623157E308


기본형들은 쓰다보면 외워지겠지만, 값의 범위는 외워지지도 않고 외우지 않아도 된다. 필자도 값의 범위는 책이나 인터넷을 참고한다.


참조형은 기본형을 제외한 나머지이기에 기본형을 모두 외우면 되지만, 참조형 중에서도 매우 잘 사용하는 형이 하나 있다.

'String' 이라는 문자열인데, 기본형인 문자 하나만 저장하는 char을 여러개로 배열하여 저장하는 참조형이다. 사용은 아래와 같이 가능하다.


1
String hello = "Hello, World!";
cs