fix world delete command crashing servers (#1166)

This commit is contained in:
Julian Krings 2025-02-04 13:03:33 +01:00 committed by GitHub
parent 4d1b0246ca
commit c6963d0cd3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -265,6 +265,17 @@ public class CommandIris implements DecreeExecutor {
return; return;
} }
sender().sendMessage(C.GREEN + "Removing world: " + world.getName()); sender().sendMessage(C.GREEN + "Removing world: " + world.getName());
if (!IrisToolbelt.evacuate(world)) {
sender().sendMessage(C.RED + "Failed to evacuate world: " + world.getName());
return;
}
if (!Bukkit.unloadWorld(world, false)) {
sender().sendMessage(C.RED + "Failed to unload world: " + world.getName());
return;
}
try { try {
if (IrisToolbelt.removeWorld(world)) { if (IrisToolbelt.removeWorld(world)) {
sender().sendMessage(C.GREEN + "Successfully removed " + world.getName() + " from bukkit.yml"); sender().sendMessage(C.GREEN + "Successfully removed " + world.getName() + " from bukkit.yml");
@ -277,27 +288,32 @@ public class CommandIris implements DecreeExecutor {
} }
IrisToolbelt.evacuate(world, "Deleting world"); IrisToolbelt.evacuate(world, "Deleting world");
deletingWorld = true; deletingWorld = true;
Bukkit.unloadWorld(world, false); if (!delete) {
int retries = 12; deletingWorld = false;
if (delete) { return;
}
VolmitSender sender = sender();
J.a(() -> {
int retries = 12;
if (deleteDirectory(world.getWorldFolder())) { if (deleteDirectory(world.getWorldFolder())) {
sender().sendMessage(C.GREEN + "Successfully removed world folder"); sender.sendMessage(C.GREEN + "Successfully removed world folder");
} else { } else {
while(true){ while(true){
if (deleteDirectory(world.getWorldFolder())){ if (deleteDirectory(world.getWorldFolder())){
sender().sendMessage(C.GREEN + "Successfully removed world folder"); sender.sendMessage(C.GREEN + "Successfully removed world folder");
break; break;
} }
retries--; retries--;
if (retries == 0){ if (retries == 0){
sender().sendMessage(C.RED + "Failed to remove world folder"); sender.sendMessage(C.RED + "Failed to remove world folder");
break; break;
} }
J.sleep(3000); J.sleep(3000);
} }
} }
} deletingWorld = false;
deletingWorld = false; });
} }
public static boolean deleteDirectory(File dir) { public static boolean deleteDirectory(File dir) {