2017-10-14 5 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つの世界:normal world、nether、endはその場では削除できませんが、追加した世界を削除することはできます。

どのように正確にそれを行うことができます理解するためには、MultiverseCoreプラグインのソースコードを見てみましょうことがあります。https://github.com/Multiverse/Multiverse-Core

+0

ありがとうございます!もう少しデバッグした後、unloadWorld(worldName)がfalseを返すことがわかりました。これが理由を説明します。私は、バックアップを管理するためのプラグインの一部としてこのコードを使用しました。私はいくつかのチェックを追加して、指定されたオプションからメインワールド(およびその代替ディメンション)を省略し、その理由を説明するドキュメントを更新します。 – Gentle153

関連する問題