Fixed infinite loop error on player join.

Optimized code to only update the player logging in instead of all
players online.
This commit is contained in:
ElgarL 2012-01-22 23:46:26 +00:00
parent 6e03ea7b7d
commit 125ea7c701
3 changed files with 18 additions and 9 deletions

View file

@ -109,4 +109,6 @@ v 1.9:
- Fixed text when adding a subgroup to not say the player was moved. - Fixed text when adding a subgroup to not say the player was moved.
- Update to new Bukkit Event system. - Update to new Bukkit Event system.
- Update GroupManagerBridge for new event system. - Update GroupManagerBridge for new event system.
- Fixed a random null error upon a player portaling. - Fixed a random null error upon a player portaling.
- Fixed infinite loop error on player join.
- Optimized code to only update the player logging in instead of all players online.

View file

@ -114,7 +114,7 @@ public class User extends DataUnit implements Cloneable {
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) if (GroupManager.isLoaded())
if (!GroupManager.BukkitPermissions.isPlayer_join()) if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers(); GroupManager.BukkitPermissions.updatePlayer(getBukkitPlayer());
} }
/** /**
@ -131,7 +131,7 @@ public class User extends DataUnit implements Cloneable {
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) { if (GroupManager.isLoaded()) {
if (!GroupManager.BukkitPermissions.isPlayer_join()) if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers(); GroupManager.BukkitPermissions.updatePlayer(getBukkitPlayer());
// Do we notify of the group change? // Do we notify of the group change?
String defaultGroupName = getDataSource().getDefaultGroup().getName(); String defaultGroupName = getDataSource().getDefaultGroup().getName();
@ -160,7 +160,7 @@ public class User extends DataUnit implements Cloneable {
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) { if (GroupManager.isLoaded()) {
if (!GroupManager.BukkitPermissions.isPlayer_join()) if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers(); GroupManager.BukkitPermissions.updatePlayer(getBukkitPlayer());
GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED); GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED);
} }
} }
@ -183,7 +183,7 @@ public class User extends DataUnit implements Cloneable {
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) if (GroupManager.isLoaded())
if (!GroupManager.BukkitPermissions.isPlayer_join()) if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers(); GroupManager.BukkitPermissions.updatePlayer(getBukkitPlayer());
GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED); GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED);
return true; return true;
} }
@ -229,8 +229,8 @@ public class User extends DataUnit implements Cloneable {
} }
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) { if (GroupManager.isLoaded()) {
if (!GroupManager.BukkitPermissions.isPlayer_join()) //if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers(); // GroupManager.BukkitPermissions.updatePlayer(this.getName());
GroupManagerEventHandler.callEvent(this, Action.USER_INFO_CHANGED); GroupManagerEventHandler.callEvent(this, Action.USER_INFO_CHANGED);
} }
} }

View file

@ -122,7 +122,6 @@ public class BukkitPermissions {
registeredPermissions = new LinkedList<Permission>(Bukkit.getPluginManager().getPermissions()); registeredPermissions = new LinkedList<Permission>(Bukkit.getPluginManager().getPermissions());
} }
public void updatePermissions(Player player) { public void updatePermissions(Player player) {
this.updatePermissions(player, null); this.updatePermissions(player, null);
@ -361,6 +360,14 @@ public class BukkitPermissions {
updatePermissions(player); updatePermissions(player);
} }
} }
/**
* force Bukkit to update this Players permissions.
*/
public void updatePlayer(Player player) {
if (player != null)
this.updatePermissions(player, null);
}
protected class PlayerEvents implements Listener { protected class PlayerEvents implements Listener {
@ -370,7 +377,7 @@ public class BukkitPermissions {
Player player = event.getPlayer(); Player player = event.getPlayer();
// force GM to create the player if they are not already listed. // force GM to create the player if they are not already listed.
if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) { if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) {
//setPlayer_join(false); setPlayer_join(false);
updatePermissions(event.getPlayer()); updatePermissions(event.getPlayer());
} }
setPlayer_join(false); setPlayer_join(false);