*이 글은 Spigot 1.19.3 버전을 기준으로 하여 제작되었습니다.
이전 화
https://zepelown.tistory.com/50
퇴장 이벤트에 크게 두 가지가 있습니다.
플레이어가 무슨 이유로든 간에 서버에서 나간 경우인
PlayerQuitEvent
플레이어가 서버에서 퇴장당했을 경우인
PlayerKickEvent
가 있습니다.
퇴장에는 /kick, /ban을 제외하고도 다양한 이유가 있으며
https://namu.wiki/w/마인크래프트/서버/강제%20퇴장%20메시지
위 문서를 참고하시길 바랍니다.
먼저 아셔야 할 것이 있습니다.
위 이벤트는 서로 독립적으로 작동합니다.
이게 뭔 소리냐면
만약 플레이어 A가 킥을 당해 서버에 나가졌다고 하면
언뜻 생각하기로 kick을 당했으니까 quit 이벤트는 발생하지 않을 것 같이 보이지만
두 이벤트는 차례대로 PlayerKickEvent -> PlayerQuitEvent 발생합니다.
이로 인해 플레이어의 퇴장 메시지를 만들 때
단순히 PlayerQuitEvent만 생각할 것이 아니라
PlayerKickEvent 또한 생각해야 합니다.
이를 가장 쉽게 해결하는 방법으로는
quit 메시지를 그대로 출력하되
추가로 강퇴를 당했을 경우에 강퇴 메시지를 추가로 출력하는 방식입니다.
Config에 퇴장 메시지를 추가하여 수정할 수 있도록 하겠습니다.
또한 저번 강의에서 놓친 메시지 출력 여부도 포함하여 작성하겠습니다.
config.yml
TestPlugin.java
(메인 클래스)
private void initConfig(){
config.addDefault("message.join-message.display-message", true);
config.addDefault("message.join-message.message", "&7{playername} 님이 접속하였습니다.");
config.addDefault("message.quit-message.display-message", true);
config.addDefault("message.quit-message.message", "&7{playername} 님이 접속을 종료하셨습니다.");
config.addDefault("message.kick-message.display-message", true);
config.addDefault("message.kick-message.message", "&4{playername} 님이 {reason} 이유로 인해 퇴장당하셨습니다.");
config.options().copyDefaults(true);
saveConfig();
}
이제 이벤트를 관리하는 클래스를 만들어줍니다.
LeaveEvent.java
package io.github.zepelown.testplugin.event;
import io.github.zepelown.testplugin.ChatManager;
import io.github.zepelown.testplugin.TestPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class LeaveEvent implements Listener {
private TestPlugin plugin = TestPlugin.getPlugin();
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e){
if(plugin.getConfig().getBoolean("message.quit-message.display-message"))
e.setQuitMessage(ChatManager.getConfigMessage("message.quit-message.message").replace("{playername}",e.getPlayer().getName()));
}
@EventHandler
public void onPlayerKick(PlayerKickEvent e){
if(plugin.getConfig().getBoolean("message.quit-message.display-message"))
plugin.getServer().broadcastMessage(ChatManager.getConfigMessage("message.kick-message.message").replace("{playername}",e.getPlayer().getName())
.replace("{reason}",e.getReason()));
}
}
{reason}으로 이유를 적는 구간을 넣어주고
이를 적절하게 바꾼 모습입니다.
결과는 다음과 같습니다.
'마인크래프트 > 플러그인 제작 강좌(자바)' 카테고리의 다른 글
[인텔리제이로 마크 플러그인 개발하기]12. 채팅 및 탭리스트에 칭호 달기 (2) | 2023.02.06 |
---|---|
[인텔리제이로 마크 플러그인 개발하기]11. config.yml 제작하기 3편 (플레이어 데이터 저장 및 신규 유저 환영 메시지 작성하기) (13) | 2023.01.27 |
[인텔리제이로 마크 플러그인 개발하기](보충) 플레이어 입장 시 공지사항 수정하기 (2) | 2023.01.19 |
[인텔리제이로 마크 플러그인 개발하기]10. config.yml 제작하기 2편 ( config에 변수 및 색깔 코드 넣기) (4) | 2023.01.16 |
[인텔리제이로 마크 플러그인 개발하기]9. config.yml 제작하기 1편 (플레이어 입장 메시지 만들기) (0) | 2023.01.13 |
댓글