[마인크래프트 플러그인 만들기] 월드에딧 연동법
월드에딧
월드에딧 플러그인은 건축에서 단순 작업이나 입체적인 모양을 구현할 때 쉽게 제작하도록 도와주는 플러그인이다.
이 플러그인을 연동하면 월드에딧에서의 첫번째 지점과 두번째 지점을 선택한 지역을 불러오는 등 월드에딧 기능을 자신의 플러그인에서 사용할 수 있게 된다.
우선 월드에딧을 연동하기 위해서는 사용하는 또는 사용하고자 하는 월드에딧 플러그인을 다운로드하여 자신의 버킷의 플러그인에 넣어두자,
연동했을 때 주의점은 꼭 그 연동한 플러그인이 자신의 버킷의 플러그인안에 있어야하고 서버에 인식되어야한다. 그렇지 않다면 플러그인의 기능을 사용하려 하는데
플러그인을 찾을 수 없기에 오류가 발생한다.
연동
프로젝트에 라이브러리로 월드에딧을 추가하기 위해 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(); |
위처럼 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 |
위의 메서드는 플레이어가 정의한 구역을 플러그인 내부에서 임의로 교체할 수 있다.
이 이외에도 많은 기능들이 있지만 필자는 모든 내용을 이 게시글에서 다룰 수 없다.
필자는 많이 사용하는 기능들만 적어놓았고 아래 예시 프로젝트를 첨부했으니 참고바란다.