super(handler, sender, args);
}
@Override
public boolean handle() {
Warzone zone;
if (this.args.length == 2) {
zone = Warzone.getZoneByName(this.args[0]);
this.args[0] = this.args[1];
} else if (this.args.length == 1) {
if (!(this.getSender() instanceof Player)) {
return false;
}
zone = Warzone.getZoneByLocation((Player) this.getSender());
if (zone == null) {
ZoneLobby lobby = ZoneLobby.getLobbyByLocation((Player) this.getSender());
if (lobby == null) {
return false;
}
zone = lobby.getZone();
}
} else {
return false;
}
if (zone == null) {
return false;
} else if (!this.isSenderAuthorOfZone(zone)) {
return true;
}
// Kill old warzone, but use it to create the renamed copy
zone.unload();
zone.getVolume().resetBlocks(); // We're going to use the blocks to save the new copy, reset to base state.
String newName = this.args[0];
String oldName = zone.getName();
// Update the name
zone.setName(newName);
zone.saveState(false); // Save new volume files. Don't clear anything, we already unloaded.
WarzoneYmlMapper.save(zone); // Save new config files for warzone.
// Get rid of old unloaded zone instance
War.war.getWarzones().remove(zone);
// Move old files
(new File(War.war.getDataFolder().getPath() + "/temp/renamed/")).mkdir();
(new File(War.war.getDataFolder().getPath() + "/warzone-" + oldName + ".yml")).renameTo(new File(War.war.getDataFolder().getPath() + "/temp/renamed/warzone-" + oldName + ".yml"));
(new File(War.war.getDataFolder().getPath() + "/temp/renamed/dat/warzone-" + oldName)).mkdirs();
String oldPath = War.war.getDataFolder().getPath() + "/dat/warzone-" + oldName + "/";
File oldZoneFolder = new File(oldPath);
File[] oldZoneFiles = oldZoneFolder.listFiles();
for (File file : oldZoneFiles) {
file.renameTo(new File(War.war.getDataFolder().getPath() + "/temp/renamed/dat/warzone-" + oldName + "/" + file.getName()));
}
oldZoneFolder.delete();
// Load new warzone
War.war.log("Loading zone " + newName + "...", Level.INFO);
Warzone newZone = WarzoneYmlMapper.load(newName);
War.war.getWarzones().add(newZone);
try {
newZone.getVolume().loadCorners();
} catch (SQLException ex) {
War.war.log("Failed to load warzone " + newZone.getName() + ": " + ex.getMessage(), Level.WARNING);
throw new RuntimeException(ex);
}
try {
zone.getVolume().loadCorners();
} catch (SQLException ex) {
War.war.log("Failed to load warzone " + zone.getName() + ": " + ex.getMessage(), Level.WARNING);
throw new RuntimeException(ex);
}
if (zone.getLobby() != null) {
zone.getLobby().getVolume().resetBlocks();
}
if (zone.getWarzoneConfig().getBoolean(WarzoneConfig.RESETONLOAD)) {
zone.getVolume().resetBlocks();
}
newZone.initializeZone();
// Update war config
WarYmlMapper.save();
if (War.war.getWarHub() != null) { // warhub has to change