2017-10-14 234 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