Fix groups file getting cleared on server start

- Fixes #299
- Because of an earlier change the groups file is loaded before regions are loaded on server start, and region groups remove themselves if there are no valid regions in them anymore.
- Keep groups even though they are empty (so that configuration done in the group is not lost)
This commit is contained in:
Thijs Wiefferink 2017-04-17 21:32:15 +02:00
parent 9d6955039a
commit 9d1585f513
2 changed files with 35 additions and 54 deletions

View File

@ -14,32 +14,15 @@ import me.wiefferink.areashop.regions.GeneralRegion.RegionType;
import me.wiefferink.areashop.regions.RegionGroup;
import me.wiefferink.areashop.regions.RentRegion;
import me.wiefferink.areashop.tools.Utils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.*;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -830,13 +813,26 @@ public class FileManager extends Manager {
result &= loadDefaultFile();
// Convert old formats to the latest (object saving to .yml saving)
preUpdateFiles();
// Load region files (regions folder)
loadRegionFiles(thisTick);
// Convert old formats to the latest (changes in .yml saving format)
postUpdateFiles();
// Load groups.yml
result &= loadGroupsFile();
if(thisTick) {
// Load region files (regions folder)
loadRegionFiles();
// Convert old formats to the latest (changes in .yml saving format)
postUpdateFiles();
// Load groups.yml
result &= loadGroupsFile();
} else {
new BukkitRunnable() {
@Override
public void run() {
// Load region files (regions folder)
loadRegionFiles();
// Convert old formats to the latest (changes in .yml saving format)
postUpdateFiles();
// Load groups.yml
loadGroupsFile();
}
}.runTask(plugin);
}
return result;
}
@ -964,9 +960,8 @@ public class FileManager extends Manager {
/**
* Load all region files.
* @param thisTick Load files in the current tick or a tick later
*/
public void loadRegionFiles(boolean thisTick) {
public void loadRegionFiles() {
regions.clear();
final File file = new File(regionsPath);
if(!file.exists()) {
@ -976,16 +971,7 @@ public class FileManager extends Manager {
}
plugin.setReady(true);
} else if(file.isDirectory()) {
if(thisTick) {
loadRegionFilesNow();
} else {
new BukkitRunnable() {
@Override
public void run() {
loadRegionFilesNow();
}
}.runTask(plugin);
}
loadRegionFilesNow();
}
}

View File

@ -8,6 +8,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
// TODO consider switching to saving lowercase regions
public class RegionGroup {
private AreaShop plugin;
@ -38,12 +39,9 @@ public class RegionGroup {
}
if(newMembers.size() != previousCount) {
setSetting("regions", newMembers);
AreaShop.debug("group save required because of changed member size");
AreaShop.debug("group save required because of changed member size", newMembers);
saveRequired();
}
if(getMembers().size() == 0) {
plugin.getFileManager().removeGroup(this);
}
}
/**
@ -53,7 +51,7 @@ public class RegionGroup {
*/
public boolean addMember(GeneralRegion region) {
List<String> members = getMembers();
if(members.contains(region.getLowerCaseName())) {
if(members.contains(region.getName())) {
return false;
} else {
members.add(region.getName());
@ -69,18 +67,15 @@ public class RegionGroup {
* @return true if the region was in the group before, otherwise false
*/
public boolean removeMember(GeneralRegion region) {
if(!isMember(region)) {
return false;
}
List<String> members = getMembers();
boolean result = isMember(region);
members.remove(region.getName());
if(members.isEmpty()) {
plugin.getFileManager().removeGroup(this);
} else {
setSetting("regions", members);
}
if(result) {
this.saveRequired();
}
return result;
setSetting("regions", members);
this.saveRequired();
return true;
}
/**