mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2024-08-06 11:14:08 +00:00
Merge remote branch 'remotes/ess/groupmanager' into essmaster
This commit is contained in:
commit
fd4c82b0eb
|
@ -54,3 +54,19 @@ v 1.5:
|
|||
- Better commenting in config.yml
|
||||
- Fixed GM to recognize Superperm child nodes.
|
||||
If you add a node like Towny.admin GM will now correctly report on all child nodes.
|
||||
- Fixed GM loading world data files twice at startup.
|
||||
- Improved error reporting for invalid groups.yml
|
||||
- Added Global Groups
|
||||
Defined in groupmanager/globalgroups.yml.
|
||||
Create groups in the yml with a g: prefix, then inherit in the worlds groups files.
|
||||
- Added Info node support to Global Groups.
|
||||
- Fixed an error on 'manucheckv'. If the users doesn't have the variable it fell through causing an exception.
|
||||
- Added checking of subgroups for Info nodes.
|
||||
- Expanded 'canUserBuild()' to include inheritance and subgroups.
|
||||
- Added a config.yml setting of 'validate_toggle' for those who prefer 'mantogglevalidate' to always be off.
|
||||
- Prevent setting 'minutes' in the config to zero causing an error.
|
||||
- GM will now check to see if it's data files have been changed at each scheduled save.
|
||||
If the files have been altered (on disc) it will reload, so long as the in-memory data hasn't changed.
|
||||
If the files on Disc have changed AND there have been changes to it's in-memory data it will show a warning.
|
||||
You then MUST issue a '/mansave force' to overwrite the disc files, or a '/manload' to overwrite the memory data.
|
||||
- Fix for an error in checkFullUserPermission caused by players disconnecting mid perms update.
|
|
@ -8,6 +8,10 @@ settings:
|
|||
# If the player is op any permissions set to Op will follow suit.
|
||||
bukkit_perms_override: false
|
||||
|
||||
# Default setting for 'mantoglevalidate'
|
||||
# true will cause GroupManager to attempt name matching by default.
|
||||
validate_toggle: true
|
||||
|
||||
data:
|
||||
save:
|
||||
# How often GroupManager will save it's data back to groups and users.yml
|
||||
|
|
181
EssentialsGroupManager/src/globalgroups.yml
Normal file
181
EssentialsGroupManager/src/globalgroups.yml
Normal file
|
@ -0,0 +1,181 @@
|
|||
groups:
|
||||
|
||||
g:bukkit_default:
|
||||
permissions:
|
||||
- bukkit.broadcast.user
|
||||
|
||||
g:essentials_default:
|
||||
permissions:
|
||||
- essentials.help
|
||||
- essentials.helpop
|
||||
- essentials.list
|
||||
- essentials.motd
|
||||
- essentials.rules
|
||||
- essentials.spawn
|
||||
- groupmanager.notify.self
|
||||
|
||||
g:essentials_builder:
|
||||
permissions:
|
||||
- essentials.afk
|
||||
- essentials.back
|
||||
- essentials.back.ondeath
|
||||
- essentials.balance
|
||||
- essentials.balance.others
|
||||
- essentials.balancetop
|
||||
- essentials.chat.color
|
||||
- essentials.chat.shout
|
||||
- essentials.chat.question
|
||||
- essentials.compass
|
||||
- essentials.depth
|
||||
- essentials.home
|
||||
- essentials.ignore
|
||||
- essentials.kit
|
||||
- essentials.kit.tools
|
||||
- essentials.mail
|
||||
- essentials.mail.send
|
||||
- essentials.me
|
||||
- essentials.msg
|
||||
- essentials.nick
|
||||
- essentials.pay
|
||||
- essentials.ping
|
||||
- essentials.powertool
|
||||
- essentials.protect
|
||||
- essentials.sethome
|
||||
- essentials.signs.use.*
|
||||
- essentials.signs.create.disposal
|
||||
- essentials.signs.create.mail
|
||||
- essentials.signs.create.protection
|
||||
- essentials.signs.create.trade
|
||||
- essentials.signs.break.disposal
|
||||
- essentials.signs.break.mail
|
||||
- essentials.signs.break.protection
|
||||
- essentials.signs.break.trade
|
||||
- essentials.suicide
|
||||
- essentials.time
|
||||
- essentials.tpa
|
||||
- essentials.tpaccept
|
||||
- essentials.tpahere
|
||||
- essentials.tpdeny
|
||||
- essentials.warp
|
||||
- essentials.warp.list
|
||||
- essentials.worth
|
||||
|
||||
g:essentials_moderator:
|
||||
permissions:
|
||||
- essentials.ban
|
||||
- essentials.ban.notify
|
||||
- essentials.banip
|
||||
- essentials.broadcast
|
||||
- essentials.clearinventory
|
||||
- essentials.delwarp
|
||||
- essentials.eco.loan
|
||||
- essentials.ext
|
||||
- essentials.getpos
|
||||
- essentials.helpop.recieve
|
||||
- essentials.home.others
|
||||
- essentials.invsee
|
||||
- essentials.jails
|
||||
- essentials.jump
|
||||
- essentials.kick
|
||||
- essentials.kick.notify
|
||||
- essentials.kill
|
||||
- essentials.mute
|
||||
- essentials.nick.others
|
||||
- essentials.realname
|
||||
- essentials.setwarp
|
||||
- essentials.signs.create.*
|
||||
- essentials.signs.break.*
|
||||
- essentials.spawner
|
||||
- essentials.thunder
|
||||
- essentials.time
|
||||
- essentials.time.set
|
||||
- essentials.protect.alerts
|
||||
- essentials.protect.admin
|
||||
- essentials.protect.ownerinfo
|
||||
- essentials.ptime
|
||||
- essentials.ptime.others
|
||||
- essentials.togglejail
|
||||
- essentials.top
|
||||
- essentials.tp
|
||||
- essentials.tphere
|
||||
- essentials.tppos
|
||||
- essentials.tptoggle
|
||||
- essentials.unban
|
||||
- essentials.unbanip
|
||||
- essentials.weather
|
||||
- essentials.whois
|
||||
- essentials.world
|
||||
- groupmanager.listgroups
|
||||
- groupmanager.mandemote
|
||||
- groupmanager.manpromote
|
||||
- groupmanager.manselect
|
||||
- groupmanager.manuadd
|
||||
- groupmanager.manudel
|
||||
- groupmanager.manwhois
|
||||
- groupmanager.notify.other
|
||||
|
||||
g:essentials_admin:
|
||||
permissions:
|
||||
- -essentials.backup
|
||||
- -essentials.essentials
|
||||
- -essentials.setspawn
|
||||
- -essentials.reloadall
|
||||
- -essentials.plugin
|
||||
- essentials.*
|
||||
- groupmanager.mantogglevalidate
|
||||
- groupmanager.mansave
|
||||
- groupmanager.mangcheckp
|
||||
- groupmanager.manglistp
|
||||
- groupmanager.manucheckp
|
||||
- groupmanager.manulistp
|
||||
|
||||
g:bukkit_moderator:
|
||||
permissions:
|
||||
- bukkit.command.ban
|
||||
- bukkit.command.ban.ip
|
||||
- bukkit.command.ban.player
|
||||
- bukkit.command.gamemode
|
||||
- bukkit.command.kick
|
||||
- bukkit.command.unban
|
||||
- bukkit.command.unban.ip
|
||||
- bukkit.command.unban.player
|
||||
|
||||
g:bukkit_admin:
|
||||
permissions:
|
||||
- bPermissions.admin
|
||||
- bPermissions.demote.admin
|
||||
- bPermissions.gui
|
||||
- bPermissions.iplock.lock
|
||||
- bPermissions.promote.admin
|
||||
- bukkit.broadcast
|
||||
- bukkit.broadcast.admin
|
||||
- bukkit.command
|
||||
- bukkit.command.give
|
||||
- bukkit.command.help
|
||||
- bukkit.command.kill
|
||||
- bukkit.command.list
|
||||
- bukkit.command.me
|
||||
- bukkit.command.op
|
||||
- bukkit.command.op.give
|
||||
- bukkit.command.op.take
|
||||
- bukkit.command.plugins
|
||||
- bukkit.command.reload
|
||||
- bukkit.command.save
|
||||
- bukkit.command.save.disable
|
||||
- bukkit.command.save.enable
|
||||
- bukkit.command.save.perform
|
||||
- bukkit.command.say
|
||||
- bukkit.command.stop
|
||||
- bukkit.command.teleport
|
||||
- bukkit.command.tell
|
||||
- bukkit.command.time
|
||||
- bukkit.command.time.add
|
||||
- bukkit.command.time.set
|
||||
- bukkit.command.version
|
||||
- bukkit.command.whitelist
|
||||
- bukkit.command.whitelist.add
|
||||
- bukkit.command.whitelist.disable
|
||||
- bukkit.command.whitelist.enable
|
||||
- bukkit.command.whitelist.list
|
||||
- bukkit.command.whitelist.reload
|
||||
- bukkit.command.whitelist.remove
|
|
@ -2,147 +2,42 @@ groups:
|
|||
Default:
|
||||
default: true
|
||||
permissions:
|
||||
- essentials.help
|
||||
- essentials.helpop
|
||||
- essentials.list
|
||||
- essentials.motd
|
||||
- essentials.rules
|
||||
- essentials.spawn
|
||||
- groupmanager.notify.self
|
||||
inheritance: []
|
||||
- -bukkit.command.kill
|
||||
inheritance:
|
||||
- g:essentials_default
|
||||
- g:bukkit_default
|
||||
info:
|
||||
prefix: '&e'
|
||||
build: false
|
||||
suffix: ''
|
||||
Builder:
|
||||
default: false
|
||||
permissions:
|
||||
- essentials.afk
|
||||
- essentials.back
|
||||
- essentials.back.ondeath
|
||||
- essentials.balance
|
||||
- essentials.balance.others
|
||||
- essentials.balancetop
|
||||
- essentials.chat.color
|
||||
- essentials.chat.shout
|
||||
- essentials.chat.question
|
||||
- essentials.compass
|
||||
- essentials.depth
|
||||
- essentials.home
|
||||
- essentials.ignore
|
||||
- essentials.kit
|
||||
- essentials.kit.tools
|
||||
- essentials.mail
|
||||
- essentials.mail.send
|
||||
- essentials.me
|
||||
- essentials.msg
|
||||
- essentials.nick
|
||||
- essentials.pay
|
||||
- essentials.ping
|
||||
- essentials.powertool
|
||||
- essentials.protect
|
||||
- essentials.sethome
|
||||
- essentials.signs.use.*
|
||||
- essentials.signs.create.disposal
|
||||
- essentials.signs.create.mail
|
||||
- essentials.signs.create.protection
|
||||
- essentials.signs.create.trade
|
||||
- essentials.signs.break.disposal
|
||||
- essentials.signs.break.mail
|
||||
- essentials.signs.break.protection
|
||||
- essentials.signs.break.trade
|
||||
- essentials.suicide
|
||||
- essentials.time
|
||||
- essentials.tpa
|
||||
- essentials.tpaccept
|
||||
- essentials.tpahere
|
||||
- essentials.tpdeny
|
||||
- essentials.warp
|
||||
- essentials.warp.list
|
||||
- essentials.worth
|
||||
permissions: []
|
||||
inheritance:
|
||||
- default
|
||||
- g:essentials_builder
|
||||
info:
|
||||
prefix: '&2'
|
||||
build: true
|
||||
suffix: ''
|
||||
Moderator:
|
||||
default: false
|
||||
permissions:
|
||||
- essentials.ban
|
||||
- essentials.ban.notify
|
||||
- essentials.banip
|
||||
- essentials.broadcast
|
||||
- essentials.clearinventory
|
||||
- essentials.delwarp
|
||||
- essentials.eco.loan
|
||||
- essentials.ext
|
||||
- essentials.getpos
|
||||
- essentials.helpop.recieve
|
||||
- essentials.home.others
|
||||
- essentials.invsee
|
||||
- essentials.jails
|
||||
- essentials.jump
|
||||
- essentials.kick
|
||||
- essentials.kick.notify
|
||||
- essentials.kill
|
||||
- essentials.mute
|
||||
- essentials.nick.others
|
||||
- essentials.realname
|
||||
- essentials.setwarp
|
||||
- essentials.signs.create.*
|
||||
- essentials.signs.break.*
|
||||
- essentials.spawner
|
||||
- essentials.thunder
|
||||
- essentials.time
|
||||
- essentials.time.set
|
||||
- essentials.protect.alerts
|
||||
- essentials.protect.admin
|
||||
- essentials.protect.ownerinfo
|
||||
- essentials.ptime
|
||||
- essentials.ptime.others
|
||||
- essentials.togglejail
|
||||
- essentials.top
|
||||
- essentials.tp
|
||||
- essentials.tphere
|
||||
- essentials.tppos
|
||||
- essentials.tptoggle
|
||||
- essentials.unban
|
||||
- essentials.unbanip
|
||||
- essentials.weather
|
||||
- essentials.whois
|
||||
- essentials.world
|
||||
- groupmanager.listgroups
|
||||
- groupmanager.mandemote
|
||||
- groupmanager.manpromote
|
||||
- groupmanager.manselect
|
||||
- groupmanager.manuadd
|
||||
- groupmanager.manudel
|
||||
- groupmanager.manwhois
|
||||
- groupmanager.notify.other
|
||||
permissions: []
|
||||
inheritance:
|
||||
- builder
|
||||
- g:essentials_moderator
|
||||
- g:bukkit_moderator
|
||||
info:
|
||||
prefix: '&5'
|
||||
build: true
|
||||
suffix: ''
|
||||
Admin:
|
||||
default: false
|
||||
permissions:
|
||||
- -essentials.backup
|
||||
- -essentials.essentials
|
||||
- -essentials.setspawn
|
||||
- -essentials.reloadall
|
||||
- -essentials.plugin
|
||||
- essentials.*
|
||||
- groupmanager.mantogglevalidate
|
||||
- groupmanager.mansave
|
||||
- groupmanager.mangcheckp
|
||||
- groupmanager.manglistp
|
||||
- groupmanager.manucheckp
|
||||
- groupmanager.manulistp
|
||||
permissions: []
|
||||
inheritance:
|
||||
- moderator
|
||||
- g:essentials_admin
|
||||
- g:bukkit_admin
|
||||
info:
|
||||
prefix: '&c'
|
||||
build: true
|
||||
|
|
|
@ -48,7 +48,10 @@ public class GMConfiguration {
|
|||
} catch (Exception ex) {
|
||||
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
|
||||
}
|
||||
|
||||
// Setup defaults
|
||||
adjustLoggerLevel();
|
||||
plugin.setValidateOnlinePlayer(isToggleValidate());
|
||||
}
|
||||
|
||||
public boolean isOpOverride() {
|
||||
|
@ -57,6 +60,9 @@ public class GMConfiguration {
|
|||
public boolean isBukkitPermsOverride() {
|
||||
return GMconfig.getBoolean("settings.config.bukkit_perms_override", false);
|
||||
}
|
||||
public boolean isToggleValidate() {
|
||||
return GMconfig.getBoolean("settings.config.validate_toggle", true);
|
||||
}
|
||||
|
||||
public Map<String, Object> getMirrorsMap() {
|
||||
// Try to fetch the old mirror path first
|
||||
|
|
|
@ -0,0 +1,393 @@
|
|||
package org.anjocaido.groupmanager;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.anjocaido.groupmanager.data.Group;
|
||||
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
|
||||
import org.anjocaido.groupmanager.utils.Tasks;
|
||||
import org.bukkit.configuration.MemorySection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.yaml.snakeyaml.DumperOptions;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @author ElgarL
|
||||
*
|
||||
*/
|
||||
public class GlobalGroups {
|
||||
|
||||
private GroupManager plugin;
|
||||
private YamlConfiguration GGroups;
|
||||
|
||||
private Map<String, Group> groups;
|
||||
|
||||
protected long timeStampGroups = 0;
|
||||
protected boolean haveGroupsChanged = false;
|
||||
protected File GlobalGroupsFile = null;
|
||||
|
||||
public GlobalGroups(GroupManager plugin) {
|
||||
this.plugin = plugin;
|
||||
load();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the haveGroupsChanged
|
||||
*/
|
||||
public boolean haveGroupsChanged() {
|
||||
if (this.haveGroupsChanged) {
|
||||
return true;
|
||||
}
|
||||
for (Group g : groups.values()) {
|
||||
if (g.isChanged()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeStampGroups
|
||||
*/
|
||||
public long getTimeStampGroups() {
|
||||
return timeStampGroups;
|
||||
}
|
||||
/**
|
||||
* @param timeStampGroups the timeStampGroups to set
|
||||
*/
|
||||
protected void setTimeStampGroups(long timeStampGroups) {
|
||||
this.timeStampGroups = timeStampGroups;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param haveGroupsChanged
|
||||
* the haveGroupsChanged to set
|
||||
*/
|
||||
public void setGroupsChanged(boolean haveGroupsChanged) {
|
||||
this.haveGroupsChanged = haveGroupsChanged;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void load() {
|
||||
|
||||
GGroups = new YamlConfiguration();
|
||||
groups = new HashMap<String, Group>();
|
||||
|
||||
GroupManager.setLoaded(false);
|
||||
|
||||
// READ globalGroups FILE
|
||||
if (GlobalGroupsFile == null)
|
||||
GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml");
|
||||
|
||||
if (!GlobalGroupsFile.exists()) {
|
||||
try {
|
||||
// Create a new file if it doesn't exist.
|
||||
Tasks.copy(plugin.getResourceAsStream("globalgroups.yml"), GlobalGroupsFile);
|
||||
} catch (IOException ex) {
|
||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
GGroups.load(GlobalGroupsFile);
|
||||
} catch (Exception ex) {
|
||||
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + GlobalGroupsFile.getPath(), ex);
|
||||
}
|
||||
|
||||
// Read all global groups
|
||||
Map<String, Object> allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false);
|
||||
|
||||
// Load each groups permissions list.
|
||||
if (allGroups != null)
|
||||
for (String groupName : allGroups.keySet()) {
|
||||
Group newGroup = new Group(groupName.toLowerCase());
|
||||
Object element;
|
||||
|
||||
// Permission nodes
|
||||
element = GGroups.get("groups." + groupName + ".permissions");
|
||||
|
||||
if (element != null)
|
||||
if (element instanceof List) {
|
||||
for (String node : (List<String>) element) {
|
||||
newGroup.addPermission(node);
|
||||
}
|
||||
} else if (element instanceof String) {
|
||||
newGroup.addPermission((String) element);
|
||||
} else
|
||||
throw new IllegalArgumentException("Unknown type of permission node for global group: " + groupName);
|
||||
|
||||
// Info nodes
|
||||
element = GGroups.get("groups." + groupName + ".info");
|
||||
|
||||
if (element != null)
|
||||
if (element instanceof MemorySection) {
|
||||
Map<String, Object> vars = new HashMap<String, Object>();
|
||||
for (String key : ((MemorySection) element).getKeys(false)) {
|
||||
vars.put(key, ((MemorySection) element).get(key));
|
||||
}
|
||||
newGroup.setVariables(vars);
|
||||
} else
|
||||
throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName);
|
||||
|
||||
// Push a new group
|
||||
addGroup(newGroup);
|
||||
}
|
||||
|
||||
removeGroupsChangedFlag();
|
||||
setTimeStampGroups(GlobalGroupsFile.lastModified());
|
||||
GroupManager.setLoaded(true);
|
||||
//GlobalGroupsFile = null;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the globalgroups.yml file
|
||||
*/
|
||||
|
||||
public void writeGroups(boolean overwrite) {
|
||||
|
||||
//File GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml");
|
||||
|
||||
if (haveGroupsChanged()) {
|
||||
if (overwrite || (!overwrite && (getTimeStampGroups() >= GlobalGroupsFile.lastModified()))) {
|
||||
Map<String, Object> root = new HashMap<String, Object>();
|
||||
|
||||
Map<String, Object> groupsMap = new HashMap<String, Object>();
|
||||
root.put("groups", groupsMap);
|
||||
for (String groupKey : groups.keySet()) {
|
||||
Group group = groups.get(groupKey);
|
||||
|
||||
// Group header
|
||||
Map<String, Object> aGroupMap = new HashMap<String, Object>();
|
||||
groupsMap.put(group.getName(), aGroupMap);
|
||||
|
||||
// Info nodes
|
||||
Map<String, Object> infoMap = new HashMap<String, Object>();
|
||||
aGroupMap.put("info", infoMap);
|
||||
|
||||
for (String infoKey : group.getVariables().getVarKeyList()) {
|
||||
infoMap.put(infoKey, group.getVariables().getVarObject(infoKey));
|
||||
}
|
||||
|
||||
// Permission nodes
|
||||
aGroupMap.put("permissions", group.getPermissionList());
|
||||
}
|
||||
|
||||
if (!root.isEmpty()) {
|
||||
DumperOptions opt = new DumperOptions();
|
||||
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||
final Yaml yaml = new Yaml(opt);
|
||||
try {
|
||||
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(GlobalGroupsFile), "UTF-8"));
|
||||
} catch (UnsupportedEncodingException ex) {
|
||||
} catch (FileNotFoundException ex) {
|
||||
}
|
||||
}
|
||||
setTimeStampGroups(GlobalGroupsFile.lastModified());
|
||||
} else {
|
||||
// Newer file found.
|
||||
GroupManager.logger.log(Level.WARNING, "Newer GlobalGroups file found, but we have local changes!");
|
||||
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
|
||||
}
|
||||
removeGroupsChangedFlag();
|
||||
} else {
|
||||
//Check for newer file as no local changes.
|
||||
if (getTimeStampGroups() < GlobalGroupsFile.lastModified()) {
|
||||
System.out.print("Newer GlobalGroups file found (Loading changes)!");
|
||||
// Backup GlobalGroups file
|
||||
backupFile();
|
||||
load();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Backup the BlobalGroups file
|
||||
* @param w
|
||||
*/
|
||||
private void backupFile() {
|
||||
|
||||
File backupFile = new File(plugin.getBackupFolder(), "bkp_ggroups_" + Tasks.getDateString() + ".yml");
|
||||
try {
|
||||
Tasks.copy(GlobalGroupsFile, backupFile);
|
||||
} catch (IOException ex) {
|
||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a group, or replaces an existing one.
|
||||
*
|
||||
* @param groupToAdd
|
||||
*/
|
||||
public void addGroup(Group groupToAdd) {
|
||||
// Create a new group if it already exists
|
||||
if (hasGroup(groupToAdd.getName())) {
|
||||
groupToAdd = groupToAdd.clone();
|
||||
removeGroup(groupToAdd.getName());
|
||||
}
|
||||
|
||||
newGroup(groupToAdd);
|
||||
haveGroupsChanged = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new group if it doesn't already exist.
|
||||
*
|
||||
* @param newGroup
|
||||
*/
|
||||
public Group newGroup(Group newGroup) {
|
||||
// Push a new group
|
||||
if (!groups.containsKey(newGroup.getName().toLowerCase())) {
|
||||
groups.put(newGroup.getName().toLowerCase(), newGroup);
|
||||
this.setGroupsChanged(true);
|
||||
return newGroup;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a group if it exist.
|
||||
*
|
||||
* @param groupName
|
||||
*/
|
||||
public boolean removeGroup(String groupName) {
|
||||
// Push a new group
|
||||
if (groups.containsKey(groupName.toLowerCase())) {
|
||||
groups.remove(groupName.toLowerCase());
|
||||
this.setGroupsChanged(true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the Global Group exists in the globalgroups.yml
|
||||
*
|
||||
* @param groupName
|
||||
* @return true if the group exists
|
||||
*/
|
||||
public boolean hasGroup(String groupName) {
|
||||
return groups.containsKey(groupName.toLowerCase());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the group has the correct permission node.
|
||||
*
|
||||
* @param groupName
|
||||
* @param permissionNode
|
||||
* @return true if node exists
|
||||
*/
|
||||
public boolean hasPermission(String groupName, String permissionNode) {
|
||||
|
||||
if (!hasGroup(groupName.toLowerCase()))
|
||||
return false;
|
||||
|
||||
return groups.get(groupName.toLowerCase()).hasSamePermissionNode(permissionNode);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a PermissionCheckResult of the permission node for the group to
|
||||
* be tested against.
|
||||
*
|
||||
* @param groupName
|
||||
* @param permissionNode
|
||||
* @return PermissionCheckResult object
|
||||
*/
|
||||
public PermissionCheckResult checkPermission(String groupName, String permissionNode) {
|
||||
|
||||
PermissionCheckResult result = new PermissionCheckResult();
|
||||
result.askedPermission = permissionNode;
|
||||
result.resultType = PermissionCheckResult.Type.NOTFOUND;
|
||||
|
||||
if (!hasGroup(groupName.toLowerCase()))
|
||||
return result;
|
||||
|
||||
Group tempGroup = groups.get(groupName.toLowerCase());
|
||||
|
||||
if (tempGroup.hasSamePermissionNode(permissionNode))
|
||||
result.resultType = PermissionCheckResult.Type.FOUND;
|
||||
if (tempGroup.hasSamePermissionNode("-" + permissionNode))
|
||||
result.resultType = PermissionCheckResult.Type.NEGATION;
|
||||
if (tempGroup.hasSamePermissionNode("+" + permissionNode))
|
||||
result.resultType = PermissionCheckResult.Type.EXCEPTION;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a List of all permission nodes for this group null if none
|
||||
*
|
||||
* @param groupName
|
||||
* @return List of all group names
|
||||
*/
|
||||
public List<String> getGroupsPermissions(String groupName) {
|
||||
if (!hasGroup(groupName.toLowerCase()))
|
||||
return null;
|
||||
|
||||
return groups.get(groupName.toLowerCase()).getPermissionList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a Set of all global group names.
|
||||
*
|
||||
* @return Set containing all group names.
|
||||
*/
|
||||
public Set<String> getGlobalGroups() {
|
||||
return groups.keySet();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return a collection of the groups
|
||||
*/
|
||||
public Collection<Group> getGroupList() {
|
||||
return groups.values();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Global Group or null if it doesn't exist.
|
||||
*
|
||||
* @param groupName
|
||||
* @return Group object
|
||||
*/
|
||||
public Group getGroup(String groupName) {
|
||||
if (!hasGroup(groupName.toLowerCase()))
|
||||
return null;
|
||||
|
||||
return groups.get(groupName.toLowerCase());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the globalGroupsFile
|
||||
*/
|
||||
public File getGlobalGroupsFile() {
|
||||
return GlobalGroupsFile;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void removeGroupsChangedFlag() {
|
||||
setGroupsChanged(false);
|
||||
for (Group g : groups.values()) {
|
||||
g.flagAsSaved();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -47,7 +47,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||
*/
|
||||
public class GroupManager extends JavaPlugin {
|
||||
|
||||
private File configFile;
|
||||
// private File configFile;
|
||||
private File backupFolder;
|
||||
private Runnable commiter;
|
||||
private ScheduledThreadPoolExecutor scheduler;
|
||||
|
@ -55,9 +55,26 @@ public class GroupManager extends JavaPlugin {
|
|||
private Map<CommandSender, String> selectedWorlds = new HashMap<CommandSender, String>();
|
||||
private WorldsHolder worldsHolder;
|
||||
private boolean validateOnlinePlayer = true;
|
||||
/**
|
||||
* @return the validateOnlinePlayer
|
||||
*/
|
||||
public boolean isValidateOnlinePlayer() {
|
||||
return validateOnlinePlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param validateOnlinePlayer the validateOnlinePlayer to set
|
||||
*/
|
||||
public void setValidateOnlinePlayer(boolean validateOnlinePlayer) {
|
||||
this.validateOnlinePlayer = validateOnlinePlayer;
|
||||
}
|
||||
|
||||
private boolean isReady = false;
|
||||
private static boolean isLoaded = false;
|
||||
protected GMConfiguration config;
|
||||
|
||||
protected static GlobalGroups globalGroups;
|
||||
|
||||
private GMLoggerHandler ch;
|
||||
public static BukkitPermissions BukkitPermissions;
|
||||
private static WorldListener WorldEvents;
|
||||
|
@ -71,15 +88,20 @@ public class GroupManager extends JavaPlugin {
|
|||
public void onDisable() {
|
||||
setLoaded(false);
|
||||
|
||||
disableScheduler(); // Shutdown before we save, so it doesn't interfere.
|
||||
if (worldsHolder != null) {
|
||||
worldsHolder.saveChanges();
|
||||
try {
|
||||
worldsHolder.saveChanges(false);
|
||||
} catch (IllegalStateException ex) {
|
||||
GroupManager.logger.log(Level.WARNING, ex.getMessage());
|
||||
}
|
||||
}
|
||||
disableScheduler();
|
||||
|
||||
WorldEvents = null;
|
||||
BukkitPermissions = null;
|
||||
|
||||
// EXAMPLE: Custom code, here we just output some info so we can check all is well
|
||||
// EXAMPLE: Custom code, here we just output some info so we can check
|
||||
// all is well
|
||||
PluginDescriptionFile pdfFile = this.getDescription();
|
||||
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!");
|
||||
GroupManager.logger.removeHandler(ch);
|
||||
|
@ -92,8 +114,12 @@ public class GroupManager extends JavaPlugin {
|
|||
GroupManager.logger.addHandler(ch);
|
||||
logger.setLevel(Level.ALL);
|
||||
if (worldsHolder == null) {
|
||||
// Create the backup folder, if it doesn't exist.
|
||||
prepareFileFields();
|
||||
// Load the config.yml
|
||||
prepareConfig();
|
||||
// Load the global groups
|
||||
globalGroups = new GlobalGroups(this);
|
||||
worldsHolder = new WorldsHolder(this);
|
||||
}
|
||||
|
||||
|
@ -104,15 +130,16 @@ public class GroupManager extends JavaPlugin {
|
|||
throw new IllegalStateException("An error ocurred while loading GroupManager");
|
||||
}
|
||||
|
||||
// Initialize the world listener and bukkit permissions to handle events.
|
||||
// Initialize the world listener and bukkit permissions to handle
|
||||
// events.
|
||||
WorldEvents = new GMWorldListener(this);
|
||||
BukkitPermissions = new BukkitPermissions(this);
|
||||
|
||||
enableScheduler();
|
||||
|
||||
/*
|
||||
* Schedule a Bukiit Permissions update for 1 tick later.
|
||||
* All plugins will be loaded by then
|
||||
* Schedule a Bukiit Permissions update for 1 tick later. All plugins
|
||||
* will be loaded by then
|
||||
*/
|
||||
|
||||
if (getServer().getScheduler().scheduleSyncDelayedTask(this, new BukkitPermsUpdateTask(), 1) == -1) {
|
||||
|
@ -123,8 +150,6 @@ public class GroupManager extends JavaPlugin {
|
|||
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static boolean isLoaded() {
|
||||
return isLoaded;
|
||||
}
|
||||
|
@ -138,7 +163,7 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
|
||||
private void prepareFileFields() {
|
||||
configFile = new File(this.getDataFolder(), "config.yml");
|
||||
// configFile = new File(this.getDataFolder(), "config.yml");
|
||||
backupFolder = new File(this.getDataFolder(), "backup");
|
||||
if (!backupFolder.exists()) {
|
||||
getBackupFolder().mkdirs();
|
||||
|
@ -156,13 +181,22 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
@Override
|
||||
public void run() {
|
||||
worldsHolder.saveChanges();
|
||||
try {
|
||||
worldsHolder.saveChanges(false);
|
||||
GroupManager.logger.log(Level.INFO, " Data files refreshed.");
|
||||
} catch (IllegalStateException ex) {
|
||||
GroupManager.logger.log(Level.WARNING, ex.getMessage());
|
||||
}
|
||||
}
|
||||
};
|
||||
scheduler = new ScheduledThreadPoolExecutor(1);
|
||||
int minutes = getGMConfig().getSaveInterval();
|
||||
long minutes = (long)getGMConfig().getSaveInterval();
|
||||
if (minutes > 0) {
|
||||
scheduler.scheduleAtFixedRate(commiter, minutes, minutes, TimeUnit.MINUTES);
|
||||
GroupManager.logger.info("Scheduled Data Saving is set for every " + minutes + " minutes!");
|
||||
} else
|
||||
GroupManager.logger.info("Scheduled Data Saving is Disabled!");
|
||||
|
||||
GroupManager.logger.info("Backups will be retained for " + getGMConfig().getBackupDuration() + " hours!");
|
||||
}
|
||||
}
|
||||
|
@ -181,8 +215,7 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
|
||||
/**
|
||||
* Use the WorldsHolder saveChanges directly instead
|
||||
* Saves the data on file
|
||||
* Use the WorldsHolder saveChanges directly instead Saves the data on file
|
||||
*/
|
||||
@Deprecated
|
||||
public void commit() {
|
||||
|
@ -192,8 +225,7 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
|
||||
/**
|
||||
* Use worlds holder to reload a specific world
|
||||
* Reloads the data
|
||||
* Use worlds holder to reload a specific world Reloads the data
|
||||
*/
|
||||
@Deprecated
|
||||
public void reload() {
|
||||
|
@ -206,7 +238,8 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
/**
|
||||
* The handler in the interface created by AnjoCaido
|
||||
* @return
|
||||
*
|
||||
* @return AnjoPermissionsHandler
|
||||
*/
|
||||
@Deprecated
|
||||
public AnjoPermissionsHandler getPermissionHandler() {
|
||||
|
@ -216,6 +249,7 @@ public class GroupManager extends JavaPlugin {
|
|||
/**
|
||||
* A simple interface, for ones that don't want to mess with overloading.
|
||||
* Yet it is affected by overloading. But seamless.
|
||||
*
|
||||
* @return the dataholder with all information
|
||||
*/
|
||||
@Deprecated
|
||||
|
@ -225,6 +259,7 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
/**
|
||||
* Use this if you want to play with overloading.
|
||||
*
|
||||
* @return a dataholder with overloading interface
|
||||
*/
|
||||
@Deprecated
|
||||
|
@ -234,6 +269,7 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
/**
|
||||
* Called when a command registered by this plugin is received.
|
||||
*
|
||||
* @param sender
|
||||
* @param cmd
|
||||
* @param args
|
||||
|
@ -248,7 +284,6 @@ public class GroupManager extends JavaPlugin {
|
|||
User senderUser = null;
|
||||
boolean isOpOverride = config.isOpOverride();
|
||||
|
||||
|
||||
// DETERMINING PLAYER INFORMATION
|
||||
if (sender instanceof Player) {
|
||||
senderPlayer = (Player) sender;
|
||||
|
@ -283,7 +318,6 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
// VARIABLES USED IN COMMANDS
|
||||
|
||||
|
||||
int count;
|
||||
PermissionCheckResult permissionResult = null;
|
||||
ArrayList<User> removeList = null;
|
||||
|
@ -374,7 +408,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
// break;
|
||||
|
@ -411,7 +446,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' to default settings.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
case manuaddsub:
|
||||
|
@ -455,7 +491,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
case manudelsub:
|
||||
|
@ -497,7 +534,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getName() + "' list.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
case mangadd:
|
||||
|
@ -573,8 +611,7 @@ public class GroupManager extends JavaPlugin {
|
|||
return false;
|
||||
}
|
||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
sender.sendMessage(ChatColor.RED + "Can't add a permission you don't have.");
|
||||
return false;
|
||||
}
|
||||
|
@ -608,7 +645,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You added '" + args[1] + "' to player '" + auxUser.getName() + "' permissions.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
// break;
|
||||
|
@ -641,8 +679,7 @@ public class GroupManager extends JavaPlugin {
|
|||
return false;
|
||||
}
|
||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
sender.sendMessage(ChatColor.RED + "Can't remove a permission you don't have.");
|
||||
return false;
|
||||
}
|
||||
|
@ -662,7 +699,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You removed '" + args[1] + "' from player '" + auxUser.getName() + "' permissions.");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
// break;
|
||||
|
@ -732,7 +770,6 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
case manucheckp:
|
||||
// VALIDANDO ESTADO DO SENDER
|
||||
|
@ -767,7 +804,8 @@ public class GroupManager extends JavaPlugin {
|
|||
return false;
|
||||
}
|
||||
// PARECE OK
|
||||
//auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
|
||||
// auxString =
|
||||
// permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
|
||||
if (permissionResult.owner instanceof User) {
|
||||
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
|
||||
sender.sendMessage(ChatColor.RED + "The user has directly a negation node for that permission.");
|
||||
|
@ -789,7 +827,6 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "SuperPerms reports Node: " + targetPlayer.hasPermission(args[1]));
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
case mangaddp:
|
||||
// VALIDANDO ESTADO DO SENDER
|
||||
|
@ -809,8 +846,7 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
// VALIDANDO SUA PERMISSAO
|
||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||
if (!isConsole && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
if (!isConsole && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
sender.sendMessage(ChatColor.RED + "Can't add a permission you don't have.");
|
||||
return false;
|
||||
}
|
||||
|
@ -864,8 +900,7 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
// VALIDANDO SUA PERMISSAO
|
||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||
if (!isConsole && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
if (!isConsole && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND) || permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||
sender.sendMessage(ChatColor.RED + "Can't remove a permission you don't have.");
|
||||
return false;
|
||||
}
|
||||
|
@ -958,7 +993,8 @@ public class GroupManager extends JavaPlugin {
|
|||
return false;
|
||||
}
|
||||
// PARECE OK
|
||||
//auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
|
||||
// auxString =
|
||||
// permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
|
||||
if (permissionResult.owner instanceof Group) {
|
||||
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
|
||||
sender.sendMessage(ChatColor.RED + "The group inherits the a negation permission from group: " + permissionResult.owner.getName());
|
||||
|
@ -1167,11 +1203,18 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
// VALIDANDO PERMISSAO
|
||||
auxGroup = auxUser.getGroup();
|
||||
auxGroup2 = permissionHandler.nextGroupWithVariable(auxGroup, args[1], null);
|
||||
auxGroup2 = permissionHandler.nextGroupWithVariable(auxGroup, args[1]);
|
||||
|
||||
if (!auxUser.getVariables().hasVar(args[1])) {
|
||||
// Check sub groups
|
||||
if (!auxUser.isSubGroupsEmpty() && auxGroup2 == null)
|
||||
for (Group subGroup : auxUser.subGroupListCopy()) {
|
||||
auxGroup2 = permissionHandler.nextGroupWithVariable(subGroup, args[1]);
|
||||
if (auxGroup2 != null) continue;
|
||||
}
|
||||
if (auxGroup2 == null) {
|
||||
sender.sendMessage(ChatColor.RED + "The user doesn't have access to that variable!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// PARECE OK
|
||||
|
@ -1470,9 +1513,20 @@ public class GroupManager extends JavaPlugin {
|
|||
|
||||
return true;
|
||||
case mansave:
|
||||
worldsHolder.saveChanges();
|
||||
|
||||
boolean forced = false;
|
||||
|
||||
if ((args.length == 1) && (args[0].equalsIgnoreCase("force")))
|
||||
forced = true;
|
||||
|
||||
try {
|
||||
worldsHolder.saveChanges(forced);
|
||||
sender.sendMessage(ChatColor.YELLOW + " The changes were saved.");
|
||||
} catch (IllegalStateException ex) {
|
||||
sender.sendMessage(ChatColor.RED + ex.getMessage());
|
||||
}
|
||||
return true;
|
||||
|
||||
case manload:
|
||||
// THIS CASE DONT NEED SENDER
|
||||
if (args.length > 0) {
|
||||
|
@ -1537,6 +1591,9 @@ public class GroupManager extends JavaPlugin {
|
|||
for (Group g : dataHolder.getGroupList()) {
|
||||
auxString += g.getName() + ", ";
|
||||
}
|
||||
for (Group g : getGlobalGroups().getGroupList()) {
|
||||
auxString += g.getName() + ", ";
|
||||
}
|
||||
if (auxString.lastIndexOf(",") > 0) {
|
||||
auxString = auxString.substring(0, auxString.lastIndexOf(","));
|
||||
}
|
||||
|
@ -1597,7 +1654,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + ".");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
// break;
|
||||
|
@ -1656,7 +1714,8 @@ public class GroupManager extends JavaPlugin {
|
|||
sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + ".");
|
||||
|
||||
targetPlayer = this.getServer().getPlayer(auxUser.getName());
|
||||
if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer);
|
||||
if (targetPlayer != null)
|
||||
BukkitPermissions.updatePermissions(targetPlayer);
|
||||
|
||||
return true;
|
||||
// break;
|
||||
|
@ -1759,11 +1818,9 @@ public class GroupManager extends JavaPlugin {
|
|||
}
|
||||
|
||||
/**
|
||||
* Send confirmation of a group change.
|
||||
* using permission nodes...
|
||||
* Send confirmation of a group change. using permission nodes...
|
||||
*
|
||||
* groupmanager.notify.self
|
||||
* groupmanager.notify.other
|
||||
* groupmanager.notify.self groupmanager.notify.other
|
||||
*
|
||||
* @param name
|
||||
* @param msg
|
||||
|
@ -1776,8 +1833,7 @@ public class GroupManager extends JavaPlugin {
|
|||
if (!test.equals(player)) {
|
||||
if (test.hasPermission("groupmanager.notify.other"))
|
||||
test.sendMessage(ChatColor.YELLOW + name + " was" + msg);
|
||||
} else
|
||||
if ((player != null) && ((player.hasPermission("groupmanager.notify.self")) || (player.hasPermission("groupmanager.notify.other"))))
|
||||
} else if ((player != null) && ((player.hasPermission("groupmanager.notify.self")) || (player.hasPermission("groupmanager.notify.other"))))
|
||||
player.sendMessage(ChatColor.YELLOW + "You were" + msg);
|
||||
}
|
||||
|
||||
|
@ -1796,4 +1852,9 @@ public class GroupManager extends JavaPlugin {
|
|||
public File getBackupFolder() {
|
||||
return backupFolder;
|
||||
}
|
||||
|
||||
public static GlobalGroups getGlobalGroups() {
|
||||
return globalGroups;
|
||||
|
||||
}
|
||||
}
|
|
@ -26,6 +26,10 @@ public abstract class DataUnit {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
public DataUnit(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Every group is matched only by their names and DataSources names.
|
||||
* @param o
|
||||
|
@ -64,7 +68,15 @@ public abstract class DataUnit {
|
|||
}
|
||||
|
||||
public void flagAsChanged() {
|
||||
GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as changed!");
|
||||
WorldDataHolder testSource = getDataSource();
|
||||
String source = "";
|
||||
|
||||
if (testSource == null)
|
||||
source = "GlobalGroups";
|
||||
else
|
||||
source = testSource.getName();
|
||||
|
||||
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as changed!");
|
||||
// for(StackTraceElement st: Thread.currentThread().getStackTrace()){
|
||||
// GroupManager.logger.finest(st.toString());
|
||||
// }
|
||||
|
@ -76,7 +88,15 @@ public abstract class DataUnit {
|
|||
}
|
||||
|
||||
public void flagAsSaved() {
|
||||
GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as saved!");
|
||||
WorldDataHolder testSource = getDataSource();
|
||||
String source = "";
|
||||
|
||||
if (testSource == null)
|
||||
source = "GlobalGroups";
|
||||
else
|
||||
source = testSource.getName();
|
||||
|
||||
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as saved!");
|
||||
changed = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ public class Group extends DataUnit implements Cloneable {
|
|||
private GroupVariables variables = new GroupVariables(this);
|
||||
|
||||
/**
|
||||
* Constructor for individual World Groups.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
|
@ -34,14 +35,30 @@ public class Group extends DataUnit implements Cloneable {
|
|||
super(source, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for Global Groups.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public Group(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone this group
|
||||
* @return a clone of this group
|
||||
*/
|
||||
@Override
|
||||
public Group clone() {
|
||||
Group clone = new Group(getDataSource(), this.getName());
|
||||
Group clone;
|
||||
|
||||
if (getDataSource() == null) {
|
||||
clone = new Group(this.getName());
|
||||
} else {
|
||||
clone = new Group(getDataSource(), this.getName());
|
||||
clone.inherits = new ArrayList<String>(this.getInherits());
|
||||
}
|
||||
|
||||
for (String perm : this.getPermissionList()) {
|
||||
clone.addPermission(perm);
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ public class GroupVariables extends Variables implements Cloneable {
|
|||
|
||||
/**
|
||||
* A clone of all vars here.
|
||||
* @return
|
||||
* @return GroupVariables clone
|
||||
*/
|
||||
protected GroupVariables clone(Group newOwner) {
|
||||
GroupVariables clone = new GroupVariables(newOwner);
|
||||
|
|
|
@ -40,7 +40,7 @@ public class User extends DataUnit implements Cloneable {
|
|||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @return User clone
|
||||
*/
|
||||
@Override
|
||||
public User clone() {
|
||||
|
|
|
@ -27,7 +27,7 @@ public class UserVariables extends Variables {
|
|||
|
||||
/**
|
||||
* A clone of all vars here.
|
||||
* @return
|
||||
* @return UserVariables clone
|
||||
*/
|
||||
protected UserVariables clone(User newOwner) {
|
||||
UserVariables clone = new UserVariables(newOwner);
|
||||
|
|
|
@ -115,7 +115,7 @@ public abstract class Variables implements Cloneable {
|
|||
|
||||
/**
|
||||
* All variable keys this is holding
|
||||
* @return
|
||||
* @return Set of all variable names.
|
||||
*/
|
||||
public Set<String> getVarKeyList() {
|
||||
return variables.keySet();
|
||||
|
|
|
@ -39,7 +39,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
|
|||
/**
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return user object or a new user if none exists.
|
||||
*/
|
||||
@Override
|
||||
public User getUser(String userName) {
|
||||
|
@ -86,7 +86,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
|
|||
/**
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return true if removed/false if not found.
|
||||
*/
|
||||
@Override
|
||||
public boolean removeUser(String userName) {
|
||||
|
@ -137,7 +137,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
|
|||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @return Collection of all users
|
||||
*/
|
||||
@Override
|
||||
public Collection<User> getUserList() {
|
||||
|
@ -156,7 +156,7 @@ public class OverloadedWorldHolder extends WorldDataHolder {
|
|||
/**
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return true if user is overloaded.
|
||||
*/
|
||||
public boolean isOverloaded(String userName) {
|
||||
return overloadedUsers.containsKey(userName.toLowerCase());
|
||||
|
@ -189,8 +189,9 @@ public class OverloadedWorldHolder extends WorldDataHolder {
|
|||
* Gets the user in normal state. Surpassing the overload state.
|
||||
* It doesn't affect permissions. But it enables plugins change the
|
||||
* actual user permissions even in overload mode.
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return user object
|
||||
*/
|
||||
public User surpassOverload(String userName) {
|
||||
if (!isOverloaded(userName)) {
|
||||
|
|
|
@ -49,16 +49,19 @@ public class WorldDataHolder {
|
|||
* The actual users holder
|
||||
*/
|
||||
protected Map<String, User> users = new HashMap<String, User>();
|
||||
|
||||
/**
|
||||
* Points to the default group
|
||||
*/
|
||||
protected Group defaultGroup = null;
|
||||
|
||||
/**
|
||||
* The file, which this class loads/save data from/to
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
protected File f;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -79,6 +82,15 @@ public class WorldDataHolder {
|
|||
*
|
||||
*/
|
||||
protected boolean haveGroupsChanged = false;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected long timeStampGroups = 0;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected long timeStampUsers = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Prevent direct instantiation
|
||||
|
@ -151,7 +163,7 @@ public class WorldDataHolder {
|
|||
/**
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return true if we have data for this player.
|
||||
*/
|
||||
public boolean isUserDeclared(String userName) {
|
||||
return users.containsKey(userName.toLowerCase());
|
||||
|
@ -183,6 +195,9 @@ public class WorldDataHolder {
|
|||
* @return a group if it is found. null if not found.
|
||||
*/
|
||||
public Group getGroup(String groupName) {
|
||||
if (groupName.startsWith("g:"))
|
||||
return GroupManager.getGlobalGroups().getGroup(groupName);
|
||||
else
|
||||
return groups.get(groupName.toLowerCase());
|
||||
}
|
||||
|
||||
|
@ -193,6 +208,9 @@ public class WorldDataHolder {
|
|||
* @return true if exists. false if not.
|
||||
*/
|
||||
public boolean groupExists(String groupName) {
|
||||
if (groupName.startsWith("g:"))
|
||||
return GroupManager.getGlobalGroups().hasGroup(groupName);
|
||||
else
|
||||
return groups.containsKey(groupName.toLowerCase());
|
||||
}
|
||||
|
||||
|
@ -201,6 +219,11 @@ public class WorldDataHolder {
|
|||
* @param groupToAdd
|
||||
*/
|
||||
public void addGroup(Group groupToAdd) {
|
||||
if (groupToAdd.getName().startsWith("g:")) {
|
||||
GroupManager.getGlobalGroups().addGroup(groupToAdd);
|
||||
return;
|
||||
}
|
||||
|
||||
if (groupToAdd.getDataSource() != this) {
|
||||
groupToAdd = groupToAdd.clone(this);
|
||||
}
|
||||
|
@ -215,6 +238,10 @@ public class WorldDataHolder {
|
|||
* @return true if had something to remove. false the group was default or non-existant
|
||||
*/
|
||||
public boolean removeGroup(String groupName) {
|
||||
if (groupName.startsWith("g:")) {
|
||||
return GroupManager.getGlobalGroups().removeGroup(groupName);
|
||||
}
|
||||
|
||||
if (defaultGroup != null && groupName.equalsIgnoreCase(defaultGroup.getName())) {
|
||||
return false;
|
||||
}
|
||||
|
@ -251,9 +278,15 @@ public class WorldDataHolder {
|
|||
* @return null if group already exists. or new Group
|
||||
*/
|
||||
public Group createGroup(String groupName) {
|
||||
if (groupName.startsWith("g:")) {
|
||||
Group newGroup = new Group(groupName);
|
||||
return GroupManager.getGlobalGroups().newGroup(newGroup);
|
||||
}
|
||||
|
||||
if (this.groups.containsKey(groupName.toLowerCase())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Group newGroup = new Group(this, groupName);
|
||||
this.addGroup(newGroup);
|
||||
haveGroupsChanged = true;
|
||||
|
@ -281,15 +314,35 @@ public class WorldDataHolder {
|
|||
*/
|
||||
public void reload() {
|
||||
try {
|
||||
WorldDataHolder ph = load(this.getName(), getGroupsFile(), getUsersFile());
|
||||
this.defaultGroup = ph.defaultGroup;
|
||||
this.groups = ph.groups;
|
||||
this.users = ph.users;
|
||||
reloadGroups();
|
||||
reloadUsers();
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void reloadGroups() {
|
||||
GroupManager.setLoaded(false);
|
||||
try {
|
||||
resetGroups();
|
||||
loadGroups(this, getGroupsFile());
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
GroupManager.setLoaded(true);
|
||||
}
|
||||
|
||||
public void reloadUsers() {
|
||||
GroupManager.setLoaded(false);
|
||||
try {
|
||||
resetUsers();
|
||||
loadUsers(this, getUsersFile());
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(WorldDataHolder.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
GroupManager.setLoaded(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save by yourself!
|
||||
* @deprecated
|
||||
|
@ -302,9 +355,11 @@ public class WorldDataHolder {
|
|||
|
||||
/**
|
||||
* Returns a data holder for the given file
|
||||
*
|
||||
* @param worldName
|
||||
* @param file
|
||||
* @return
|
||||
* @return a new WorldDataHolder
|
||||
*
|
||||
* @throws Exception
|
||||
* @deprecated
|
||||
*/
|
||||
|
@ -448,26 +503,66 @@ public class WorldDataHolder {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a data holder for the given file
|
||||
* Returns a NEW data holder containing data read from the files
|
||||
*
|
||||
* @param worldName
|
||||
* @param groupsFile
|
||||
* @param usersFile
|
||||
* @return
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException {
|
||||
WorldDataHolder ph = new WorldDataHolder(worldName);
|
||||
|
||||
GroupManager.setLoaded(false);
|
||||
loadGroups(ph, groupsFile);
|
||||
loadUsers(ph, usersFile);
|
||||
GroupManager.setLoaded(true);
|
||||
|
||||
return ph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the WorldDataHolder from the files
|
||||
*
|
||||
* @param ph
|
||||
* @param groupsFile
|
||||
* @param usersFile
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
public static WorldDataHolder Update(WorldDataHolder ph, File groupsFile, File usersFile) throws FileNotFoundException, IOException {
|
||||
|
||||
GroupManager.setLoaded(false);
|
||||
ph.resetGroups();
|
||||
loadGroups(ph, groupsFile);
|
||||
|
||||
ph.resetUsers();
|
||||
loadUsers(ph, usersFile);
|
||||
GroupManager.setLoaded(true);
|
||||
|
||||
return ph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the WorldDataHolder from the Groups file
|
||||
*
|
||||
* @param ph
|
||||
* @param groupsFile
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException {
|
||||
WorldDataHolder ph = new WorldDataHolder(worldName);
|
||||
ph.groupsFile = groupsFile;
|
||||
ph.usersFile = usersFile;
|
||||
|
||||
protected static void loadGroups(WorldDataHolder ph, File groupsFile) throws FileNotFoundException, IOException {
|
||||
|
||||
//READ GROUPS FILE
|
||||
Yaml yamlGroups = new Yaml(new SafeConstructor());
|
||||
Map<String, Object> groupsRootDataNode;
|
||||
if (!groupsFile.exists()) {
|
||||
throw new IllegalArgumentException("The file which should contain permissions does not exist!\n" + groupsFile.getPath());
|
||||
throw new IllegalArgumentException("The file which should contain groups does not exist!\n" + groupsFile.getPath());
|
||||
}
|
||||
FileInputStream groupsInputStream = new FileInputStream(groupsFile);
|
||||
try {
|
||||
|
@ -483,7 +578,7 @@ public class WorldDataHolder {
|
|||
|
||||
//PROCESS GROUPS FILE
|
||||
Map<String, List<String>> inheritance = new HashMap<String, List<String>>();
|
||||
try {
|
||||
//try {
|
||||
Map<String, Object> allGroupsNode = (Map<String, Object>) groupsRootDataNode.get("groups");
|
||||
for (String groupKey : allGroupsNode.keySet()) {
|
||||
Map<String, Object> thisGroupNode = (Map<String, Object>) allGroupsNode.get(groupKey);
|
||||
|
@ -513,17 +608,22 @@ public class WorldDataHolder {
|
|||
} else if (thisGroupNode.get("permissions") instanceof String) {
|
||||
thisGrp.addPermission((String) thisGroupNode.get("permissions"));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown type of permissions node(Should be String or List<String>): " + thisGroupNode.get("permissions").getClass().getName());
|
||||
throw new IllegalArgumentException("Unknown type of permissions node(Should be String or List<String>) for group: " + thisGrp.getName());
|
||||
}
|
||||
|
||||
//INFO NODE
|
||||
if (thisGroupNode.get("info") instanceof Map) {
|
||||
Map<String, Object> infoNode = (Map<String, Object>) thisGroupNode.get("info");
|
||||
if (infoNode != null) {
|
||||
thisGrp.setVariables(infoNode);
|
||||
}
|
||||
} else
|
||||
throw new IllegalArgumentException("Unknown entry found in Info section for group: " + thisGrp.getName());
|
||||
|
||||
|
||||
//END INFO NODE
|
||||
|
||||
if (thisGroupNode.get("inheritance") == null || thisGroupNode.get("inheritance") instanceof List) {
|
||||
Object inheritNode = thisGroupNode.get("inheritance");
|
||||
if (inheritNode == null) {
|
||||
thisGroupNode.put("inheritance", new ArrayList<String>());
|
||||
|
@ -538,11 +638,13 @@ public class WorldDataHolder {
|
|||
|
||||
}
|
||||
}
|
||||
}else
|
||||
throw new IllegalArgumentException("Unknown entry found in inheritance section for group: " + thisGrp.getName());
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details.");
|
||||
}
|
||||
//} catch (Exception ex) {
|
||||
// ex.printStackTrace();
|
||||
// throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details.");
|
||||
//}
|
||||
if (ph.defaultGroup == null) {
|
||||
throw new IllegalArgumentException("There was no Default Group declared.");
|
||||
}
|
||||
|
@ -557,12 +659,31 @@ public class WorldDataHolder {
|
|||
}
|
||||
}
|
||||
|
||||
ph.removeGroupsChangedFlag();
|
||||
// Update the LastModified time.
|
||||
ph.groupsFile = groupsFile;
|
||||
ph.setTimeStamps();
|
||||
|
||||
//return ph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the WorldDataHolder from the Users file
|
||||
*
|
||||
* @param ph
|
||||
* @param usersFile
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
protected static void loadUsers(WorldDataHolder ph, File usersFile) throws FileNotFoundException, IOException {
|
||||
|
||||
//READ USERS FILE
|
||||
Yaml yamlUsers = new Yaml(new SafeConstructor());
|
||||
Map<String, Object> usersRootDataNode;
|
||||
if (!groupsFile.exists()) {
|
||||
throw new IllegalArgumentException("The file which should contain permissions does not exist!\n" + usersFile.getPath());
|
||||
if (!usersFile.exists()) {
|
||||
throw new IllegalArgumentException("The file which should contain users does not exist!\n" + usersFile.getPath());
|
||||
}
|
||||
FileInputStream usersInputStream = new FileInputStream(usersFile);
|
||||
try {
|
||||
|
@ -581,7 +702,7 @@ public class WorldDataHolder {
|
|||
|
||||
// Stop loading if the file is empty
|
||||
if (allUsersNode == null)
|
||||
return ph;
|
||||
return ;
|
||||
|
||||
for (String usersKey : allUsersNode.keySet()) {
|
||||
Map<String, Object> thisUserNode = (Map<String, Object>) allUsersNode.get(usersKey);
|
||||
|
@ -644,7 +765,13 @@ public class WorldDataHolder {
|
|||
thisUser.setGroup(ph.defaultGroup);
|
||||
}
|
||||
}
|
||||
return ph;
|
||||
|
||||
ph.removeUsersChangedFlag();
|
||||
// Update the LastModified time.
|
||||
ph.usersFile = usersFile;
|
||||
ph.setTimeStamps();
|
||||
|
||||
//return ph;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -778,6 +905,11 @@ public class WorldDataHolder {
|
|||
}
|
||||
}
|
||||
|
||||
// Update the LastModified time.
|
||||
ph.groupsFile = groupsFile;
|
||||
ph.setTimeStampGroups(groupsFile.lastModified());
|
||||
ph.removeGroupsChangedFlag();
|
||||
|
||||
/*FileWriter tx = null;
|
||||
try {
|
||||
tx = new FileWriter(groupsFile, false);
|
||||
|
@ -842,6 +974,12 @@ public class WorldDataHolder {
|
|||
} catch (FileNotFoundException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
// Update the LastModified time.
|
||||
ph.usersFile = usersFile;
|
||||
ph.setTimeStampUsers(usersFile.lastModified());
|
||||
ph.removeUsersChangedFlag();
|
||||
|
||||
/*FileWriter tx = null;
|
||||
try {
|
||||
tx = new FileWriter(usersFile, false);
|
||||
|
@ -894,7 +1032,7 @@ public class WorldDataHolder {
|
|||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @return true if any user data has changed
|
||||
*/
|
||||
public boolean haveUsersChanged() {
|
||||
if (haveUsersChanged) {
|
||||
|
@ -910,7 +1048,7 @@ public class WorldDataHolder {
|
|||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @return true if any group data has changed.
|
||||
*/
|
||||
public boolean haveGroupsChanged() {
|
||||
if (haveGroupsChanged) {
|
||||
|
@ -964,4 +1102,64 @@ public class WorldDataHolder {
|
|||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets Groups.
|
||||
*/
|
||||
public void resetGroups() {
|
||||
this.defaultGroup = null;
|
||||
this.groups = new HashMap<String, Group>();
|
||||
}
|
||||
/**
|
||||
* Resets Users
|
||||
*/
|
||||
public void resetUsers() {
|
||||
this.users = new HashMap<String, User>();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the groups
|
||||
*/
|
||||
public Map<String, Group> getGroups() {
|
||||
return groups;
|
||||
}
|
||||
/**
|
||||
* @return the users
|
||||
*/
|
||||
public Map<String, User> getUsers() {
|
||||
return users;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeStampGroups
|
||||
*/
|
||||
public long getTimeStampGroups() {
|
||||
return timeStampGroups;
|
||||
}
|
||||
/**
|
||||
* @return the timeStampUsers
|
||||
*/
|
||||
public long getTimeStampUsers() {
|
||||
return timeStampUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param timeStampGroups the timeStampGroups to set
|
||||
*/
|
||||
protected void setTimeStampGroups(long timeStampGroups) {
|
||||
this.timeStampGroups = timeStampGroups;
|
||||
}
|
||||
/**
|
||||
* @param timeStampUsers the timeStampUsers to set
|
||||
*/
|
||||
protected void setTimeStampUsers(long timeStampUsers) {
|
||||
this.timeStampUsers = timeStampUsers;
|
||||
}
|
||||
|
||||
public void setTimeStamps() {
|
||||
if (groupsFile != null)
|
||||
setTimeStampGroups(groupsFile.lastModified());
|
||||
if (usersFile != null)
|
||||
setTimeStampUsers(usersFile.lastModified());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ public class WorldsHolder {
|
|||
* or mirrored worlds that don't need data.
|
||||
*/
|
||||
if (!worldsData.containsKey(folder.getName().toLowerCase())
|
||||
|| !mirrors.containsKey(folder.getName().toLowerCase())) {
|
||||
&& !mirrors.containsKey(folder.getName().toLowerCase())) {
|
||||
loadWorld(folder.getName());
|
||||
}
|
||||
|
||||
|
@ -149,6 +149,8 @@ public class WorldsHolder {
|
|||
w.reload();
|
||||
alreadyDone.add(w);
|
||||
}
|
||||
// Load global groups
|
||||
GroupManager.getGlobalGroups().load();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -160,42 +162,96 @@ public class WorldsHolder {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Wrapper to retain backwards compatibility
|
||||
* (call this function to auto overwrite files)
|
||||
*/
|
||||
public void saveChanges() {
|
||||
saveChanges(true);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void saveChanges(boolean overwrite) {
|
||||
ArrayList<WorldDataHolder> alreadyDone = new ArrayList<WorldDataHolder>();
|
||||
Tasks.removeOldFiles(plugin, plugin.getBackupFolder());
|
||||
|
||||
for (OverloadedWorldHolder w : worldsData.values()) {
|
||||
if (alreadyDone.contains(w)) {
|
||||
continue;
|
||||
}
|
||||
Tasks.removeOldFiles(plugin, plugin.getBackupFolder());
|
||||
if (w == null) {
|
||||
GroupManager.logger.severe("WHAT HAPPENED?");
|
||||
continue;
|
||||
}
|
||||
if (w.haveGroupsChanged()) {
|
||||
//String groupsFolderName = w.getGroupsFile().getParentFile().getName();
|
||||
File backupGroups = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_g_" + Tasks.getDateString() + ".yml");
|
||||
try {
|
||||
Tasks.copy(w.getGroupsFile(), backupGroups);
|
||||
} catch (IOException ex) {
|
||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
if (overwrite || (!overwrite && (w.getTimeStampGroups() >= w.getGroupsFile().lastModified()))) {
|
||||
// Backup Groups file
|
||||
backupFile(w,true);
|
||||
|
||||
WorldDataHolder.writeGroups(w, w.getGroupsFile());
|
||||
w.removeGroupsChangedFlag();
|
||||
//w.removeGroupsChangedFlag();
|
||||
} else {
|
||||
// Newer file found.
|
||||
GroupManager.logger.log(Level.WARNING, "Newer Groups file found for " + w.getName() + ", but we have local changes!");
|
||||
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
|
||||
}
|
||||
} else {
|
||||
//Check for newer file as no local changes.
|
||||
if (w.getTimeStampGroups() < w.getGroupsFile().lastModified()) {
|
||||
System.out.print("Newer Groups file found (Loading changes)!");
|
||||
// Backup Users file
|
||||
backupFile(w,false);
|
||||
w.reloadGroups();
|
||||
}
|
||||
}
|
||||
if (w.haveUsersChanged()) {
|
||||
File backupUsers = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_u_" + Tasks.getDateString() + ".yml");
|
||||
try {
|
||||
Tasks.copy(w.getUsersFile(), backupUsers);
|
||||
} catch (IOException ex) {
|
||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
if (overwrite || (!overwrite && (w.getTimeStampUsers() >= w.getUsersFile().lastModified()))) {
|
||||
// Backup Users file
|
||||
backupFile(w,false);
|
||||
|
||||
WorldDataHolder.writeUsers(w, w.getUsersFile());
|
||||
w.removeUsersChangedFlag();
|
||||
//w.removeUsersChangedFlag();
|
||||
} else {
|
||||
// Newer file found.
|
||||
GroupManager.logger.log(Level.WARNING, "Newer Users file found for " + w.getName() + ", but we have local changes!");
|
||||
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
|
||||
}
|
||||
} else {
|
||||
//Check for newer file as no local changes.
|
||||
if (w.getTimeStampUsers() < w.getUsersFile().lastModified()) {
|
||||
System.out.print("Newer Users file found (Loading changes)!");
|
||||
// Backup Users file
|
||||
backupFile(w,false);
|
||||
w.reloadUsers();
|
||||
}
|
||||
}
|
||||
alreadyDone.add(w);
|
||||
}
|
||||
// Write Global Groups
|
||||
if (GroupManager.getGlobalGroups().haveGroupsChanged()) {
|
||||
GroupManager.getGlobalGroups().writeGroups(overwrite);
|
||||
} else {
|
||||
if (GroupManager.getGlobalGroups().getTimeStampGroups() < GroupManager.getGlobalGroups().getGlobalGroupsFile().lastModified()) {
|
||||
System.out.print("Newer GlobalGroups file found (Loading changes)!");
|
||||
GroupManager.getGlobalGroups().load();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Backup the Groups/Users file
|
||||
* @param w
|
||||
* @param groups
|
||||
*/
|
||||
private void backupFile(OverloadedWorldHolder w, Boolean groups) {
|
||||
|
||||
File backupFile = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + (groups ? "_g_" : "_u_") + Tasks.getDateString() + ".yml");
|
||||
try {
|
||||
Tasks.copy((groups ? w.getGroupsFile() : w.getUsersFile()), backupFile);
|
||||
} catch (IOException ex) {
|
||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -209,7 +265,7 @@ public class WorldsHolder {
|
|||
* Mirrors prevails original data.
|
||||
*
|
||||
* @param worldName
|
||||
* @return
|
||||
* @return OverloadedWorldHolder
|
||||
*/
|
||||
public OverloadedWorldHolder getWorldData(String worldName) {
|
||||
OverloadedWorldHolder data = worldsData.get(worldName.toLowerCase());
|
||||
|
@ -239,31 +295,31 @@ public class WorldsHolder {
|
|||
}
|
||||
|
||||
/**
|
||||
* Retrieves the field p.getWorld().getName() and do
|
||||
* Retrieves the field player.getWorld().getName() and do
|
||||
* getWorld(worldName)
|
||||
* @param p
|
||||
* @return
|
||||
* @param player
|
||||
* @return OverloadedWorldHolder
|
||||
*/
|
||||
public OverloadedWorldHolder getWorldData(Player p) {
|
||||
return getWorldData(p.getWorld().getName());
|
||||
public OverloadedWorldHolder getWorldData(Player player) {
|
||||
return getWorldData(player.getWorld().getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* It does getWorld(worldName).getPermissionsHandler()
|
||||
* @param worldName
|
||||
* @return
|
||||
* @return AnjoPermissionsHandler
|
||||
*/
|
||||
public AnjoPermissionsHandler getWorldPermissions(String worldName) {
|
||||
return getWorldData(worldName).getPermissionsHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
*It does getWorldData(p).getPermission
|
||||
* @param p
|
||||
* @return
|
||||
* Returns the PermissionsHandler for this player data
|
||||
* @param player
|
||||
* @return AnjoPermissionsHandler
|
||||
*/
|
||||
public AnjoPermissionsHandler getWorldPermissions(Player p) {
|
||||
return getWorldData(p).getPermissionsHandler();
|
||||
public AnjoPermissionsHandler getWorldPermissions(Player player) {
|
||||
return getWorldData(player).getPermissionsHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -352,7 +408,7 @@ public class WorldsHolder {
|
|||
* Copies the specified world data to another world
|
||||
* @param fromWorld
|
||||
* @param toWorld
|
||||
* @return
|
||||
* @return true if successfully copied.
|
||||
*/
|
||||
public boolean cloneWorld(String fromWorld, String toWorld) {
|
||||
File fromWorldFolder = new File(worldsFolder, fromWorld);
|
||||
|
@ -401,6 +457,10 @@ public class WorldsHolder {
|
|||
}
|
||||
try {
|
||||
OverloadedWorldHolder thisWorldData = new OverloadedWorldHolder(WorldDataHolder.load(worldName, groupsFile, usersFile));
|
||||
|
||||
// Set the file TimeStamps as it will be default from the initial load.
|
||||
thisWorldData.setTimeStamps();
|
||||
|
||||
if (thisWorldData != null) {
|
||||
GroupManager.logger.finest("Successful load of world " + worldName + "...");
|
||||
worldsData.put(worldName.toLowerCase(), thisWorldData);
|
||||
|
@ -454,7 +514,7 @@ public class WorldsHolder {
|
|||
|
||||
/**
|
||||
* Returns all physically loaded worlds.
|
||||
* @return
|
||||
* @return ArrayList<OverloadedWorldHolder> of all loaded worlds
|
||||
*/
|
||||
public ArrayList<OverloadedWorldHolder> allWorldsDataList() {
|
||||
ArrayList<OverloadedWorldHolder> list = new ArrayList<OverloadedWorldHolder>();
|
||||
|
|
|
@ -34,6 +34,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* It needs a WorldDataHolder to work with.
|
||||
*
|
||||
* @param holder
|
||||
*/
|
||||
public AnjoPermissionsHandler(WorldDataHolder holder) {
|
||||
|
@ -42,9 +43,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* A short name method, for permission method.
|
||||
*
|
||||
* @param player
|
||||
* @param permission
|
||||
* @return
|
||||
* @return true if the player has the permission
|
||||
*/
|
||||
@Override
|
||||
public boolean has(Player player, String permission) {
|
||||
|
@ -53,9 +55,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Checks if a player can use that permission node.
|
||||
*
|
||||
* @param player
|
||||
* @param permission
|
||||
* @return
|
||||
* @return true if the player has the permission
|
||||
*/
|
||||
@Override
|
||||
public boolean permission(Player player, String permission) {
|
||||
|
@ -64,9 +67,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Checks if a player can use that permission node.
|
||||
*
|
||||
* @param playerName
|
||||
* @param permission
|
||||
* @return
|
||||
* @return true if the player has the permission
|
||||
*/
|
||||
public boolean permission(String playerName, String permission) {
|
||||
return checkUserPermission(ph.getUser(playerName), permission);
|
||||
|
@ -74,8 +78,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Returns the name of the group of that player name.
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return String of players group name.
|
||||
*/
|
||||
@Override
|
||||
public String getGroup(String userName) {
|
||||
|
@ -83,10 +88,11 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns All permissions (including inheritance and sub groups) for the player.
|
||||
* Returns All permissions (including inheritance and sub groups) for the
|
||||
* player.
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return List<String> of all players permissions.
|
||||
*/
|
||||
@Override
|
||||
public List<String> getAllPlayersPermissions(String userName) {
|
||||
|
@ -94,6 +100,23 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
List<String> playerPermArray = new ArrayList<String>(ph.getUser(userName).getPermissionList());
|
||||
|
||||
for (String group : getGroups(userName)) {
|
||||
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);
|
||||
|
||||
Map<String, Boolean> children = GroupManager.BukkitPermissions.getChildren(perm);
|
||||
if (children != null) {
|
||||
for (String child : children.keySet()) {
|
||||
if (children.get(child))
|
||||
if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm)))
|
||||
playerPermArray.add(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
for (String perm : ph.getGroup(group).getPermissionList()) {
|
||||
if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) {
|
||||
playerPermArray.add(perm);
|
||||
|
@ -110,25 +133,25 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return playerPermArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if player is in suck group.
|
||||
* It will check it's groups inheritance.
|
||||
* Verify if player is in such group. It will check it's groups inheritance.
|
||||
*
|
||||
* So if you have a group Admin > Moderator
|
||||
*
|
||||
* And verify the player 'MyAdmin', which is Admin, it will return true for both
|
||||
* Admin or Moderator groups.
|
||||
* And verify the player 'MyAdmin', which is Admin, it will return true for
|
||||
* both Admin or Moderator groups.
|
||||
*
|
||||
* Mas if you have a player 'MyModerator', which is Moderator,
|
||||
* it will give false if you pass Admin in group parameter.
|
||||
* If you have a player 'MyModerator', which is Moderator, it will give
|
||||
* false if you pass Admin in group parameter.
|
||||
*
|
||||
* @param name
|
||||
* @param group
|
||||
* @return
|
||||
* @return true if in group (with inheritance)
|
||||
*/
|
||||
@Override
|
||||
public boolean inGroup(String name, String group) {
|
||||
|
@ -144,11 +167,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the appropriate prefix for the user.
|
||||
* This method is a utility method for chat plugins to get the user's prefix
|
||||
* without having to look at every one of the user's ancestors.
|
||||
* Returns an empty string if user has no parent groups.
|
||||
* @param user Player's name
|
||||
* Gets the appropriate prefix for the user. This method is a utility method
|
||||
* for chat plugins to get the user's prefix without having to look at every
|
||||
* one of the user's ancestors. Returns an empty string if user has no
|
||||
* parent groups.
|
||||
*
|
||||
* @param user
|
||||
* Player's name
|
||||
* @return Player's prefix
|
||||
*/
|
||||
@Override
|
||||
|
@ -163,11 +188,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets the appropriate prefix for the user.
|
||||
* This method is a utility method for chat plugins to get the user's prefix
|
||||
* without having to look at every one of the user's ancestors.
|
||||
* Returns an empty string if user has no parent groups.
|
||||
* @param user Player's name
|
||||
* Gets the appropriate prefix for the user. This method is a utility method
|
||||
* for chat plugins to get the user's prefix without having to look at every
|
||||
* one of the user's ancestors. Returns an empty string if user has no
|
||||
* parent groups.
|
||||
*
|
||||
* @param user
|
||||
* Player's name
|
||||
* @return Player's prefix
|
||||
*/
|
||||
@Override
|
||||
|
@ -183,10 +210,12 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets name of the primary group of the user.
|
||||
* Returns the name of the default group if user has no parent groups,
|
||||
* or "Default" if there is no default group for that world.
|
||||
* @param user Player's name
|
||||
* Gets name of the primary group of the user. Returns the name of the
|
||||
* default group if user has no parent groups, or "Default" if there is no
|
||||
* default group for that world.
|
||||
*
|
||||
* @param user
|
||||
* Player's name
|
||||
* @return Name of player's primary group
|
||||
*/
|
||||
public String getPrimaryGroup(String user) {
|
||||
|
@ -196,24 +225,20 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Check if user can build.
|
||||
* @param world Player's world
|
||||
* @param user Player's name
|
||||
* @return Whether the user can build
|
||||
* Check if user can build. Checks inheritance and subgroups.
|
||||
*
|
||||
* @param userName Player's name
|
||||
* @return true if the user can build
|
||||
*/
|
||||
public boolean canUserBuild(String user) {
|
||||
boolean test = ph.getUser(user).getVariables().getVarBoolean("build");
|
||||
public boolean canUserBuild(String userName) {
|
||||
|
||||
if (test) {
|
||||
return test;
|
||||
}
|
||||
|
||||
return canGroupBuild(getGroup(user));
|
||||
return getPermissionBoolean(userName, "build");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the String prefix for the given group
|
||||
*
|
||||
* @param groupName
|
||||
* @return empty string if found none.
|
||||
*/
|
||||
|
@ -228,8 +253,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Return the suffix for the given group name
|
||||
*
|
||||
* @param groupName
|
||||
* @return
|
||||
* @return empty string if not found.
|
||||
*/
|
||||
@Override
|
||||
public String getGroupSuffix(String groupName) {
|
||||
|
@ -241,9 +267,11 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Checks the specified group for the Info Build node.
|
||||
* Does NOT check inheritance
|
||||
*
|
||||
* @param groupName
|
||||
* @return
|
||||
* @return true if can build
|
||||
*/
|
||||
@Override
|
||||
public boolean canGroupBuild(String groupName) {
|
||||
|
@ -255,8 +283,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* It returns a string variable value, set in the INFO node of the group.
|
||||
* It will harvest inheritance for value.
|
||||
* It returns a string variable value, set in the INFO node of the group. It
|
||||
* will harvest inheritance for value.
|
||||
*
|
||||
* @param groupName
|
||||
* @param variable
|
||||
* @return null if no group with that variable is found.
|
||||
|
@ -275,8 +304,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* It returns a Integer variable value
|
||||
* It will harvest inheritance for value.
|
||||
* It returns a Integer variable value It will harvest inheritance for
|
||||
* value.
|
||||
*
|
||||
* @param groupName
|
||||
* @param variable
|
||||
* @return -1 if none found or not parseable.
|
||||
|
@ -295,8 +325,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a boolean for given variable in INFO node.
|
||||
* It will harvest inheritance for value.
|
||||
* Returns a boolean for given variable in INFO node. It will harvest
|
||||
* inheritance for value.
|
||||
*
|
||||
* @param group
|
||||
* @param variable
|
||||
* @return false if not found/not parseable.
|
||||
|
@ -315,8 +346,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a double value for the given variable name in INFO node.
|
||||
* It will harvest inheritance for value.
|
||||
* Returns a double value for the given variable name in INFO node. It will
|
||||
* harvest inheritance for value.
|
||||
*
|
||||
* @param group
|
||||
* @param variable
|
||||
* @return -1 if not found / not parseable.
|
||||
|
@ -336,9 +368,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return
|
||||
* @return empty string if not found
|
||||
*/
|
||||
@Override
|
||||
public String getUserPermissionString(String user, String variable) {
|
||||
|
@ -351,9 +384,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return
|
||||
* @return -1 if not found
|
||||
*/
|
||||
@Override
|
||||
public int getUserPermissionInteger(String user, String variable) {
|
||||
|
@ -366,9 +400,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return
|
||||
* @return boolean value
|
||||
*/
|
||||
@Override
|
||||
public boolean getUserPermissionBoolean(String user, String variable) {
|
||||
|
@ -381,9 +416,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return
|
||||
* @return -1 if not found
|
||||
*/
|
||||
@Override
|
||||
public double getUserPermissionDouble(String user, String variable) {
|
||||
|
@ -395,9 +431,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
* If not found, it will search for his Group variables.
|
||||
* It will harvest the inheritance.
|
||||
* Returns the variable value of the user, in INFO node. If not found, it
|
||||
* will search for his Group variables. It will harvest the inheritance and
|
||||
* subgroups.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return empty string if not found
|
||||
|
@ -417,6 +454,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
Group result = nextGroupWithVariable(start, variable);
|
||||
if (result == null) {
|
||||
// Check sub groups
|
||||
if (!auser.isSubGroupsEmpty())
|
||||
for (Group subGroup : auser.subGroupListCopy()) {
|
||||
result = nextGroupWithVariable(subGroup, variable);
|
||||
// Found value?
|
||||
if (result != null)
|
||||
continue;
|
||||
}
|
||||
if (result == null)
|
||||
return "";
|
||||
}
|
||||
return result.getVariables().getVarString(variable);
|
||||
|
@ -424,9 +470,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
* If not found, it will search for his Group variables.
|
||||
* It will harvest the inheritance.
|
||||
* Returns the variable value of the user, in INFO node. If not found, it
|
||||
* will search for his Group variables. It will harvest the inheritance and
|
||||
* subgroups.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return -1 if not found
|
||||
|
@ -446,6 +493,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
Group result = nextGroupWithVariable(start, variable);
|
||||
if (result == null) {
|
||||
// Check sub groups
|
||||
if (!auser.isSubGroupsEmpty())
|
||||
for (Group subGroup : auser.subGroupListCopy()) {
|
||||
result = nextGroupWithVariable(subGroup, variable);
|
||||
// Found value?
|
||||
if (result != null)
|
||||
continue;
|
||||
}
|
||||
if (result == null)
|
||||
return -1;
|
||||
}
|
||||
return result.getVariables().getVarInteger(variable);
|
||||
|
@ -453,9 +509,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
* If not found, it will search for his Group variables.
|
||||
* It will harvest the inheritance.
|
||||
* Returns the variable value of the user, in INFO node. If not found, it
|
||||
* will search for his Group variables. It will harvest the inheritance and
|
||||
* subgroups.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return false if not found or not parseable to true.
|
||||
|
@ -475,6 +532,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
Group result = nextGroupWithVariable(start, variable);
|
||||
if (result == null) {
|
||||
// Check sub groups
|
||||
if (!auser.isSubGroupsEmpty())
|
||||
for (Group subGroup : auser.subGroupListCopy()) {
|
||||
result = nextGroupWithVariable(subGroup, variable);
|
||||
// Found value?
|
||||
if (result != null)
|
||||
continue;
|
||||
}
|
||||
if (result == null)
|
||||
return false;
|
||||
}
|
||||
return result.getVariables().getVarBoolean(variable);
|
||||
|
@ -482,9 +548,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the variable value of the user, in INFO node.
|
||||
* If not found, it will search for his Group variables.
|
||||
* It will harvest the inheritance.
|
||||
* Returns the variable value of the user, in INFO node. If not found, it
|
||||
* will search for his Group variables. It will harvest the inheritance and
|
||||
* subgroups.
|
||||
*
|
||||
* @param user
|
||||
* @param variable
|
||||
* @return -1 if not found.
|
||||
|
@ -504,6 +571,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
Group result = nextGroupWithVariable(start, variable);
|
||||
if (result == null) {
|
||||
// Check sub groups
|
||||
if (!auser.isSubGroupsEmpty())
|
||||
for (Group subGroup : auser.subGroupListCopy()) {
|
||||
result = nextGroupWithVariable(subGroup, variable);
|
||||
// Found value?
|
||||
if (result != null)
|
||||
continue;
|
||||
}
|
||||
if (result == null)
|
||||
return -1.0D;
|
||||
}
|
||||
return result.getVariables().getVarDouble(variable);
|
||||
|
@ -512,9 +588,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Does not include User's group permission
|
||||
*
|
||||
* @param user
|
||||
* @param permission
|
||||
* @return
|
||||
* @return PermissionCheckResult
|
||||
*/
|
||||
public PermissionCheckResult checkUserOnlyPermission(User user, String permission) {
|
||||
user.sortPermissions();
|
||||
|
@ -539,8 +616,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the node responsible for that permission.
|
||||
* Does not include User's group permission.
|
||||
* Returns the node responsible for that permission. Does not include User's
|
||||
* group permission.
|
||||
*
|
||||
* @param group
|
||||
* @param permission
|
||||
* @return the node if permission is found. if not found, return null
|
||||
|
@ -569,34 +647,36 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Check permissions, including it's group and inheritance.
|
||||
*
|
||||
* @param user
|
||||
* @param permission
|
||||
* @return true if permission was found. false if not, or was negated.
|
||||
*/
|
||||
public boolean checkUserPermission(User user, String permission) {
|
||||
PermissionCheckResult result = checkFullUserPermission(user, permission);
|
||||
if (result.resultType.equals(PermissionCheckResult.Type.EXCEPTION)
|
||||
|| result.resultType.equals(PermissionCheckResult.Type.FOUND)) {
|
||||
if (result.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || result.resultType.equals(PermissionCheckResult.Type.FOUND)) {
|
||||
return true;
|
||||
}
|
||||
if (Bukkit.getPlayer(user.getName()).hasPermission(permission))
|
||||
if ((Bukkit.getPlayer(user.getName()) != null) && (Bukkit.getPlayer(user.getName()).hasPermission(permission)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do what checkUserPermission did before. But now returning a PermissionCheckResult.
|
||||
* Do what checkUserPermission did before. But now returning a
|
||||
* PermissionCheckResult.
|
||||
*
|
||||
* @param user
|
||||
* @param targetPermission
|
||||
* @return
|
||||
* @return PermissionCheckResult
|
||||
*/
|
||||
public PermissionCheckResult checkFullUserPermission(User user, String targetPermission) {
|
||||
PermissionCheckResult result = new PermissionCheckResult();
|
||||
result.askedPermission = targetPermission;
|
||||
result.resultType = PermissionCheckResult.Type.NOTFOUND;
|
||||
|
||||
if (user == null || targetPermission == null) {
|
||||
if (user == null || targetPermission == null || targetPermission.isEmpty()) {
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -619,7 +699,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
}
|
||||
|
||||
if (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission)) {
|
||||
if ((Bukkit.getPlayer(user.getName()) != null) && (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission))) {
|
||||
result.resultType = PermissionCheckResult.Type.FOUND;
|
||||
result.owner = user;
|
||||
return result;
|
||||
|
@ -639,7 +719,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
* @param variable
|
||||
* @param alreadyChecked
|
||||
* @return returns the closest inherited group with the variable.
|
||||
* @deprecated use now nextGroupWithVariable(Group start, String targetVariable)
|
||||
* @deprecated use now nextGroupWithVariable(Group start, String
|
||||
* targetVariable)
|
||||
*/
|
||||
@Deprecated
|
||||
public Group nextGroupWithVariable(Group start, String variable, List<Group> alreadyChecked) {
|
||||
|
@ -652,8 +733,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
*
|
||||
* It does Breadth-first search
|
||||
*
|
||||
* @param start the starting group to look for
|
||||
* @param targetVariable the variable name
|
||||
* @param start
|
||||
* the starting group to look for
|
||||
* @param targetVariable
|
||||
* the variable name
|
||||
* @return The group if found. Null if not.
|
||||
*/
|
||||
public Group nextGroupWithVariable(Group start, String targetVariable) {
|
||||
|
@ -686,11 +769,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
* redirected to the other method. this is deprecated now. and will be gone
|
||||
* in the future releases.
|
||||
*
|
||||
* @param start The group to start the search.
|
||||
* @param askedGroup Name of the group you're looking for
|
||||
* @param alreadyChecked groups to ignore(pass null on it, please)
|
||||
* @param start
|
||||
* The group to start the search.
|
||||
* @param askedGroup
|
||||
* Name of the group you're looking for
|
||||
* @param alreadyChecked
|
||||
* groups to ignore(pass null on it, please)
|
||||
* @return true if it inherits the group.
|
||||
* @deprecated prefer using hasGroupInInheritance(Group start, String askedGroup)
|
||||
* @deprecated prefer using hasGroupInInheritance(Group start, String
|
||||
* askedGroup)
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean searchGroupInInheritance(Group start, String askedGroup, List<Group> alreadyChecked) {
|
||||
|
@ -702,8 +789,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
*
|
||||
* It does Breadth-first search
|
||||
*
|
||||
* @param start The group to start the search.
|
||||
* @param askedGroup Name of the group you're looking for
|
||||
* @param start
|
||||
* The group to start the search.
|
||||
* @param askedGroup
|
||||
* Name of the group you're looking for
|
||||
* @return true if it inherits the group.
|
||||
*/
|
||||
public boolean hasGroupInInheritance(Group start, String askedGroup) {
|
||||
|
@ -732,36 +821,36 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Check if the group has given permission. Including it's inheritance
|
||||
*
|
||||
* @param start
|
||||
* @param permission
|
||||
* @param alreadyChecked
|
||||
* @return true if PermissionCheckResult is EXCEPTION or FOUND
|
||||
* @deprecated use the other checkGroupPermissionWithInheritance for everything
|
||||
* @deprecated use the other checkGroupPermissionWithInheritance for
|
||||
* everything
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean checkGroupPermissionWithInheritance(Group start, String permission, List<Group> alreadyChecked) {
|
||||
PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission);
|
||||
if (result.resultType.equals(Type.EXCEPTION)
|
||||
|| result.resultType.equals(Type.FOUND)) {
|
||||
if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the result of permission check. Including inheritance.
|
||||
* If found anything, the PermissionCheckResult that retuns will
|
||||
* include the Group name, and the result type.
|
||||
* Result types will be EXCEPTION, NEGATION, FOUND.
|
||||
* Returns the result of permission check. Including inheritance. If found
|
||||
* anything, the PermissionCheckResult that retuns will include the Group
|
||||
* name, and the result type. Result types will be EXCEPTION, NEGATION,
|
||||
* FOUND.
|
||||
*
|
||||
* If returned type NOTFOUND, the owner will be null,
|
||||
* and ownerType too.
|
||||
* If returned type NOTFOUND, the owner will be null, and ownerType too.
|
||||
*
|
||||
* It does Breadth-first search
|
||||
*
|
||||
* @param start
|
||||
* @param targetPermission
|
||||
* @return
|
||||
* @return PermissionCheckResult
|
||||
*/
|
||||
public PermissionCheckResult checkGroupPermissionWithInheritance(Group start, String targetPermission) {
|
||||
if (start == null || targetPermission == null) {
|
||||
|
@ -792,8 +881,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* It uses checkGroupPermissionWithInheritance
|
||||
* and cast the owner to Group type if result type was EXCEPTION or FOUND.
|
||||
* It uses checkGroupPermissionWithInheritance and cast the owner to Group
|
||||
* type if result type was EXCEPTION or FOUND.
|
||||
*
|
||||
* @param start
|
||||
* @param permission
|
||||
|
@ -804,8 +893,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
@Deprecated
|
||||
public Group nextGroupWithPermission(Group start, String permission, List<Group> alreadyChecked) {
|
||||
PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission);
|
||||
if (result.resultType.equals(Type.EXCEPTION)
|
||||
|| result.resultType.equals(Type.FOUND)) {
|
||||
if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) {
|
||||
return (Group) checkGroupPermissionWithInheritance(start, permission).owner;
|
||||
}
|
||||
return null;
|
||||
|
@ -815,8 +903,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
* Return whole list of names of groups in a inheritance chain. Including a
|
||||
* starting group.
|
||||
*
|
||||
* it now redirects to the other method. but get away from this one,
|
||||
* it will disappear in a future release.
|
||||
* it now redirects to the other method. but get away from this one, it will
|
||||
* disappear in a future release.
|
||||
*
|
||||
* @param start
|
||||
* @param alreadyChecked
|
||||
|
@ -860,17 +948,17 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
|
||||
/**
|
||||
* Compare a user permission like 'myplugin.*' against a full plugin
|
||||
* permission name, like 'myplugin.dosomething'.
|
||||
* As the example above, will return true.
|
||||
* permission name, like 'myplugin.dosomething'. As the example above, will
|
||||
* return true.
|
||||
*
|
||||
* Please sort permissions before sending them here. So negative tokens
|
||||
* get priority.
|
||||
* Please sort permissions before sending them here. So negative tokens get
|
||||
* priority.
|
||||
*
|
||||
* You must test if it start with negative outside this method. It will
|
||||
* only tell if the nodes are matching or not.
|
||||
* You must test if it start with negative outside this method. It will only
|
||||
* tell if the nodes are matching or not.
|
||||
*
|
||||
* Every '-' or '+' in the beginning is ignored. It will match only
|
||||
* node names.
|
||||
* Every '-' or '+' in the beginning is ignored. It will match only node
|
||||
* names.
|
||||
*
|
||||
* @param userAcessLevel
|
||||
* @param fullPermissionName
|
||||
|
@ -894,7 +982,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
fullPermissionName = fullPermissionName.substring(1);
|
||||
}
|
||||
|
||||
|
||||
StringTokenizer levelATokenizer = new StringTokenizer(userAcessLevel, ".");
|
||||
StringTokenizer levelBTokenizer = new StringTokenizer(fullPermissionName, ".");
|
||||
while (levelATokenizer.hasMoreTokens() && levelBTokenizer.hasMoreTokens()) {
|
||||
|
@ -926,8 +1013,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
* Returns a list of all groups.
|
||||
*
|
||||
* Including subgroups.
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
* @return String[] of all group names.
|
||||
*/
|
||||
@Override
|
||||
public String[] getGroups(String userName) {
|
||||
|
@ -935,6 +1023,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
for (Group subg : ph.getUser(userName).subGroupListCopy()) {
|
||||
allGroups.addAll(listAllGroupsInherited(subg));
|
||||
}
|
||||
|
||||
String[] arr = new String[allGroups.size()];
|
||||
return allGroups.toArray(arr);
|
||||
}
|
||||
|
@ -942,8 +1031,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
/**
|
||||
* A Breadth-first search thru inheritance model.
|
||||
*
|
||||
* Just a model to copy and paste.
|
||||
* This will guarantee the closer groups will be checked first.
|
||||
* Just a model to copy and paste. This will guarantee the closer groups
|
||||
* will be checked first.
|
||||
*
|
||||
* @param start
|
||||
* @param targerPermission
|
||||
* @return
|
||||
|
@ -960,8 +1050,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
while (!stack.isEmpty()) {
|
||||
Group now = stack.pop();
|
||||
PermissionCheckResult resultNow = checkGroupOnlyPermission(now, targerPermission);
|
||||
if (resultNow.resultType.equals(PermissionCheckResult.Type.EXCEPTION)
|
||||
|| resultNow.resultType.equals(PermissionCheckResult.Type.FOUND)) {
|
||||
if (resultNow.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || resultNow.resultType.equals(PermissionCheckResult.Type.FOUND)) {
|
||||
return now;
|
||||
}
|
||||
if (resultNow.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
|
||||
|
@ -984,8 +1073,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String getInfoString(String entryName, String path,
|
||||
boolean isGroup) {
|
||||
public String getInfoString(String entryName, String path, boolean isGroup) {
|
||||
if (isGroup) {
|
||||
Group data = ph.getGroup(entryName);
|
||||
if (data == null) {
|
||||
|
@ -1002,8 +1090,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getInfoInteger(String entryName, String path,
|
||||
boolean isGroup) {
|
||||
public int getInfoInteger(String entryName, String path, boolean isGroup) {
|
||||
if (isGroup) {
|
||||
Group data = ph.getGroup(entryName);
|
||||
if (data == null) {
|
||||
|
@ -1020,8 +1107,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
@Override
|
||||
public double getInfoDouble(String entryName, String path,
|
||||
boolean isGroup) {
|
||||
public double getInfoDouble(String entryName, String path, boolean isGroup) {
|
||||
if (isGroup) {
|
||||
Group data = ph.getGroup(entryName);
|
||||
if (data == null) {
|
||||
|
@ -1039,8 +1125,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean getInfoBoolean(String entryName, String path,
|
||||
boolean isGroup) {
|
||||
public boolean getInfoBoolean(String entryName, String path, boolean isGroup) {
|
||||
if (isGroup) {
|
||||
Group data = ph.getGroup(entryName);
|
||||
if (data == null) {
|
||||
|
|
|
@ -187,7 +187,7 @@ public class BukkitPermissions {
|
|||
* null is empty
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
* @return Map of child permissions
|
||||
*/
|
||||
public Map<String, Boolean> getChildren(String node) {
|
||||
for (Permission permission : registeredPermissions) {
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.bukkit.entity.Player;
|
|||
*
|
||||
* @author Nijikokun
|
||||
* @author Gabriel Couto
|
||||
* @author ElgarL
|
||||
*/
|
||||
public abstract class PermissionsReaderInterface {
|
||||
|
||||
|
@ -23,7 +24,7 @@ public abstract class PermissionsReaderInterface {
|
|||
*
|
||||
* @param player
|
||||
* @param string
|
||||
* @return
|
||||
* @return true if has permission
|
||||
*/
|
||||
public abstract boolean has(Player player, String string);
|
||||
|
||||
|
@ -31,141 +32,141 @@ public abstract class PermissionsReaderInterface {
|
|||
*
|
||||
* @param player
|
||||
* @param string
|
||||
* @return
|
||||
* @return true if has permission
|
||||
*/
|
||||
public abstract boolean permission(Player player, String string);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @return
|
||||
* @param userName
|
||||
* @return group name for this player.
|
||||
*/
|
||||
public abstract String getGroup(String string);
|
||||
public abstract String getGroup(String userName);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param groupName
|
||||
* @return true if in group
|
||||
*/
|
||||
public abstract boolean inGroup(String string, String string1);
|
||||
public abstract boolean inGroup(String userName, String groupName);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @return
|
||||
* @param groupName
|
||||
* @return String of prefix
|
||||
*/
|
||||
public abstract String getGroupPrefix(String string);
|
||||
public abstract String getGroupPrefix(String groupName);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @return
|
||||
* @param groupName
|
||||
* @return String of suffix
|
||||
*/
|
||||
public abstract String getGroupSuffix(String string);
|
||||
public abstract String getGroupSuffix(String groupName);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @return
|
||||
* @param groupName
|
||||
* @return true if can build
|
||||
*/
|
||||
public abstract boolean canGroupBuild(String string);
|
||||
public abstract boolean canGroupBuild(String groupName);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param groupName
|
||||
* @param node
|
||||
* @return String value
|
||||
*/
|
||||
public abstract String getGroupPermissionString(String string, String string1);
|
||||
public abstract String getGroupPermissionString(String groupName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param groupName
|
||||
* @param node
|
||||
* @return integer value
|
||||
*/
|
||||
public abstract int getGroupPermissionInteger(String string, String string1);
|
||||
public abstract int getGroupPermissionInteger(String groupName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param groupName
|
||||
* @param node
|
||||
* @return boolean value
|
||||
*/
|
||||
public abstract boolean getGroupPermissionBoolean(String string, String string1);
|
||||
public abstract boolean getGroupPermissionBoolean(String groupName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param groupName
|
||||
* @param node
|
||||
* @return double value
|
||||
*/
|
||||
public abstract double getGroupPermissionDouble(String string, String string1);
|
||||
public abstract double getGroupPermissionDouble(String groupName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return String value
|
||||
*/
|
||||
public abstract String getUserPermissionString(String string, String string1);
|
||||
public abstract String getUserPermissionString(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return integer value
|
||||
*/
|
||||
public abstract int getUserPermissionInteger(String string, String string1);
|
||||
public abstract int getUserPermissionInteger(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return boolean value
|
||||
*/
|
||||
public abstract boolean getUserPermissionBoolean(String string, String string1);
|
||||
public abstract boolean getUserPermissionBoolean(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return double value
|
||||
*/
|
||||
public abstract double getUserPermissionDouble(String string, String string1);
|
||||
public abstract double getUserPermissionDouble(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return String value
|
||||
*/
|
||||
public abstract String getPermissionString(String string, String string1);
|
||||
public abstract String getPermissionString(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return integer value
|
||||
*/
|
||||
public abstract int getPermissionInteger(String string, String string1);
|
||||
public abstract int getPermissionInteger(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return boolean value
|
||||
*/
|
||||
public abstract boolean getPermissionBoolean(String string, String string1);
|
||||
public abstract boolean getPermissionBoolean(String userName, String node);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string
|
||||
* @param string1
|
||||
* @return
|
||||
* @param userName
|
||||
* @param node
|
||||
* @return double value
|
||||
*/
|
||||
public abstract double getPermissionDouble(String string, String string1);
|
||||
public abstract double getPermissionDouble(String userName, String node);
|
||||
|
||||
/////////////////////////////
|
||||
/**
|
||||
|
@ -173,7 +174,7 @@ public abstract class PermissionsReaderInterface {
|
|||
* This method is a utility method for chat plugins to get the user's prefix
|
||||
* without having to look at every one of the user's ancestors.
|
||||
* Returns an empty string if user has no parent groups.
|
||||
* @param world Player's world
|
||||
*
|
||||
* @param user Player's name
|
||||
* @return Player's prefix
|
||||
*/
|
||||
|
@ -184,7 +185,7 @@ public abstract class PermissionsReaderInterface {
|
|||
* This method is a utility method for chat plugins to get the user's suffix
|
||||
* without having to look at every one of the user's ancestors.
|
||||
* Returns an empty string if user has no parent groups.
|
||||
* @param world Player's world
|
||||
*
|
||||
* @param user Player's name
|
||||
* @return Player's suffix
|
||||
*/
|
||||
|
@ -215,7 +216,7 @@ public abstract class PermissionsReaderInterface {
|
|||
* @param entryName
|
||||
* @param path
|
||||
* @param isGroup
|
||||
* @return
|
||||
* @return -1 if not found
|
||||
*/
|
||||
public abstract double getInfoDouble(String entryName, String path, boolean isGroup);
|
||||
//public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator);
|
||||
|
|
Loading…
Reference in a new issue