From 6476158462650c9dea305c2e3892e976a258a529 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 17 Mar 2012 15:56:40 +0000 Subject: Don't remove an attachment on a player leaving as Bukkit never forgets it. This fixes non mirrored permissions being messed up if a player relogs. --- EssentialsGroupManager/src/Changelog.txt | 3 ++- .../dataholder/worlds/WorldsHolder.java | 26 +--------------------- .../permissions/BukkitPermissions.java | 12 ++-------- 3 files changed, 5 insertions(+), 36 deletions(-) diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 13cbf98c6..6bedf7e90 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -150,4 +150,5 @@ v 1.9: - Minor optimization when checking bukkit permissions. - Better reporting when a users.yml is failing to load. - Expanded '/manuadd'to accept an optional variable for the world (eg '/manuadd '). - - Removed some debug spam. \ No newline at end of file + - Removed some debug spam. + - Don't remove an attachment on a player leaving as Bukkit never forgets it. This fixes non mirrored permissions being messed up if a player relogs. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java index e72118468..290a58388 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -347,32 +347,8 @@ public class WorldsHolder { String worldNameLowered = worldName.toLowerCase(); // Find this worlds data - if (worldsData.containsKey(worldNameLowered)) { - - String usersMirror = mirrorsUser.get(worldNameLowered); - String groupsMirror = mirrorsGroup.get(worldNameLowered); - - if (usersMirror != null) { - - // If both are mirrored - if (groupsMirror != null) { - - // if the data sources are the same, return the parent - if (usersMirror == groupsMirror) - return getUpdatedWorldData(usersMirror.toLowerCase()); - - // Both data sources are mirrors, but they are from different parents - // so we return the actual data object. - return getUpdatedWorldData(worldNameLowered); - } - - // Groups isn't a mirror so return this this worlds data source - return getUpdatedWorldData(worldNameLowered); - } - - // users isn't mirrored so we need to return this worlds data source + if (worldsData.containsKey(worldNameLowered)) return getUpdatedWorldData(worldNameLowered); - } // Oddly no data source was found for this world so return the default. GroupManager.logger.finest("Requested world " + worldName + " not found or badly mirrored. Returning default world..."); diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index 0b6148900..dc08168dc 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; +import java.util.WeakHashMap; import org.anjocaido.groupmanager.GroupManager; @@ -37,7 +38,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.permissions.Permission; @@ -54,7 +54,7 @@ import org.bukkit.plugin.PluginManager; */ public class BukkitPermissions { - protected Map attachments = new HashMap(); + protected WeakHashMap attachments = new WeakHashMap(); protected LinkedHashMap registeredPermissions = new LinkedHashMap(); protected GroupManager plugin; protected boolean dumpAllPermissions = true; @@ -368,14 +368,6 @@ public class BukkitPermissions { updatePermissions(event.getPlayer(), event.getPlayer().getWorld().getName()); } - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerQuit(PlayerQuitEvent event) { - if (!GroupManager.isLoaded()) - return; - - attachments.remove(event.getPlayer()); - } - @EventHandler(priority = EventPriority.LOWEST) public void onPlayerKick(PlayerKickEvent event) { attachments.remove(event.getPlayer()); -- cgit v1.2.3