개인 자료란 (JE)

  서버 커뮤니티

Profile Dilemma 대표칭호 없음
Profile

질문하기 Java

플레이어의 닉네임을 바꾸는 법 (NMS)

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

현재 기존 플레이어를 삭제하고 새 플레이어를 생성하는 방식으로 사용중인데, 이외에 다른 방법이 있을까요?

모든 기능은 구현은 현재 클라바운드 패킷 제공으로 이루어지고있습니다.


+ 추가 질문: 명령어 자동완성상에서 삭제한 플레이어의 닉네임이 계속 뜨는 문제가 발생해서, 클라바운드 문제인지 서버바운드 문제인지 궁금합니다.


---


과거의 나 업보 씨게 받는다... Deprecated 무시까고 Paper의 playerProfile 쓰다가 기능 구현 귀찮아서 포기...

3개의 댓글

qsef1256
2022.06.13

https://github.com/SkinsRestorer/SkinsRestorerX 에서 API 끌어다 쓰시면 직접 구현하지 않으셔도 됩니다


기술적인 답변을 원한다면, 없으니까 그렇게 돌아가는 거라고 답변 드리고 싶네요 (일단 Spigot API가 플레이어 이름 변경을 지원하지 않습니다, 이걸 강제로 구현하는데 드는 비용은 거의 난장판 일꺼라고 봅니다)


명령어 자동 완성은 Tab Complete 이라고 합니다, https://wiki.vg/Protocol#Tab-Complete_.28clientbound.29 에 서버바운드도 있고 클라바운드도 있는데 실제로 보여주는 건 클라바운드 문제로 보입니다.

qsef1256
2022.06.13

그리고 NMS는 버전마다 다르기 때문에 완벽한 답변을 위해서는 버전을 기재해주셔야 합니다. 이건 사실 버전 관계 없이 구현되었던 부분이라 크게 문제는 안되네요

카라멜
2022.06.18

채팅창에서 출력 되는 자동 완성은 클라이언트에서 처리하기 때문에 ClientboundPlayerInfoPacket 선에서 정리 가능합니다.

다만 명령어를 사용할 때 플러그인에 의해 출력 되는 자동 완성은 net.minecraft.world.entity.player.Player#getScoreboardName() 반환 값을 수정해야 되는데, 바이트 코드를 조작해서 다른 이름으로 반환하시거나 net.minecraft.world.entity.player.PlayergameProfile 필드를 다른 이름이 담긴 GameProfile 객체로 바꾸시면 됩니다.

아마 Paper 기반 구동기라면 gameProfile 필드가 private final이진 않을겁니다.