2017-10-14 185 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(文件)利用Apache的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

相關問題