summaryrefslogtreecommitdiffstats
path: root/EssentialsGroupManager/src/org
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2012-01-24 00:52:08 +0100
committersnowleo <schneeleo@gmail.com>2012-01-24 00:52:08 +0100
commitcc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4 (patch)
treea7cbcd229b4a5c3dee2731b95b3ddc1ccd95df4c /EssentialsGroupManager/src/org
parent6af054631fe04ef7a607f24e459e37836c568100 (diff)
parentf93769dd1dd11ef30c77dd6c9e0e5cf275052715 (diff)
downloadEssentials-cc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4.tar
Essentials-cc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4.tar.gz
Essentials-cc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4.tar.lz
Essentials-cc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4.tar.xz
Essentials-cc0e9aa84bc41e341f04202f1f0d2f3c402cf3f4.zip
Merge branch 'refs/heads/master' into 3.0
The changes to EssChat have not been merged Conflicts: Essentials/src/com/earth2me/essentials/Essentials.java Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java Essentials/src/com/earth2me/essentials/ISettings.java Essentials/src/com/earth2me/essentials/OfflinePlayer.java Essentials/src/com/earth2me/essentials/Settings.java Essentials/src/com/earth2me/essentials/Util.java Essentials/src/com/earth2me/essentials/listener/EssentialsBlockListener.java Essentials/src/com/earth2me/essentials/listener/EssentialsPlayerListener.java Essentials/src/com/earth2me/essentials/listener/EssentialsPluginListener.java Essentials/src/messages.properties Essentials/src/messages_da.properties Essentials/src/messages_de.properties Essentials/src/messages_en.properties Essentials/src/messages_es.properties Essentials/src/messages_fr.properties Essentials/src/messages_nl.properties EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayer.java EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerHighest.java EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawn.java EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPP.java EssentialsXMPP/src/com/earth2me/essentials/xmpp/EssentialsXMPPPlayerListener.java
Diffstat (limited to 'EssentialsGroupManager/src/org')
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java8
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java6
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/Tasks/BukkitPermsUpdateTask.java2
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java10
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMGroupEvent.java13
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMSystemEvent.java15
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMUserEvent.java13
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java11
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java132
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java123
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java3
11 files changed, 220 insertions, 116 deletions
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
index f1bf10985..d9715d4be 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GlobalGroups.java
@@ -125,8 +125,12 @@ public class GlobalGroups {
if (element != null)
if (element instanceof List) {
- for (String node : (List<String>) element) {
- newGroup.addPermission(node);
+ try {
+ for (String node : (List<String>) element) {
+ newGroup.addPermission(node);
+ }
+ } catch (ClassCastException e) {
+ throw new IllegalArgumentException("Invalid permission node for global group: " + groupName);
}
} else if (element instanceof String) {
newGroup.addPermission((String) element);
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
index 8134a1c23..db2e60fda 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java
@@ -38,8 +38,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
-import org.bukkit.event.Event.Priority;
-import org.bukkit.event.world.WorldListener;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
@@ -82,7 +80,7 @@ public class GroupManager extends JavaPlugin {
private GMLoggerHandler ch;
public static BukkitPermissions BukkitPermissions;
- private static WorldListener WorldEvents;
+ private static GMWorldListener WorldEvents;
public static final Logger logger = Logger.getLogger(GroupManager.class.getName());
// PERMISSIONS FOR COMMAND BEING LOADED
@@ -493,7 +491,7 @@ public class GroupManager extends JavaPlugin {
}
// PARECE OK
auxUser.addSubGroup(auxGroup);
- sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'.");
+ sender.sendMessage(ChatColor.YELLOW + "You added subgroup '" + auxGroup.getName() + "' to player '" + auxUser.getName() + "'.");
targetPlayer = this.getServer().getPlayer(auxUser.getName());
if (targetPlayer != null)
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/Tasks/BukkitPermsUpdateTask.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/Tasks/BukkitPermsUpdateTask.java
index 8788fc83b..f4b805c35 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/Tasks/BukkitPermsUpdateTask.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/Tasks/BukkitPermsUpdateTask.java
@@ -18,7 +18,7 @@ public class BukkitPermsUpdateTask implements Runnable {
public void run() {
// Signal loaded and update BukkitPermissions.
GroupManager.setLoaded(true);
- //GroupManager.BukkitPermissions.collectPermissions();
+ GroupManager.BukkitPermissions.collectPermissions();
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManager.logger.info("Bukkit Permissions Updated!");
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java
index 1f2be9875..d41f96b0d 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java
@@ -113,7 +113,7 @@ public class User extends DataUnit implements Cloneable {
this.group = group;
flagAsChanged();
if (GroupManager.isLoaded())
- if (GroupManager.BukkitPermissions.player_join = false)
+ if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers();
}
@@ -130,7 +130,7 @@ public class User extends DataUnit implements Cloneable {
this.group = group.getName();
flagAsChanged();
if (GroupManager.isLoaded()) {
- if (GroupManager.BukkitPermissions.player_join = false)
+ if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers();
// Do we notify of the group change?
@@ -159,7 +159,7 @@ public class User extends DataUnit implements Cloneable {
subGroups.add(subGroup.getName());
flagAsChanged();
if (GroupManager.isLoaded()) {
- if (GroupManager.BukkitPermissions.player_join = false)
+ if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED);
}
@@ -182,7 +182,7 @@ public class User extends DataUnit implements Cloneable {
if (subGroups.remove(subGroup.getName())) {
flagAsChanged();
if (GroupManager.isLoaded())
- if (GroupManager.BukkitPermissions.player_join = false)
+ if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.USER_SUBGROUP_CHANGED);
return true;
@@ -229,7 +229,7 @@ public class User extends DataUnit implements Cloneable {
}
flagAsChanged();
if (GroupManager.isLoaded()) {
- if (GroupManager.BukkitPermissions.player_join = false)
+ if (!GroupManager.BukkitPermissions.isPlayer_join())
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.USER_INFO_CHANGED);
}
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMGroupEvent.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMGroupEvent.java
index 9a44a21b8..4482f3d9e 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMGroupEvent.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMGroupEvent.java
@@ -1,6 +1,7 @@
package org.anjocaido.groupmanager.events;
import org.anjocaido.groupmanager.data.Group;
+import org.bukkit.event.HandlerList;
/**
@@ -13,6 +14,18 @@ public class GMGroupEvent extends GroupManagerEvent {
*
*/
private static final long serialVersionUID = -5294917600434510451L;
+ private static final HandlerList handlers = new HandlerList();
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ //////////////////////////////
protected Group group;
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMSystemEvent.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMSystemEvent.java
index f7ecf79de..eb4b95c03 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMSystemEvent.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMSystemEvent.java
@@ -1,5 +1,7 @@
package org.anjocaido.groupmanager.events;
+import org.bukkit.event.HandlerList;
+
/**
* @author ElgarL
@@ -11,6 +13,19 @@ public class GMSystemEvent extends GroupManagerEvent {
*
*/
private static final long serialVersionUID = -8786811924448821548L;
+ private static final HandlerList handlers = new HandlerList();
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ //////////////////////////////
+
protected Action action;
public GMSystemEvent(Action action) {
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMUserEvent.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMUserEvent.java
index 68483c036..efa591562 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMUserEvent.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMUserEvent.java
@@ -1,6 +1,7 @@
package org.anjocaido.groupmanager.events;
import org.anjocaido.groupmanager.data.User;
+import org.bukkit.event.HandlerList;
/**
@@ -13,6 +14,18 @@ public class GMUserEvent extends GroupManagerEvent {
*
*/
private static final long serialVersionUID = -5294917600434510451L;
+ private static final HandlerList handlers = new HandlerList();
+
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+
+ //////////////////////////////
protected User user;
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java
index 037971314..fd1a9d7ff 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/events/GMWorldListener.java
@@ -1,9 +1,10 @@
package org.anjocaido.groupmanager.events;
import org.anjocaido.groupmanager.GroupManager;
-import org.bukkit.event.Event;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldInitEvent;
-import org.bukkit.event.world.WorldListener;
/**
@@ -12,7 +13,7 @@ import org.bukkit.event.world.WorldListener;
* Handle new world creation from other plugins
*
*/
-public class GMWorldListener extends WorldListener {
+public class GMWorldListener implements Listener {
private final GroupManager plugin;
@@ -22,10 +23,10 @@ public class GMWorldListener extends WorldListener {
}
private void registerEvents() {
- plugin.getServer().getPluginManager().registerEvent(Event.Type.WORLD_INIT, this, Event.Priority.Lowest, plugin);
+ plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onWorldInit(WorldInitEvent event) {
String worldName = event.getWorld().getName();
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
index 167103796..51c6dded5 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
@@ -5,9 +5,11 @@
package org.anjocaido.groupmanager.permissions;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.anjocaido.groupmanager.GroupManager;
import org.anjocaido.groupmanager.data.Group;
@@ -97,81 +99,101 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/
@Override
public List<String> getAllPlayersPermissions(String userName) {
- return getAllPlayersPermissions(userName, true);
+ List<String> perms = new ArrayList<String>();
+
+ perms.addAll(getAllPlayersPermissions(userName, true));
+
+ return perms;
}
+
/**
* Returns All permissions (including inheritance and sub groups) for the
* player. With or without Bukkit child nodes.
*
* @param userName
- * @return List<String> of all players permissions.
+ * @return Set<String> of all players permissions.
*/
@Override
- public List<String> getAllPlayersPermissions(String userName, Boolean includeChildren) {
-
- List<String> playerPermArray = new ArrayList<String>();
+ public Set<String> getAllPlayersPermissions(String userName, Boolean includeChildren) {
- for (String perm : ph.getUser(userName).getPermissionList()) {
- if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) {
- playerPermArray.add(perm);
+ Set<String> playerPermArray = new HashSet<String>();
- if (includeChildren) {
- Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray);
-
- if (children != null) {
- for (String child : children.keySet()) {
- if (children.get(child))
- if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child))) {
- playerPermArray.add(child);
- }
- }
- }
- }
- }
- }
+ // Add the players own permissions.
+ playerPermArray.addAll(populatePerms(ph.getUser(userName).getPermissionList(), includeChildren));
+
+ // fetch all group permissions
for (String group : getGroups(userName)) {
+ Set<String> groupPermArray = new HashSet<String>();
+
if (group.startsWith("g:") && GroupManager.getGlobalGroups().hasGroup(group)) {
- for (String perm : GroupManager.getGlobalGroups().getGroupsPermissions(group)) {
- if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) {
- playerPermArray.add(perm);
-
- if (includeChildren) {
- Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray);
- if (children != null) {
- for (String child : children.keySet()) {
- if (children.get(child))
- if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child)))
- playerPermArray.add(child);
- }
- }
- }
- }
- }
+ // GlobalGroups
+ groupPermArray = populatePerms(GroupManager.getGlobalGroups().getGroupsPermissions(group), includeChildren);
+
} else {
- for (String perm : ph.getGroup(group).getPermissionList()) {
- if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) {
- playerPermArray.add(perm);
-
- if (includeChildren) {
- Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray);
- if (children != null) {
- for (String child : children.keySet()) {
- if (children.get(child))
- if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child))) {
- playerPermArray.add(child);
- }
- }
- }
- }
- }
- }
+ // World Groups
+ groupPermArray = populatePerms(ph.getGroup(group).getPermissionList(), includeChildren);
}
+
+ // Add all group permissions, unless negated by direct player perms.
+ for (String perm : groupPermArray)
+ if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm)))
+ playerPermArray.add(perm);
+
}
// Collections.sort(playerPermArray,
// StringPermissionComparator.getInstance());
return playerPermArray;
}
+
+ private Set<String> populatePerms (List<String> perms, boolean includeChildren) {
+
+ Set<String> permArray = new HashSet<String>();
+
+ for (String perm : perms) {
+
+ // Allow * node to populate ALL perms in Bukkit.
+ if (perm.equalsIgnoreCase("*"))
+ permArray.addAll(GroupManager.BukkitPermissions.getAllRegisteredPermissions(includeChildren));
+
+ boolean negated = false;
+ if (perm.startsWith("-"))
+ negated = true;
+
+ if (!permArray.contains(perm)) {
+ permArray.add(perm);
+
+ if ((negated) && (permArray.contains(perm.substring(1))))
+ permArray.remove(perm.substring(1));
+
+ if (includeChildren) {
+
+ Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>());
+
+ if (children != null) {
+ if (negated) {
+
+ // Remove children of negated nodes
+ for (String child : children.keySet())
+ if (children.get(child))
+ if (permArray.contains(child))
+ permArray.remove(child);
+
+ } else {
+
+ // Add child nodes
+ for (String child : children.keySet())
+ if (children.get(child))
+ if ((!permArray.contains(child)) && (!permArray.contains("-" + child)))
+ permArray.add(child);
+ }
+ }
+ }
+ }
+ }
+
+ return permArray;
+ }
/**
* Verify if player is in such group. It will check it's groups inheritance.
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
index 91f9a9bd6..f9363e04d 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
@@ -19,9 +19,11 @@ package org.anjocaido.groupmanager.permissions;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.anjocaido.groupmanager.GroupManager;
//import org.anjocaido.groupmanager.data.User;
@@ -30,17 +32,17 @@ import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
-import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
-import org.bukkit.event.server.ServerListener;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
@@ -61,8 +63,22 @@ public class BukkitPermissions {
protected GroupManager plugin;
protected boolean dumpAllPermissions = true;
protected boolean dumpMatchedPermissions = true;
- public boolean player_join = false;
+ private boolean player_join = false;
+ /**
+ * @return the player_join
+ */
+ public boolean isPlayer_join() {
+ return player_join;
+ }
+
+ /**
+ * @param player_join the player_join to set
+ */
+ public void setPlayer_join(boolean player_join) {
+ this.player_join = player_join;
+ }
+
private static Field permissions;
// Setup reflection (Thanks to Codename_B for the reflection source)
@@ -89,20 +105,8 @@ public class BukkitPermissions {
private void registerEvents() {
PluginManager manager = plugin.getServer().getPluginManager();
- PlayerEvents playerEventListener = new PlayerEvents();
-
- manager.registerEvent(Event.Type.PLAYER_JOIN, playerEventListener, Event.Priority.Lowest, plugin);
- manager.registerEvent(Event.Type.PLAYER_KICK, playerEventListener, Event.Priority.Lowest, plugin);
- manager.registerEvent(Event.Type.PLAYER_QUIT, playerEventListener, Event.Priority.Lowest, plugin);
-
- manager.registerEvent(Event.Type.PLAYER_RESPAWN, playerEventListener, Event.Priority.Lowest, plugin);
- manager.registerEvent(Event.Type.PLAYER_TELEPORT, playerEventListener, Event.Priority.Lowest, plugin);
- manager.registerEvent(Event.Type.PLAYER_PORTAL, playerEventListener, Event.Priority.Lowest, plugin);
-
- ServerListener serverListener = new BukkitEvents();
-
- manager.registerEvent(Event.Type.PLUGIN_ENABLE, serverListener, Event.Priority.Normal, plugin);
- manager.registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Event.Priority.Normal, plugin);
+ manager.registerEvents(new PlayerEvents(), plugin);
+ manager.registerEvents(new BukkitEvents(), plugin);
}
@@ -199,21 +203,22 @@ public class BukkitPermissions {
// Add all permissions for this player (GM only)
// child nodes will be calculated by Bukkit.
- List<String> playerPermArray = worldData.getPermissionsHandler().getAllPlayersPermissions(player.getName(), false);
+ Set<String> playerPermArray = worldData.getPermissionsHandler().getAllPlayersPermissions(player.getName(), false);
Map<String, Boolean> newPerms = new HashMap<String, Boolean>();
- for (String permission : playerPermArray) {
- value = true;
- if (permission.startsWith("-")) {
- permission = permission.substring(1); // cut off -
- value = false;
- }
+ //Set<String> hash = new HashSet<String>();
+ //for (String permission : playerPermArray)
+ // hash.add(permission);
+
+
+ for (String permission : playerPermArray) {
+ value = (!permission.startsWith("-"));
/*
if (!attachment.getPermissions().containsKey(permission)) {
attachment.setPermission(permission, value);
}
*/
- newPerms.put(permission, value);
+ newPerms.put((value? permission : permission.substring(1)), value);
}
//player.recalculatePermissions();
@@ -238,14 +243,46 @@ public class BukkitPermissions {
}
}
+
/**
- * Returns a map of the ALL child permissions as defined by the supplying plugin
+ * Fetch all permissions which are registered with superperms.
+ * {can include child nodes)
+ *
+ * @param includeChildren
+ * @return List of all permission nodes
+ */
+ public List<String> getAllRegisteredPermissions(boolean includeChildren) {
+
+ List<String> perms = new ArrayList<String>();
+
+ for (Permission permission : registeredPermissions) {
+ String name = permission.getName();
+ if (!perms.contains(name)) {
+ perms.add(name);
+
+ if (includeChildren) {
+ Map<String, Boolean> children = getAllChildren(name, new HashSet<String>());
+ if (children != null) {
+ for (String node : children.keySet())
+ if (!perms.contains(node))
+ perms.add(node);
+ }
+ }
+ }
+
+ }
+ return perms;
+ }
+
+ /**
+ * Returns a map of ALL child permissions registered with bukkit
* null is empty
*
* @param node
+ * @param playerPermArray current list of perms to check against for negations
* @return Map of child permissions
*/
- public Map<String, Boolean> getAllChildren(String node, List<String> playerPermArray) {
+ public Map<String, Boolean> getAllChildren(String node, Set<String> playerPermArray) {
LinkedList<String> stack = new LinkedList<String>();
Map<String, Boolean> alreadyVisited = new HashMap<String, Boolean>();
@@ -273,7 +310,7 @@ public class BukkitPermissions {
}
/**
- * Returns a map of the child permissions (1 node deep) as defined by the supplying plugin
+ * Returns a map of the child permissions (1 node deep) as registered with Bukkit.
* null is empty
*
* @param node
@@ -325,40 +362,40 @@ public class BukkitPermissions {
}
}
- protected class PlayerEvents extends PlayerListener {
+ protected class PlayerEvents implements Listener {
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) {
- player_join = true;
+ setPlayer_join(true);
Player player = event.getPlayer();
// force GM to create the player if they are not already listed.
if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) {
- player_join = false;
+ //setPlayer_join(false);
updatePermissions(event.getPlayer());
- } else
- player_join = false;
+ }
+ setPlayer_join(false);
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerPortal(PlayerPortalEvent event) { // will portal into another world
if (event.getTo() != null && !event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
}
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerRespawn(PlayerRespawnEvent event) { // can be respawned in another world
updatePermissions(event.getPlayer(), event.getRespawnLocation().getWorld().getName());
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerTeleport(PlayerTeleportEvent event) { // can be teleported into another world
if (event.getTo() != null && !event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
}
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerQuit(PlayerQuitEvent event) {
if (!GroupManager.isLoaded())
return;
@@ -366,15 +403,15 @@ public class BukkitPermissions {
attachments.remove(event.getPlayer());
}
- @Override
+ @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerKick(PlayerKickEvent event) {
attachments.remove(event.getPlayer());
}
}
- protected class BukkitEvents extends ServerListener {
+ protected class BukkitEvents implements Listener {
- @Override
+ @EventHandler(priority = EventPriority.NORMAL)
public void onPluginEnable(PluginEnableEvent event) {
if (!GroupManager.isLoaded())
return;
@@ -383,7 +420,7 @@ public class BukkitPermissions {
updateAllPlayers();
}
- @Override
+ @EventHandler(priority = EventPriority.NORMAL)
public void onPluginDisable(PluginDisableEvent event) {
collectPermissions();
// updateAllPlayers();
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
index cf11bd37f..3f49757e2 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
@@ -4,6 +4,7 @@ package org.anjocaido.groupmanager.permissions;
//import java.util.Map;
//import java.util.Set;
import java.util.List;
+import java.util.Set;
import org.anjocaido.groupmanager.data.Group;
//import org.anjocaido.groupmanager.data.User;
@@ -235,5 +236,5 @@ public abstract class PermissionsReaderInterface {
public abstract List<String> getAllPlayersPermissions(String userName);
- public abstract List<String> getAllPlayersPermissions(String userName, Boolean includeChildren);
+ public abstract Set<String> getAllPlayersPermissions(String userName, Boolean includeChildren);
}