개인 자료란 (JE)

  서버 커뮤니티

Profile 꼬마개발자 대표칭호 없음
Profile

질문하기 Java

Spigot의 실제 구현부는 어디서 볼 수 있나요?

2020.06.26 조회 수 826 추천 수 0
이해도 플러그인 
게임버전 (JE) 버킷 

Spigot 플러그인 개발을 공부하고 있습니다.

Spigot 코드를 보니, Player는 Interface인것을 확인했습니다.

interface의 선언부 ex) 

String getDisplayName();

위와 같이 선언부는 있는데 실제 구현부는 Spigot-api jar에 없더라구요.

구현부는 어디에 있을까요?

spigot api가 하는 일이 뭘까요?

마인크래프트 서버에서 데이터를 받아오는 인터페이스 역할만 하는건가요?


구현부는 게임 내부에 있고, spigot을 통해 데이터를 받아오는 형태??


만약 그렇다면 실제 구현부를 보고 싶다면 어디를 참조하면 될까요?

spigot 개발자들이 참조하는 마인크래프트 api 리스트가 존재하나요?





5개의 댓글

wysohn
2020.06.26

nms 를 이용한 개발을 한번이라도 해보셨으면 아시겠지만

 

보통 Craft가 붙은 클래스가 실제 구현부 입니다. 예를들어 Player의 경우 ((CraftPlayer) player).getHandle() 이런식으로 nms 를 직접 이용하는데 이는 player 가 인터페이스는 Player 지만 실제 클래스는 Player를 상속받는 CraftPlayer 입니다.

 

플러그인 <-> Spigot API 인터페이스 <-> Spigot <-> 바닐라 (nms) 이런식으로 생각하시면 될 것 같습니다.

꼬마개발자
2020.06.26
@wysohn

감사합니다.

플러그인 <-> spigot API 이부분은 이해가 되었습니다.

추가 질문드립니다.

CraftPlayer같은 구현부는 Spigot에 있는 걸까요??

바닐라에 있는 걸까요?

 

https://hub.spigotmc.org/stash/projects/SPIGOT

여기에 Spigot api는 있는거 같은데 Spigot impl은 없는거 같습니다.

 

 

플러그인 <-> Spigot API 인터페이스 <-> Spigot <-> 바닐라 (nms)

 

플러그인 : 개인이 만드는 플러그인 jar 파일

Spigot-API : 플러그인 개발할 때 필요한 Spigot API Interface

Spigot -> 이건 제가 볼 수 있는 건가용?? 여기에 실제 구현부가 존재하는건가요??

바닐라 -> Spigot이 바닐라 서버 수정해서 만든 CraftBukkit의 포크 버전 아닌가용?

Spigot을 쓰는데 바닐라의 요소를 쓰나요??

 

문서를 읽어봤지만 이해가 안되서 또 질문드리네요 죄송합니다 .ㅠ

PatrickKR
2020.06.28
@꼬마개발자

NMS는 net.minecraft.server의 다른 지칭어이며, minecraft-server.jar 등에서 볼 수 있는, Mojang 측에서 작성한 코드입니다.

이를 기반으로, Bukkit이라는 API와 CraftBukkit이라는 Bukkit과 NMS를 이어주는 다리 역할을 하는 요소가 있다고 간단하게 생각할 수 있습니다. CraftBukkit 부분은, Bukkit API에는 존재하지 않으며, 직접 BuildTools로 빌드해야 볼 수 있습니다.

Spigot의 경우, Bukkit이 포함된 CraftBukkit의 패치 버전이라고 볼 수 있습니다. 몇년전 DMCA 이후 Bukkit, CraftBukkit, Spigot은 모두 Spigot 팀에서 관리하고 있습니다.

 

https://hub.spigotmc.org/stash/projects/SPIGOT

위 링크를 보시면, Bukkit의 경우 평범한 java 코드, CraftBukkit의 경우 CraftBukkit에 해당하는 java코드와, 디컴파일한 NMS에 패치할 내용들로 구성되어 있습니다.

여기서 Spigot은, 패치된 CraftBukkit에 한번 더 패치를 하여, 성능 개선, 기능 추가 등을 한 것으로 알고 있습니다.

 

SpigotAPI는 Bukkit과 Spigot의 버킷 패치 부분만 들어 있습니다. 따라서, Spigot의 impl은 BuildTools로 된 부분에서 보시거나, CraftBukkit의 java 코드를 보시면 어느 정도 되지 않을까 생각이 됩니다.

PatrickKR
2020.06.28
@꼬마개발자

간단하게 정리해 드리면,

바닐라: NMS Only

CraftBukkit.jar: CraftBukkit (w/ Bukkit) + NMS (w/ CraftBukkit Patch)

Spigot.jar: CraftBukkit (w/ Bukkit, Spigot Patch) + NMS (w/ CraftBukkit Patch, Spigot Patch)

Spigot-API: Bukkit (w/ Spigot Patch)

플러그인: 직접 만드신 부분

냥냐챠
2020.07.15

결론만 말하자면 모든 것이 합쳐진 Uber jar(Shadow jar) 인 spigot 버킷 아카이브 파일을

자바 디컴파일러 같은 것으로 제껴서 열어보면 그쪽이 원하는 모든 코드를 볼 수 있다냥.

 

그리고,

모장 스튜디오가 만든 마인크래프트 서버 코드는 엄연히 타인의 저작권에 속하기 때문에

앞으로도 어느 사이트에서도 잘 정리된 문서는 어디에서도 찾아볼 수 없을꺼다냥. 모장 스튜디오가 풀지 않는 이상냥.

그 코드의 구조를 문서화 하는 것도 저작권에 걸리기 때문에 어느 누구도 하지 않는거거든냥. 

 

또, CraftBukkit 라는 프로젝트는 난독화된 코드 사이에 일종의 어댑터 같은 역할을 하는 프로젝트다냥

(물론 어댑터의 역할 외에도 여러가지 패치도 한다냥)

중간에 끼어서 난독화된 코드에 쉽게 상호작용 할 수 있게끔 말이다냥.

 

이 프로젝트는 직접 사용자한테 디컴파일 -> 매핑 -> 패치 -> 컴파일을 하게끔 하는 방식으로 저작권의 문제를 피해간다냥.

이 프로젝트를 포크하는 spigot, 또 spigot 의 포크인 paper 도 이런 프로세스를 계승한다냥.


재배포를 하면 안되지만 자신의 컴퓨터에서 디컴파일을 수행하고 패치를 수행할 수 있는 도구를 제공하는 것은

재배포의 범주에 안들어가거든냥. 예전에 버킷 사이트가 이 문제로 DMCA Takedown 당하기도 했고냥

 

결론은 초반부에 쓴 그대로 그냥 spigot.jar 을 jd-gui 같은 툴로 제끼면 net.minecraft.server 패키지가 보인다냥 그걸로 보면 된다냥

앞으로도 쭉 이것에 대해서 잘 정리가 된 문서는 어느 사이트에서도 찾아볼 수 없을꺼다냥. 법전으로 두들겨 맞을 용자가 아닌 이상 말이다냥.

 

바바냥 '^'/