개인 자료란 (JE)

  서버 커뮤니티

Profile 오캣진 대표칭호 없음
Profile

질문하기 Java

플레이어가 죽으면 세계를 리셋하는 방법

2023.06.17 조회 수 91 추천 수 0
이해도 초보자 
게임버전 (JE) 1.20 
게임버전 (BE) 관련없음 

플러그인으로 플레이어가 죽으면 서버를 종료하지 않고 새 월드로 초기화하는 방법이 있을까요?

4개의 댓글

윈초
2023.06.18
World world = player.getWorld();
Bukkit.unloadWorld(world, false);

Bukkit.createWorld(new WorldCreator(world.getName()).type(WorldType.NORMAL));
World newWorld = Bukkit.getWorld(world.getName());

for (Player player : Bukkit.getOnlinePlayers()) {
    player.teleport(newWorld.getSpawnLocation());
}
오캣진
2023.06.18
@윈초

리스폰 장소로만 이동하고 끝나는데 혹시 추가 설명 가능한가여?

오캣진
2023.06.18
@오캣진

코드입니다.

 

@EventHandler

public void onPlayerDeath(PlayerDeathEvent event) {

Player player = event.getEntity();

String playerName = player.getName();

 

// Show "Dead Player" in the title for 3 seconds

showSupTitle(player, ChatColor.RED + "[ 사망 ]", "범인 : " + playerName , 3);

 

// Schedule a task to display the countdown

new BukkitRunnable() {

int time = 10;

 

@Override

public void run() {

if (time == 0) {

// Clear the title after the countdown ends

player.sendTitle("", "", 0, 20, 10);

World world = player.getWorld();

Bukkit.unloadWorld(world, false);

 

Bukkit.createWorld(new WorldCreator(world.getName()).type(WorldType.NORMAL));

World newWorld = Bukkit.getWorld(world.getName());

 

for (Player allplayer : Bukkit.getOnlinePlayers()) {

allplayer.teleport(newWorld.getSpawnLocation());

}

cancel();

return;

}

// Update the title with the remaining countdown time

showSupTitle(player, ChatColor.GREEN + "[ 서버 초기화 ]", time + "초" , 0);

time--;

}

}.runTaskTimer(this, 60, 20); // Run the task every second

}

윈초
2023.06.18
@오캣진

같은 시드로 생성되서 그럴거에요. 근처에 블록 설치하고 테스트해봐주시겠어요?