2017-10-14 6 views
1

Spigot/Bukkit 용 Minecraft 서버 플러그인에서 세계의 데이터 디렉토리를 삭제하려고하는데 세계와 그 청크를 언로드 한 후에도 일부 파일과 디렉토리를 삭제할 수 없습니다. 여기 Bukkit 서버에서 세계의 데이터 디렉토리를 삭제하는 방법은 무엇입니까?

내 코드의 중요한 부분입니다 :

Server server = Backup.getPlugin(Backup.class).getServer(); 
World world = server.getWorld("world"); 
File active = world.getWorldFolder(); 

// Unload the world. 
server.unloadWorld(world, false); 
// Unload the chunks. 
Chunk[] chunks = world.getLoadedChunks(); 
for (Chunk chunk : chunks) { 
    chunk.unload(false); 
} 
ServerManager.deleteDirectory(active); 

ServerManager.deleteDirectory (파일) 아파치의 FileUtils.deleteQuietly (파일)를 사용하고 다른 기능을 작동하지만, 데이터 디렉토리에 일부 파일을 삭제하는 데 실패 최근 언로드 된 세계는 서버에서 일부 파일을 계속 사용하기 때문에 발생합니다.

내 주요 질문 : 삭제할 수 있도록 세계 데이터 디렉토리가 더 이상 사용되지 않도록하려면 어떻게해야합니까?

+0

멀리 그 세계에서 가능성있는 모든 선수를 순간 이동해야합니다. 또한,'unloadWorld()'와 같이 모든 덩어리를 언로드하는 것이 필요하다고 생각하지 않습니다. – Squiddie

+0

'FileUtils.deleteDirectory (directory)'를 사용해보십시오. 작동하지 않으면 로그를 보여주십시오. 'FileUtils.deleteQuietly'는 예외를 던지지 않으므로 우리는 그 문제가 무엇인지 알지 못합니다. – SocketByte

+0

@Squiddie : 모든 플레이어가 쫓겨나지만 플레이어가 전체 서버에서 온라인 상태가 아니더라도 실패합니다. 또한 아래에 오류 로그를 만들기 전에 청크 언로드를 제거했습니다. – Gentle153

답변

1

기본 세계 3 개 : 일반 세계, 지옥 및 끝은 즉시 삭제할 수 없지만 추가 된 세계는 삭제할 수 있습니다. 당신이 바로 그것을 할 수있는 방법을 이해하기위한

, 당신은 MultiverseCore 플러그인 소스 코드를 살펴 수 있습니다 https://github.com/Multiverse/Multiverse-Core

+0

고마워요! 좀 더 디버깅을 한 후 unloadWorld (worldName)가 false를 반환한다는 것을 알았습니다. 이것은 이유를 설명합니다. 이 코드를 복원하는 것을 포함하여 백업을 관리하는 플러그인의 일부로이 코드를 사용했습니다. 주어진 옵션에서 주요 세계 (및 대체 차원)를 생략하고 설명서를 업데이트하여 이유를 설명하기 위해 몇 가지 추가 검사를 추가하겠습니다. – Gentle153