From 9d1585f513dfe79b63d12cf5ccbf312a4df33908 Mon Sep 17 00:00:00 2001 From: Thijs Wiefferink Date: Mon, 17 Apr 2017 21:32:15 +0200 Subject: [PATCH] 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) --- .../areashop/managers/FileManager.java | 64 ++++++++----------- .../areashop/regions/RegionGroup.java | 25 +++----- 2 files changed, 35 insertions(+), 54 deletions(-) diff --git a/AreaShop/src/main/java/me/wiefferink/areashop/managers/FileManager.java b/AreaShop/src/main/java/me/wiefferink/areashop/managers/FileManager.java index 6c27ca6..d75be26 100644 --- a/AreaShop/src/main/java/me/wiefferink/areashop/managers/FileManager.java +++ b/AreaShop/src/main/java/me/wiefferink/areashop/managers/FileManager.java @@ -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(); } } diff --git a/AreaShop/src/main/java/me/wiefferink/areashop/regions/RegionGroup.java b/AreaShop/src/main/java/me/wiefferink/areashop/regions/RegionGroup.java index 08ed3bf..3ba5437 100644 --- a/AreaShop/src/main/java/me/wiefferink/areashop/regions/RegionGroup.java +++ b/AreaShop/src/main/java/me/wiefferink/areashop/regions/RegionGroup.java @@ -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 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 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; } /**