summaryrefslogtreecommitdiffstats
path: root/EssentialsGroupManager/src/org
diff options
context:
space:
mode:
authorElgarL <ElgarL@palmergames.com>2012-01-24 14:08:53 +0000
committerElgarL <ElgarL@palmergames.com>2012-01-24 14:08:53 +0000
commit7d011cfe3adaacbc6412f6e1977f33661e50ddf5 (patch)
tree26abe975afba3ea587099f887cee0a13c361c834 /EssentialsGroupManager/src/org
parent20e3179b3a57d286a496ca34f00952b12ea769fa (diff)
downloadEssentials-7d011cfe3adaacbc6412f6e1977f33661e50ddf5.tar
Essentials-7d011cfe3adaacbc6412f6e1977f33661e50ddf5.tar.gz
Essentials-7d011cfe3adaacbc6412f6e1977f33661e50ddf5.tar.lz
Essentials-7d011cfe3adaacbc6412f6e1977f33661e50ddf5.tar.xz
Essentials-7d011cfe3adaacbc6412f6e1977f33661e50ddf5.zip
Added recursive loop detection for World mirroring (you may not set the
main world as a mirror of another). Fixed fetching world data so it no longer returns the mirrored world for groups. Each world data holder now points to the correct data set, so can be returned as an object.
Diffstat (limited to 'EssentialsGroupManager/src/org')
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java85
1 files changed, 42 insertions, 43 deletions
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
index 1a765c7b4..a24e534be 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java
@@ -130,41 +130,48 @@ public class WorldsHolder {
// These worlds fully mirror their parent
for (Object o : mirrorList) {
- try {
- mirrorsGroup.remove(o.toString().toLowerCase());
- mirrorsUser.remove(o.toString().toLowerCase());
- } catch (Exception e) {
- }
- mirrorsGroup.put(o.toString().toLowerCase(), getWorldData(source).getName());
- mirrorsUser.put(o.toString().toLowerCase(), getWorldData(source).getName());
+ String world = o.toString().toLowerCase();
+ if (world != serverDefaultWorldName) {
+ try {
+ mirrorsGroup.remove(world);
+ mirrorsUser.remove(world);
+ } catch (Exception e) {
+ }
+ mirrorsGroup.put(world, getWorldData(source).getName());
+ mirrorsUser.put(world, getWorldData(source).getName());
+ } else
+ GroupManager.logger.log(Level.WARNING, "Mirroring error with " + o.toString() + ". Recursive loop detected!");
}
} else if (mirrorsMap.get(source) instanceof MemorySection) {
MemorySection subSection = (MemorySection) mirrorsMap.get(source);
for (String key : subSection.getKeys(true)) {
- //System.out.print("Key - " + key);
- if (subSection.get(key) instanceof ArrayList) {
- ArrayList mirrorList = (ArrayList) subSection.get(key);
-
- // These worlds have defined mirroring
- for (Object o : mirrorList) {
- String type = o.toString().toLowerCase();
- try {
- if (type.equals("groups"))
- mirrorsGroup.remove(key.toLowerCase());
-
- if (type.equals("users"))
- mirrorsUser.remove(key.toLowerCase());
-
- } catch (Exception e) {
- }
- if (type.equals("groups"))
- mirrorsGroup.put(key.toLowerCase(), getWorldData(source).getName());
-
- if (type.equals("users"))
- mirrorsUser.put(key.toLowerCase(), getWorldData(source).getName());
- }
+ if (key.toLowerCase() != serverDefaultWorldName) {
+
+ if (subSection.get(key) instanceof ArrayList) {
+ ArrayList mirrorList = (ArrayList) subSection.get(key);
+
+ // These worlds have defined mirroring
+ for (Object o : mirrorList) {
+ String type = o.toString().toLowerCase();
+ try {
+ if (type.equals("groups"))
+ mirrorsGroup.remove(key.toLowerCase());
+
+ if (type.equals("users"))
+ mirrorsUser.remove(key.toLowerCase());
+
+ } catch (Exception e) {
+ }
+ if (type.equals("groups"))
+ mirrorsGroup.put(key.toLowerCase(), getWorldData(source).getName());
+
+ if (type.equals("users"))
+ mirrorsUser.put(key.toLowerCase(), getWorldData(source).getName());
+ }
+ } else
+ GroupManager.logger.log(Level.WARNING, "Mirroring error with " + key + ". Recursive loop detected!");
@@ -312,27 +319,19 @@ public class WorldsHolder {
* If the world is not on the worlds list, returns the default world
* holder.
*
- * (WHEN A WORLD IS CONFIGURED TO MIRROR, IT WILL BE ON THE LIST, BUT
- * POINTING TO ANOTHER WORLD HOLDER)
- *
- * Mirrors prevails original data.
+ * Mirrors return original world data.
*
* @param worldName
* @return OverloadedWorldHolder
*/
public OverloadedWorldHolder getWorldData(String worldName) {
String worldNameLowered = worldName.toLowerCase();
- // If a mirror change to the real world to load.
- if (mirrorsGroup.containsKey(worldNameLowered)) {
- worldNameLowered = mirrorsGroup.get(worldNameLowered);
- }
- OverloadedWorldHolder data = worldsData.get(worldNameLowered);
+
+ if (worldsData.containsKey(worldNameLowered))
+ return worldsData.get(worldNameLowered);
- if (data == null) {
- GroupManager.logger.finest("Requested world " + worldName + " not found or badly mirrored. Returning default world...");
- data = getDefaultWorld();
- }
- return data;
+ GroupManager.logger.finest("Requested world " + worldName + " not found or badly mirrored. Returning default world...");
+ return getDefaultWorld();
}
/**