2016-03-01 03:15:02 +00:00
/ *
* To change this template , choose Tools | Templates
* and open the template in the editor .
* /
package org.anjocaido.groupmanager ;
import java.io.File ;
import java.io.IOException ;
import java.io.InputStream ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import java.util.concurrent.ScheduledThreadPoolExecutor ;
import java.util.concurrent.TimeUnit ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import org.anjocaido.groupmanager.Tasks.BukkitPermsUpdateTask ;
import org.anjocaido.groupmanager.data.Group ;
import org.anjocaido.groupmanager.data.User ;
import org.anjocaido.groupmanager.data.Variables ;
import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder ;
import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder ;
import org.anjocaido.groupmanager.events.GMSystemEvent ;
import org.anjocaido.groupmanager.events.GMWorldListener ;
import org.anjocaido.groupmanager.events.GroupManagerEventHandler ;
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler ;
import org.anjocaido.groupmanager.permissions.BukkitPermissions ;
import org.anjocaido.groupmanager.utils.GMLoggerHandler ;
import org.anjocaido.groupmanager.utils.GroupManagerPermissions ;
import org.anjocaido.groupmanager.utils.PermissionCheckResult ;
import org.anjocaido.groupmanager.utils.Tasks ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.OfflinePlayer ;
import org.bukkit.block.Block ;
import org.bukkit.command.BlockCommandSender ;
import org.bukkit.command.Command ;
import org.bukkit.command.CommandSender ;
import org.bukkit.entity.Player ;
import org.bukkit.plugin.PluginDescriptionFile ;
import org.bukkit.plugin.ServicePriority ;
import org.bukkit.plugin.java.JavaPlugin ;
import cn.citycraft.PluginHelper.utils.VersionChecker ;
/ * *
*
* @author gabrielcouto , ElgarL
* /
public class GroupManager extends JavaPlugin {
private static boolean isLoaded = false ;
protected static GlobalGroups globalGroups ;
private static GroupManagerEventHandler GMEventHandler ;
public static BukkitPermissions BukkitPermissions ;
private static GMWorldListener WorldEvents ;
public static final Logger logger = Logger . getLogger ( GroupManager . class . getName ( ) ) ;
private File backupFolder ;
private Runnable commiter ;
private ScheduledThreadPoolExecutor scheduler ;
private Map < String , ArrayList < User > > overloadedUsers = new HashMap < String , ArrayList < User > > ( ) ;
private Map < String , String > selectedWorlds = new HashMap < String , String > ( ) ;
private WorldsHolder worldsHolder ;
private boolean validateOnlinePlayer = true ;
protected GMConfiguration config ;
private GMLoggerHandler ch ;
// PERMISSIONS FOR COMMAND BEING LOADED
private OverloadedWorldHolder dataHolder = null ;
private AnjoPermissionsHandler permissionHandler = null ;
private String lastError = " " ;
public static GlobalGroups getGlobalGroups ( ) {
return globalGroups ;
}
public static GroupManagerEventHandler getGMEventHandler ( ) {
return GMEventHandler ;
}
public static boolean isLoaded ( ) {
return isLoaded ;
}
/ * *
* Send confirmation of a group change . using permission nodes . . .
*
* groupmanager . notify . self groupmanager . notify . other
*
* @param name
* @param msg
* /
public static void notify ( final String name , final String msg ) {
final Player player = Bukkit . getServer ( ) . getPlayerExact ( name ) ;
for ( final Player test : Bukkit . getServer ( ) . getOnlinePlayers ( ) ) {
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 " ) ) ) )
player . sendMessage ( ChatColor . YELLOW + " You were " + msg ) ;
}
}
public static void setGMEventHandler ( final GroupManagerEventHandler gMEventHandler ) {
GMEventHandler = gMEventHandler ;
}
public static void setLoaded ( final boolean isLoaded ) {
GroupManager . isLoaded = isLoaded ;
}
public void disableScheduler ( ) {
if ( scheduler ! = null ) {
try {
scheduler . setContinueExistingPeriodicTasksAfterShutdownPolicy ( false ) ;
scheduler . setExecuteExistingDelayedTasksAfterShutdownPolicy ( false ) ;
scheduler . shutdown ( ) ;
} catch ( final Exception e ) {
}
scheduler = null ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . info ( " 自动保存已关闭! " ) ;
2016-03-01 03:15:02 +00:00
}
}
public void enableScheduler ( ) {
if ( worldsHolder ! = null ) {
disableScheduler ( ) ;
commiter = new Runnable ( ) {
@Override
public void run ( ) {
try {
if ( worldsHolder . saveChanges ( false ) )
2016-03-01 12:32:27 +00:00
GroupManager . logger . log ( Level . INFO , " 数据文件已更新. " ) ;
2016-03-01 03:15:02 +00:00
} catch ( final IllegalStateException ex ) {
GroupManager . logger . log ( Level . WARNING , ex . getMessage ( ) ) ;
}
}
} ;
scheduler = new ScheduledThreadPoolExecutor ( 1 ) ;
final long minutes = getGMConfig ( ) . getSaveInterval ( ) ;
if ( minutes > 0 ) {
scheduler . scheduleAtFixedRate ( commiter , minutes , minutes , TimeUnit . MINUTES ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . info ( " 数据文件将每隔 " + minutes + " 分钟 自动保存! " ) ;
2016-03-01 03:15:02 +00:00
} else
2016-03-01 12:32:27 +00:00
GroupManager . logger . info ( " 自动保存已关闭! " ) ;
GroupManager . logger . info ( " 数据文件将自动备份每隔 " + getGMConfig ( ) . getBackupDuration ( ) + " 小时! " ) ;
2016-03-01 03:15:02 +00:00
}
}
/ * *
* @return the backupFolder
* /
public File getBackupFolder ( ) {
return backupFolder ;
}
/ * *
* @return the config
* /
public GMConfiguration getGMConfig ( ) {
return config ;
}
public InputStream getResourceAsStream ( final String fileName ) {
return this . getClassLoader ( ) . getResourceAsStream ( fileName ) ;
}
public WorldsHolder getWorldsHolder ( ) {
return worldsHolder ;
}
/ * *
* @return the validateOnlinePlayer
* /
public boolean isValidateOnlinePlayer ( ) {
return validateOnlinePlayer ;
}
/ * *
* Called when a command registered by this plugin is received .
*
* @param sender
* @param cmd
* @param args
* /
@Override
public boolean onCommand ( final CommandSender sender , final Command cmd , final String commandLabel , final String [ ] args ) {
boolean playerCanDo = false ;
boolean isConsole = false ;
Player senderPlayer = null , targetPlayer = null ;
Group senderGroup = null ;
User senderUser = null ;
boolean isOpOverride = config . isOpOverride ( ) ;
final boolean isAllowCommandBlocks = config . isAllowCommandBlocks ( ) ;
// PREVENT GM COMMANDS BEING USED ON COMMANDBLOCKS
if ( sender instanceof BlockCommandSender & & ! isAllowCommandBlocks ) {
final Block block = ( ( BlockCommandSender ) sender ) . getBlock ( ) ;
GroupManager . logger . warning ( ChatColor . RED + " GM Commands can not be called from CommandBlocks " ) ;
GroupManager . logger . warning ( ChatColor . RED + " Location: " + ChatColor . GREEN + block . getWorld ( ) . getName ( ) + " , " + block . getX ( ) + " , " + block . getY ( ) + " , " + block . getZ ( ) ) ;
return true ;
}
// DETERMINING PLAYER INFORMATION
if ( sender instanceof Player ) {
senderPlayer = ( Player ) sender ;
if ( ! lastError . isEmpty ( ) & & ! commandLabel . equalsIgnoreCase ( " manload " ) ) {
sender . sendMessage ( ChatColor . RED + " All commands are locked due to an error. " + ChatColor . BOLD + " " + ChatColor . UNDERLINE + " Check plugins/groupmanager/error.log or console " + ChatColor . RESET + " " + ChatColor . RED
+ " and then try a '/manload'. " ) ;
return true ;
}
senderUser = worldsHolder . getWorldData ( senderPlayer ) . getUser ( senderPlayer . getName ( ) ) ;
senderGroup = senderUser . getGroup ( ) ;
isOpOverride = ( isOpOverride & & ( senderPlayer . isOp ( ) | | worldsHolder . getWorldPermissions ( senderPlayer ) . has ( senderPlayer , " groupmanager.op " ) ) ) ;
if ( isOpOverride | | worldsHolder . getWorldPermissions ( senderPlayer ) . has ( senderPlayer , " groupmanager. " + cmd . getName ( ) ) ) {
playerCanDo = true ;
}
} else {
if ( ! lastError . isEmpty ( ) & & ! commandLabel . equalsIgnoreCase ( " manload " ) ) {
sender . sendMessage ( ChatColor . RED + " All commands are locked due to an error. " + ChatColor . BOLD + " " + ChatColor . UNDERLINE + " Check plugins/groupmanager/error.log or console " + ChatColor . RESET + " " + ChatColor . RED
+ " and then try a '/manload'. " ) ;
return true ;
}
isConsole = true ;
}
// PERMISSIONS FOR COMMAND BEING LOADED
dataHolder = null ;
permissionHandler = null ;
if ( senderPlayer ! = null ) {
dataHolder = worldsHolder . getWorldData ( senderPlayer ) ;
}
final String selectedWorld = selectedWorlds . get ( sender . getName ( ) ) ;
if ( selectedWorld ! = null ) {
dataHolder = worldsHolder . getWorldData ( selectedWorld ) ;
}
if ( dataHolder ! = null ) {
permissionHandler = dataHolder . getPermissionsHandler ( ) ;
}
// VARIABLES USED IN COMMANDS
int count ;
PermissionCheckResult permissionResult = null ;
ArrayList < User > removeList = null ;
String auxString = null ;
List < String > match = null ;
User auxUser = null ;
Group auxGroup = null ;
Group auxGroup2 = null ;
GroupManagerPermissions execCmd = null ;
try {
execCmd = GroupManagerPermissions . valueOf ( cmd . getName ( ) ) ;
} catch ( final Exception e ) {
// this error happened once with someone. now im prepared... i think
GroupManager . logger . severe ( " =================================================== " ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " = 错误报告 开始 = " ) ;
2016-03-01 03:15:02 +00:00
GroupManager . logger . severe ( " =================================================== " ) ;
GroupManager . logger . severe ( " = COPY AND PASTE THIS TO A GROUPMANAGER DEVELOPER = " ) ;
GroupManager . logger . severe ( " =================================================== " ) ;
GroupManager . logger . severe ( this . getDescription ( ) . getName ( ) ) ;
GroupManager . logger . severe ( this . getDescription ( ) . getVersion ( ) ) ;
GroupManager . logger . severe ( " An error occured while trying to execute command: " ) ;
GroupManager . logger . severe ( cmd . getName ( ) ) ;
GroupManager . logger . severe ( " With " + args . length + " arguments: " ) ;
for ( final String ar : args ) {
GroupManager . logger . severe ( ar ) ;
}
GroupManager . logger . severe ( " The field ' " + cmd . getName ( ) + " ' was not found in enum. " ) ;
GroupManager . logger . severe ( " And could not be parsed. " ) ;
GroupManager . logger . severe ( " FIELDS FOUND IN ENUM: " ) ;
for ( final GroupManagerPermissions val : GroupManagerPermissions . values ( ) ) {
GroupManager . logger . severe ( val . name ( ) ) ;
}
GroupManager . logger . severe ( " =================================================== " ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " = 错误报告 结束 = " ) ;
2016-03-01 03:15:02 +00:00
GroupManager . logger . severe ( " =================================================== " ) ;
sender . sendMessage ( " An error occurred. Ask the admin to take a look at the console. " ) ;
}
if ( isConsole | | playerCanDo ) {
switch ( execCmd ) {
case manuadd :
// Validating arguments
if ( ( args . length ! = 2 ) & & ( args . length ! = 3 ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manuadd <player> <group> | optional [world]) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Select the relevant world (if specified)
if ( args . length = = 3 ) {
dataHolder = worldsHolder . getWorldData ( args [ 2 ] ) ;
permissionHandler = dataHolder . getPermissionsHandler ( ) ;
}
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
auxGroup = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " Players may not be members of GlobalGroups directly. " ) ;
return false ;
}
// Validating permissions
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " Can't modify a player with the same permissions as you, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( permissionHandler . hasGroupInInheritance ( auxGroup , senderGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " The destination group can't be the same as yours, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxUser . getGroupName ( ) ) | | ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player involving a group that you don't inherit. " ) ;
return true ;
}
// Seems OK
auxUser . setGroup ( auxGroup ) ;
if ( ! sender . hasPermission ( " groupmanager.notify.other " ) | | ( isConsole ) )
sender . sendMessage ( ChatColor . YELLOW + " You changed player ' " + auxUser . getLastName ( ) + " ' group to ' " + auxGroup . getName ( ) + " ' in world ' " + dataHolder . getName ( ) + " '. " ) ;
return true ;
case manudel :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manudel <player>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
// Seems OK
dataHolder . removeUser ( auxUser . getLastName ( ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " You changed player ' " + auxUser . getLastName ( ) + " ' to default settings. " ) ;
// If the player is online, this will create new data for the user.
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
if ( targetPlayer ! = null )
BukkitPermissions . updatePermissions ( targetPlayer ) ;
return true ;
case manuaddsub :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) ) {
sender . sendMessage ( ChatColor . RED + " Couldn't retrieve your world. World selection is needed. " ) ;
sender . sendMessage ( ChatColor . RED + " Use /manselect <world> " ) ;
return true ;
}
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manuaddsub <player> <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
auxGroup = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( permissionHandler . hasGroupInInheritance ( auxGroup , senderGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " The sub-group can't be the same as yours, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxUser . getGroupName ( ) ) | | ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player involving a group that you don't inherit. " ) ;
return true ;
}
// Seems OK
if ( auxUser . addSubGroup ( auxGroup ) )
sender . sendMessage ( ChatColor . YELLOW + " You added subgroup ' " + auxGroup . getName ( ) + " ' to player ' " + auxUser . getLastName ( ) + " '. " ) ;
else
sender . sendMessage ( ChatColor . RED + " The subgroup ' " + auxGroup . getName ( ) + " ' is already available to ' " + auxUser . getLastName ( ) + " '. " ) ;
return true ;
case manudelsub :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manudelsub <user> <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
auxGroup = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
// Seems OK
auxUser . removeSubGroup ( auxGroup ) ;
sender . sendMessage ( ChatColor . YELLOW + " You removed subgroup ' " + auxGroup . getName ( ) + " ' from player ' " + auxUser . getLastName ( ) + " ' list. " ) ;
// targetPlayer = this.getServer().getPlayer(auxUser.getName());
// if (targetPlayer != null)
// BukkitPermissions.updatePermissions(targetPlayer);
return true ;
case mangadd :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangadd <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup ! = null ) {
sender . sendMessage ( ChatColor . RED + " ' " + args [ 0 ] + " ' Group already exists! " ) ;
return true ;
}
// Seems OK
auxGroup = dataHolder . createGroup ( args [ 0 ] ) ;
sender . sendMessage ( ChatColor . YELLOW + " You created a group named: " + auxGroup . getName ( ) ) ;
return true ;
case mangdel :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangdel <group>) " ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Seems OK
dataHolder . removeGroup ( auxGroup . getName ( ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " You deleted a group named " + auxGroup . getName ( ) + " , it's users are default group now. " ) ;
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case manuaddp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manuaddp <player> <permission> [permission2] [permission3]...) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating your permissions
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " Can't modify player with same group than you, or higher. " ) ;
return true ;
}
for ( int i = 1 ; i < args . length ; i + + ) {
auxString = args [ i ] . replace ( " ' " , " " ) ;
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , auxString ) ;
if ( ! isConsole & & ! isOpOverride & & ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) | | permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't add a permission you don't have: ' " + auxString + " ' " ) ;
continue ;
}
// Validating permissions of user
permissionResult = permissionHandler . checkUserOnlyPermission ( auxUser , auxString ) ;
if ( checkPermissionExists ( sender , auxString , permissionResult , " user " ) ) {
continue ;
}
// Seems Ok
auxUser . addPermission ( auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " You added ' " + auxString + " ' to player ' " + auxUser . getLastName ( ) + " ' permissions. " ) ;
}
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
if ( targetPlayer ! = null )
BukkitPermissions . updatePermissions ( targetPlayer ) ;
return true ;
case manudelp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manudelp <player> <permission> [permission2] [permission3]...) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
for ( int i = 1 ; i < args . length ; i + + ) {
auxString = args [ i ] . replace ( " ' " , " " ) ;
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same group as you, or higher. " ) ;
continue ;
}
// Validating your permissions
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , auxString ) ;
if ( ! isConsole & & ! isOpOverride & & ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) | | permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't remove a permission you don't have: ' " + auxString + " ' " ) ;
continue ;
}
// Validating permissions of user
permissionResult = permissionHandler . checkUserOnlyPermission ( auxUser , auxString ) ;
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) ) {
sender . sendMessage ( ChatColor . RED + " The user doesn't have direct access to that permission: ' " + auxString + " ' " ) ;
continue ;
}
if ( ! auxUser . hasSamePermissionNode ( auxString ) ) {
sender . sendMessage ( ChatColor . RED + " This permission node doesn't match any node. " ) ;
sender . sendMessage ( ChatColor . RED + " But might match node: " + permissionResult . accessLevel ) ;
continue ;
}
auxUser . removePermission ( auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " You removed ' " + auxString + " ' from player ' " + auxUser . getLastName ( ) + " ' permissions. " ) ;
}
// Seems OK
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
if ( targetPlayer ! = null )
BukkitPermissions . updatePermissions ( targetPlayer ) ;
return true ;
case manuclearp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manuclearp <player>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating your permissions
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same group as you, or higher. " ) ;
return true ;
}
for ( final String perm : auxUser . getPermissionList ( ) ) {
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , perm ) ;
if ( ! isConsole & & ! isOpOverride & & ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) | | permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't remove a permission you don't have: ' " + perm + " '. " ) ;
} else {
auxUser . removePermission ( perm ) ;
}
}
sender . sendMessage ( ChatColor . YELLOW + " You removed all permissions from player ' " + auxUser . getLastName ( ) + " '. " ) ;
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
if ( targetPlayer ! = null )
BukkitPermissions . updatePermissions ( targetPlayer ) ;
return true ;
case manulistp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( ( args . length = = 0 ) | | ( args . length > 2 ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manulistp <player> (+)) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( final String perm : auxUser . getPermissionList ( ) ) {
auxString + = perm + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " The player ' " + auxUser . getLastName ( ) + " ' has following permissions: " + ChatColor . WHITE + auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " And all permissions from group: " + auxUser . getGroupName ( ) ) ;
auxString = " " ;
for ( final String subGroup : auxUser . subGroupListStringCopy ( ) ) {
auxString + = subGroup + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " And all permissions from subgroups: " + auxString ) ;
}
} else {
sender . sendMessage ( ChatColor . YELLOW + " The player ' " + auxUser . getLastName ( ) + " ' has no specific permissions. " ) ;
sender . sendMessage ( ChatColor . YELLOW + " Only all permissions from group: " + auxUser . getGroupName ( ) ) ;
auxString = " " ;
for ( final String subGroup : auxUser . subGroupListStringCopy ( ) ) {
auxString + = subGroup + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " And all permissions from subgroups: " + auxString ) ;
}
}
// bukkit perms
if ( ( args . length = = 2 ) & & ( args [ 1 ] . equalsIgnoreCase ( " + " ) ) ) {
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
if ( targetPlayer ! = null ) {
sender . sendMessage ( ChatColor . YELLOW + " Superperms reports: " ) ;
for ( final String line : BukkitPermissions . listPerms ( targetPlayer ) )
sender . sendMessage ( ChatColor . YELLOW + line ) ;
}
}
return true ;
case manucheckp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manucheckp <player> <permission>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxString = args [ 1 ] . replace ( " ' " , " " ) ;
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
targetPlayer = this . getServer ( ) . getPlayer ( auxUser . getLastName ( ) ) ;
// Validating permission
permissionResult = permissionHandler . checkFullGMPermission ( auxUser , auxString , false ) ;
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) ) {
// No permissions found in GM so fall through and check Bukkit.
sender . sendMessage ( ChatColor . YELLOW + " The player doesn't have access to that permission " ) ;
} else {
// This permission was found in groupmanager.
if ( permissionResult . owner instanceof User ) {
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The user has directly a negation node for that permission. " ) ;
} else if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The user has directly an Exception node for that permission. " ) ;
} else {
sender . sendMessage ( ChatColor . YELLOW + " The user has directly this permission. " ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Permission Node: " + permissionResult . accessLevel ) ;
} else if ( permissionResult . owner instanceof Group ) {
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The user inherits a negation permission from group: " + permissionResult . owner . getLastName ( ) ) ;
} else if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The user inherits an Exception permission from group: " + permissionResult . owner . getLastName ( ) ) ;
} else {
sender . sendMessage ( ChatColor . YELLOW + " The user inherits the permission from group: " + permissionResult . owner . getLastName ( ) ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Permission Node: " + permissionResult . accessLevel ) ;
}
}
// superperms
if ( targetPlayer ! = null ) {
sender . sendMessage ( ChatColor . YELLOW + " SuperPerms reports Node: " + targetPlayer . hasPermission ( args [ 1 ] ) + ( ( ! targetPlayer . hasPermission ( args [ 1 ] ) & & targetPlayer . isPermissionSet ( args [ 1 ] ) ) ? " (Negated) " : " " ) ) ;
}
return true ;
case mangaddp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangaddp <group> <permission> [permission2] [permission3]...) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
for ( int i = 1 ; i < args . length ; i + + ) {
auxString = args [ i ] . replace ( " ' " , " " ) ;
// Validating your permissions
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , auxString ) ;
if ( ! isConsole & & ! isOpOverride & & ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) | | permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't add a permission you don't have: ' " + auxString + " ' " ) ;
continue ;
}
// Validating permissions of user
permissionResult = permissionHandler . checkGroupOnlyPermission ( auxGroup , auxString ) ;
if ( checkPermissionExists ( sender , auxString , permissionResult , " group " ) ) {
continue ;
}
// Seems OK
auxGroup . addPermission ( auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " You added ' " + auxString + " ' to group ' " + auxGroup . getName ( ) + " ' permissions. " ) ;
}
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case mangdelp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangdelp <group> <permission> [permission2] [permission3]...) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
for ( int i = 1 ; i < args . length ; i + + ) {
auxString = args [ i ] . replace ( " ' " , " " ) ;
// Validating your permissions
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , auxString ) ;
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: ' " + auxString + " ' " ) ;
continue ;
}
// Validating permissions of user
permissionResult = permissionHandler . checkGroupOnlyPermission ( auxGroup , auxString ) ;
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The group doesn't have direct access to that permission: ' " + auxString + " ' " ) ;
continue ;
}
if ( ! auxGroup . hasSamePermissionNode ( auxString ) ) {
sender . sendMessage ( ChatColor . RED + " This permission node doesn't match any node. " ) ;
sender . sendMessage ( ChatColor . RED + " But might match node: " + permissionResult . accessLevel ) ;
continue ;
}
// Seems OK
auxGroup . removePermission ( auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " You removed ' " + auxString + " ' from group ' " + auxGroup . getName ( ) + " ' permissions. " ) ;
}
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case mangclearp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangclearp <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
for ( final String perm : auxGroup . getPermissionList ( ) ) {
permissionResult = permissionHandler . checkFullUserPermission ( senderUser , perm ) ;
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: ' " + perm + " '. " ) ;
} else {
auxGroup . removePermission ( perm ) ;
}
}
sender . sendMessage ( ChatColor . YELLOW + " You removed all permissions from group ' " + auxGroup . getName ( ) + " '. " ) ;
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case manglistp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manglistp <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( final String perm : auxGroup . getPermissionList ( ) ) {
auxString + = perm + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " The group ' " + auxGroup . getName ( ) + " ' has following permissions: " + ChatColor . WHITE + auxString ) ;
auxString = " " ;
for ( final String grp : auxGroup . getInherits ( ) ) {
auxString + = grp + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " And all permissions from groups: " + auxString ) ;
}
} else {
sender . sendMessage ( ChatColor . YELLOW + " The group ' " + auxGroup . getName ( ) + " ' has no specific permissions. " ) ;
auxString = " " ;
for ( final String grp : auxGroup . getInherits ( ) ) {
auxString + = grp + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " Only all permissions from groups: " + auxString ) ;
}
}
return true ;
case mangcheckp :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangcheckp <group> <permission>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxString = args [ 1 ] ;
if ( auxString . startsWith ( " ' " ) & & auxString . endsWith ( " ' " ) ) {
auxString = auxString . substring ( 1 , auxString . length ( ) - 1 ) ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Validating permission
permissionResult = permissionHandler . checkGroupPermissionWithInheritance ( auxGroup , auxString ) ;
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NOTFOUND ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The group doesn't have access to that permission " ) ;
return true ;
}
// Seems OK
// auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
if ( permissionResult . owner instanceof Group ) {
if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The group inherits the negation permission from group: " + permissionResult . owner . getLastName ( ) ) ;
} else if ( permissionResult . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The group inherits an Exception permission from group: " + permissionResult . owner . getLastName ( ) ) ;
} else {
sender . sendMessage ( ChatColor . YELLOW + " The group inherits the permission from group: " + permissionResult . owner . getLastName ( ) ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Permission Node: " + permissionResult . accessLevel ) ;
}
return true ;
case mangaddi :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangaddi <group1> <group2>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup2 = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup2 = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support inheritance. " ) ;
return true ;
}
// Validating permission
if ( permissionHandler . hasGroupInInheritance ( auxGroup , auxGroup2 . getName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " Group " + auxGroup . getName ( ) + " already inherits " + auxGroup2 . getName ( ) + " (might not be directly) " ) ;
return true ;
}
// Seems OK
auxGroup . addInherits ( auxGroup2 ) ;
sender . sendMessage ( ChatColor . RED + " Group " + auxGroup2 . getName ( ) + " is now in " + auxGroup . getName ( ) + " inheritance list. " ) ;
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case mangdeli :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangdeli <group1> <group2>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup2 = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup2 = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support inheritance. " ) ;
return true ;
}
// Validating permission
if ( ! permissionHandler . hasGroupInInheritance ( auxGroup , auxGroup2 . getName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " Group " + auxGroup . getName ( ) + " does not inherits " + auxGroup2 . getName ( ) + " . " ) ;
return true ;
}
if ( ! auxGroup . getInherits ( ) . contains ( auxGroup2 . getName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " Group " + auxGroup . getName ( ) + " does not inherits " + auxGroup2 . getName ( ) + " directly. " ) ;
return true ;
}
// Seems OK
auxGroup . removeInherits ( auxGroup2 . getName ( ) ) ;
sender . sendMessage ( ChatColor . RED + " Group " + auxGroup2 . getName ( ) + " was removed from " + auxGroup . getName ( ) + " inheritance list. " ) ;
BukkitPermissions . updateAllPlayers ( ) ;
return true ;
case manuaddv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 3 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manuaddv <user> <variable> <value>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( int i = 2 ; i < args . length ; i + + ) {
auxString + = args [ i ] ;
if ( ( i + 1 ) < args . length ) {
auxString + = " " ;
}
}
auxString = auxString . replace ( " ' " , " " ) ;
auxUser . getVariables ( ) . addVar ( args [ 1 ] , Variables . parseVariableValue ( auxString ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " Variable " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " :' " + ChatColor . GREEN + auxString + ChatColor . YELLOW + " ' added to the user " + auxUser . getLastName ( ) ) ;
return true ;
case manudelv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manudelv <user> <variable>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
if ( ! auxUser . getVariables ( ) . hasVar ( args [ 1 ] ) ) {
sender . sendMessage ( ChatColor . RED + " The user doesn't have directly that variable! " ) ;
return true ;
}
// Seems OK
auxUser . getVariables ( ) . removeVar ( args [ 1 ] ) ;
sender . sendMessage ( ChatColor . YELLOW + " Variable " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " removed from the user " + ChatColor . GREEN + auxUser . getLastName ( ) ) ;
return true ;
case manulistv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manulistv <user>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( final String varKey : auxUser . getVariables ( ) . getVarKeyList ( ) ) {
final Object o = auxUser . getVariables ( ) . getVarObject ( varKey ) ;
auxString + = ChatColor . GOLD + varKey + ChatColor . WHITE + " :' " + ChatColor . GREEN + o . toString ( ) + ChatColor . WHITE + " ', " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Variables of user " + auxUser . getLastName ( ) + " : " ) ;
sender . sendMessage ( auxString + " . " ) ;
sender . sendMessage ( ChatColor . YELLOW + " Plus all variables from group: " + auxUser . getGroupName ( ) ) ;
return true ;
case manucheckv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manucheckv <user> <variable>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
auxGroup = auxUser . getGroup ( ) ;
auxGroup2 = permissionHandler . nextGroupWithVariable ( auxGroup , args [ 1 ] ) ;
if ( ! auxUser . getVariables ( ) . hasVar ( args [ 1 ] ) ) {
// Check sub groups
if ( ! auxUser . isSubGroupsEmpty ( ) & & auxGroup2 = = null )
for ( final Group subGroup : auxUser . subGroupListCopy ( ) ) {
auxGroup2 = permissionHandler . nextGroupWithVariable ( subGroup , args [ 1 ] ) ;
if ( auxGroup2 ! = null )
continue ;
}
if ( auxGroup2 = = null ) {
sender . sendMessage ( ChatColor . YELLOW + " The user doesn't have access to that variable! " ) ;
return true ;
}
}
// Seems OK
if ( auxUser . getVariables ( ) . hasVar ( auxString ) ) {
sender . sendMessage ( ChatColor . YELLOW + " The value of variable ' " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " ' is: ' " + ChatColor . GREEN + auxUser . getVariables ( ) . getVarObject ( args [ 1 ] ) . toString ( )
+ ChatColor . WHITE + " ' " ) ;
sender . sendMessage ( ChatColor . YELLOW + " This user own directly the variable " ) ;
}
sender . sendMessage (
ChatColor . YELLOW + " The value of variable ' " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " ' is: ' " + ChatColor . GREEN + auxGroup2 . getVariables ( ) . getVarObject ( args [ 1 ] ) . toString ( ) + ChatColor . WHITE + " ' " ) ;
if ( ! auxGroup . equals ( auxGroup2 ) ) {
sender . sendMessage ( ChatColor . YELLOW + " And the value was inherited from group: " + ChatColor . GREEN + auxGroup2 . getName ( ) ) ;
}
return true ;
case mangaddv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length < 3 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangaddv <group> <variable> <value>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support Info Nodes. " ) ;
return true ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( int i = 2 ; i < args . length ; i + + ) {
auxString + = args [ i ] ;
if ( ( i + 1 ) < args . length ) {
auxString + = " " ;
}
}
auxString = auxString . replace ( " ' " , " " ) ;
auxGroup . getVariables ( ) . addVar ( args [ 1 ] , Variables . parseVariableValue ( auxString ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " Variable " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " :' " + ChatColor . GREEN + auxString + ChatColor . YELLOW + " ' added to the group " + auxGroup . getName ( ) ) ;
return true ;
case mangdelv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangdelv <group> <variable>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support Info Nodes. " ) ;
return true ;
}
// Validating permission
if ( ! auxGroup . getVariables ( ) . hasVar ( args [ 1 ] ) ) {
sender . sendMessage ( ChatColor . RED + " The group doesn't have directly that variable! " ) ;
return true ;
}
// Seems OK
auxGroup . getVariables ( ) . removeVar ( args [ 1 ] ) ;
sender . sendMessage ( ChatColor . YELLOW + " Variable " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " removed from the group " + ChatColor . GREEN + auxGroup . getName ( ) ) ;
return true ;
case manglistv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manglistv <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support Info Nodes. " ) ;
return true ;
}
// Validating permission
// Seems OK
auxString = " " ;
for ( final String varKey : auxGroup . getVariables ( ) . getVarKeyList ( ) ) {
final Object o = auxGroup . getVariables ( ) . getVarObject ( varKey ) ;
auxString + = ChatColor . GOLD + varKey + ChatColor . WHITE + " :' " + ChatColor . GREEN + o . toString ( ) + ChatColor . WHITE + " ', " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Variables of group " + auxGroup . getName ( ) + " : " ) ;
sender . sendMessage ( auxString + " . " ) ;
auxString = " " ;
for ( final String grp : auxGroup . getInherits ( ) ) {
auxString + = grp + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " Plus all variables from groups: " + auxString ) ;
}
return true ;
case mangcheckv :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/mangcheckv <group> <variable>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxGroup = dataHolder . getGroup ( args [ 0 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 0 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " GlobalGroups do NOT support Info Nodes. " ) ;
return true ;
}
// Validating permission
auxGroup2 = permissionHandler . nextGroupWithVariable ( auxGroup , args [ 1 ] ) ;
if ( auxGroup2 = = null ) {
sender . sendMessage ( ChatColor . RED + " The group doesn't have access to that variable! " ) ;
}
// Seems OK
sender . sendMessage (
ChatColor . YELLOW + " The value of variable ' " + ChatColor . GOLD + args [ 1 ] + ChatColor . YELLOW + " ' is: ' " + ChatColor . GREEN + auxGroup2 . getVariables ( ) . getVarObject ( args [ 1 ] ) . toString ( ) + ChatColor . WHITE + " ' " ) ;
if ( ! auxGroup . equals ( auxGroup2 ) ) {
sender . sendMessage ( ChatColor . YELLOW + " And the value was inherited from group: " + ChatColor . GREEN + auxGroup2 . getName ( ) ) ;
}
return true ;
case manwhois :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manwhois <player>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Seems OK
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 名称: " + ChatColor . GREEN + auxUser . getLastName ( ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " 权限组: " + ChatColor . GREEN + auxUser . getGroup ( ) . getName ( ) ) ;
2016-03-01 03:15:02 +00:00
// Compile a list of subgroups
auxString = " " ;
for ( final String subGroup : auxUser . subGroupListStringCopy ( ) ) {
auxString + = subGroup + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " subgroups: " + auxString ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Overloaded: " + ChatColor . GREEN + dataHolder . isOverloaded ( auxUser . getLastName ( ) ) ) ;
auxGroup = dataHolder . surpassOverload ( auxUser . getLastName ( ) ) . getGroup ( ) ;
if ( ! auxGroup . equals ( auxUser . getGroup ( ) ) ) {
sender . sendMessage ( ChatColor . YELLOW + " Original Group: " + ChatColor . GREEN + auxGroup . getName ( ) ) ;
}
// victim.permissions.add(args[1]);
return true ;
case tempadd :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/tempadd <player>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " Can't modify player with same permissions than you, or higher. " ) ;
return true ;
}
// Seems OK
if ( overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) = = null ) {
overloadedUsers . put ( dataHolder . getName ( ) . toLowerCase ( ) , new ArrayList < User > ( ) ) ;
}
dataHolder . overloadUser ( auxUser . getLastName ( ) ) ;
overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) . add ( dataHolder . getUser ( auxUser . getLastName ( ) ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " Player set to overload mode! " ) ;
return true ;
case tempdel :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/tempdel <player>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
// Seems OK
if ( overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) = = null ) {
overloadedUsers . put ( dataHolder . getName ( ) . toLowerCase ( ) , new ArrayList < User > ( ) ) ;
}
dataHolder . removeOverload ( auxUser . getLastName ( ) ) ;
if ( overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) . contains ( auxUser ) ) {
overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) . remove ( auxUser ) ;
}
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 玩家超载模式现在被禁用. " ) ;
2016-03-01 03:15:02 +00:00
return true ;
case templist :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// WORKING
auxString = " " ;
removeList = new ArrayList < User > ( ) ;
count = 0 ;
for ( final User u : overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) ) {
if ( ! dataHolder . isOverloaded ( u . getLastName ( ) ) ) {
removeList . add ( u ) ;
} else {
auxString + = u . getLastName ( ) + " , " ;
count + + ;
}
}
if ( count = = 0 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 在重载模式下没有用户. " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
if ( overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) = = null ) {
overloadedUsers . put ( dataHolder . getName ( ) . toLowerCase ( ) , new ArrayList < User > ( ) ) ;
}
overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) . removeAll ( removeList ) ;
sender . sendMessage ( ChatColor . YELLOW + " " + count + " Users in overload mode: " + ChatColor . WHITE + auxString ) ;
return true ;
case tempdelall :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// WORKING
removeList = new ArrayList < User > ( ) ;
count = 0 ;
for ( final User u : overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) ) {
if ( dataHolder . isOverloaded ( u . getLastName ( ) ) ) {
dataHolder . removeOverload ( u . getLastName ( ) ) ;
count + + ;
}
}
if ( count = = 0 ) {
sender . sendMessage ( ChatColor . YELLOW + " There are no users in overload mode. " ) ;
return true ;
}
if ( overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) = = null ) {
overloadedUsers . put ( dataHolder . getName ( ) . toLowerCase ( ) , new ArrayList < User > ( ) ) ;
}
overloadedUsers . get ( dataHolder . getName ( ) . toLowerCase ( ) ) . clear ( ) ;
sender . sendMessage ( ChatColor . YELLOW + " " + count + " All users in overload mode are now normal again. " ) ;
return true ;
case mansave :
boolean forced = false ;
if ( ( args . length = = 1 ) & & ( args [ 0 ] . equalsIgnoreCase ( " force " ) ) )
forced = true ;
try {
worldsHolder . saveChanges ( forced ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 所有改变已保存. " ) ;
2016-03-01 03:15:02 +00:00
} catch ( final IllegalStateException ex ) {
sender . sendMessage ( ChatColor . RED + ex . getMessage ( ) ) ;
}
return true ;
case manload :
/ * *
* Attempt to reload a specific world
* /
if ( args . length > 0 ) {
if ( ! lastError . isEmpty ( ) ) {
sender . sendMessage ( ChatColor . RED + " All commands are locked due to an error. " + ChatColor . BOLD + " " + ChatColor . UNDERLINE + " Check plugins/groupmanager/error.log or console " + ChatColor . RESET + " "
+ ChatColor . RED + " and then try a '/manload'. " ) ;
return true ;
}
auxString = " " ;
for ( int i = 0 ; i < args . length ; i + + ) {
auxString + = args [ i ] ;
if ( ( i + 1 ) < args . length ) {
auxString + = " " ;
}
}
isLoaded = false ; // Disable Bukkit Perms update and event triggers
globalGroups . load ( ) ;
worldsHolder . loadWorld ( auxString ) ;
sender . sendMessage ( " The request to reload world ' " + auxString + " ' was attempted. " ) ;
isLoaded = true ;
BukkitPermissions . reset ( ) ;
} else {
/ * *
* Reload all settings and data as no world was specified .
* /
/ *
* Attempting a fresh load .
* /
onDisable ( true ) ;
onEnable ( true ) ;
sender . sendMessage ( " All settings and worlds were reloaded! " ) ;
}
/ * *
* Fire an event as none will have been triggered in the reload .
* /
if ( GroupManager . isLoaded ( ) )
GroupManager . getGMEventHandler ( ) . callEvent ( GMSystemEvent . Action . RELOADED ) ;
return true ;
case listgroups :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// WORKING
auxString = " " ;
String auxString2 = " " ;
for ( final Group g : dataHolder . getGroupList ( ) ) {
auxString + = g . getName ( ) + " , " ;
}
for ( final Group g : getGlobalGroups ( ) . getGroupList ( ) ) {
auxString2 + = g . getName ( ) + " , " ;
}
if ( auxString . lastIndexOf ( " , " ) > 0 ) {
auxString = auxString . substring ( 0 , auxString . lastIndexOf ( " , " ) ) ;
}
if ( auxString2 . lastIndexOf ( " , " ) > 0 ) {
auxString2 = auxString2 . substring ( 0 , auxString2 . lastIndexOf ( " , " ) ) ;
}
sender . sendMessage ( ChatColor . YELLOW + " Groups Available: " + ChatColor . WHITE + auxString ) ;
sender . sendMessage ( ChatColor . YELLOW + " GlobalGroups Available: " + ChatColor . WHITE + auxString2 ) ;
return true ;
case manpromote :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 参数错误! (/manpromote <player> <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
auxGroup = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
sender . sendMessage ( ChatColor . RED + " Players may not be members of GlobalGroups directly. " ) ;
return true ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( permissionHandler . hasGroupInInheritance ( auxGroup , senderGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " The destination group can't be the same as yours, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxUser . getGroupName ( ) ) | | ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player involving a group that you don't inherit. " ) ;
return true ;
}
if ( ! permissionHandler . hasGroupInInheritance ( auxUser . getGroup ( ) , auxGroup . getName ( ) ) & & ! permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player using groups with different heritage line. " ) ;
return true ;
}
if ( ! permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " The new group must be a higher rank. " ) ;
return true ;
}
// Seems OK
auxUser . setGroup ( auxGroup ) ;
if ( ! sender . hasPermission ( " groupmanager.notify.other " ) | | ( isConsole ) )
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 你改变了 " + auxUser . getLastName ( ) + " 的用户组为 " + auxGroup . getName ( ) + " . " ) ;
2016-03-01 03:15:02 +00:00
return true ;
case mandemote :
// Validating state of sender
if ( dataHolder = = null | | permissionHandler = = null ) {
if ( ! setDefaultWorldHandler ( sender ) )
return true ;
}
// Validating arguments
if ( args . length ! = 2 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 请检查参数! (/mandemote <player> <group>) " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ( validateOnlinePlayer ) & & ( ( match = validatePlayer ( args [ 0 ] , sender ) ) = = null ) ) {
return false ;
}
if ( match ! = null ) {
auxUser = dataHolder . getUser ( match . get ( 0 ) ) ;
} else {
auxUser = dataHolder . getUser ( args [ 0 ] ) ;
}
auxGroup = dataHolder . getGroup ( args [ 1 ] ) ;
if ( auxGroup = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 权限组 ' " + args [ 1 ] + " ' 不存在! " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( auxGroup . isGlobal ( ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 玩家不可以直接是 全局组 的成员. " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
// Validating permission
if ( ! isConsole & & ! isOpOverride & & ( senderGroup ! = null ? permissionHandler . inGroup ( auxUser . getLastName ( ) , senderGroup . getName ( ) ) : false ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player with same permissions as you, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( permissionHandler . hasGroupInInheritance ( auxGroup , senderGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " The destination group can't be the same as yours, or higher. " ) ;
return true ;
}
if ( ! isConsole & & ! isOpOverride & & ( ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxUser . getGroupName ( ) ) | | ! permissionHandler . inGroup ( senderUser . getLastName ( ) , auxGroup . getName ( ) ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player involving a group that you don't inherit. " ) ;
return true ;
}
if ( ! permissionHandler . hasGroupInInheritance ( auxUser . getGroup ( ) , auxGroup . getName ( ) ) & & ! permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " You can't modify a player using groups with different inheritage line. " ) ;
return true ;
}
if ( permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
sender . sendMessage ( ChatColor . RED + " The new group must be a lower rank. " ) ;
return true ;
}
// Seems OK
auxUser . setGroup ( auxGroup ) ;
if ( ! sender . hasPermission ( " groupmanager.notify.other " ) | | ( isConsole ) )
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 你改变了 " + auxUser . getLastName ( ) + " 的用户组为 " + auxGroup . getName ( ) + " . " ) ;
2016-03-01 03:15:02 +00:00
return true ;
case mantogglevalidate :
validateOnlinePlayer = ! validateOnlinePlayer ;
sender . sendMessage ( ChatColor . YELLOW + " Validate if player is online, now set to: " + Boolean . toString ( validateOnlinePlayer ) ) ;
if ( ! validateOnlinePlayer ) {
sender . sendMessage ( ChatColor . GOLD + " From now on you can edit players that are not connected... BUT: " ) ;
sender . sendMessage ( ChatColor . LIGHT_PURPLE + " From now on you should type the whole name of the player, correctly. " ) ;
}
return true ;
case mantogglesave :
if ( scheduler = = null ) {
enableScheduler ( ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 自动保存已开启! " ) ;
2016-03-01 03:15:02 +00:00
} else {
disableScheduler ( ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 自动保存已关闭! " ) ;
2016-03-01 03:15:02 +00:00
}
return true ;
case manworld :
auxString = selectedWorlds . get ( sender . getName ( ) ) ;
if ( auxString ! = null ) {
sender . sendMessage ( ChatColor . YELLOW + " You have the world ' " + dataHolder . getName ( ) + " ' in your selection. " ) ;
} else {
if ( dataHolder = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 没有选择世界。现在没有世界可以使用. " ) ;
2016-03-01 03:15:02 +00:00
} else {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 在你的选择中没有一个世界.. " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 系统将默认使用您所在的世界. " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 您当前所在的世界为: ' " + dataHolder . getName ( ) + " ' " ) ;
2016-03-01 03:15:02 +00:00
}
}
return true ;
case manselect :
if ( args . length < 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 请检查参数! (/manselect <world>) " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 可用的世界: " ) ;
2016-03-01 03:15:02 +00:00
final ArrayList < OverloadedWorldHolder > worlds = worldsHolder . allWorldsDataList ( ) ;
auxString = " " ;
for ( int i = 0 ; i < worlds . size ( ) ; i + + ) {
auxString + = worlds . get ( i ) . getName ( ) ;
if ( ( i + 1 ) < worlds . size ( ) ) {
auxString + = " , " ;
}
}
sender . sendMessage ( ChatColor . YELLOW + auxString ) ;
return false ;
}
auxString = " " ;
for ( int i = 0 ; i < args . length ; i + + ) {
if ( args [ i ] = = null ) {
2016-03-01 12:32:27 +00:00
logger . warning ( " Bukkit发送了无效的参数数组! Cmd: " + cmd . getName ( ) + " args.length: " + args . length ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
auxString + = args [ i ] ;
if ( i < ( args . length - 1 ) ) {
auxString + = " " ;
}
}
dataHolder = worldsHolder . getWorldData ( auxString ) ;
permissionHandler = dataHolder . getPermissionsHandler ( ) ;
selectedWorlds . put ( sender . getName ( ) , dataHolder . getName ( ) ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 你选择了世界 ' " + dataHolder . getName ( ) + " '. " ) ;
2016-03-01 03:15:02 +00:00
return true ;
case manclear :
if ( args . length ! = 0 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 请检查参数! " ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
selectedWorlds . remove ( sender . getName ( ) ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 你已经取消了世界选择。默认将使用当前世界(如果可能的话). " ) ;
2016-03-01 03:15:02 +00:00
return true ;
case mancheckw :
if ( args . length < 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 请检查参数! (/mancheckw <world>) " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 可用的世界: " ) ;
2016-03-01 03:15:02 +00:00
final ArrayList < OverloadedWorldHolder > worlds = worldsHolder . allWorldsDataList ( ) ;
auxString = " " ;
for ( int i = 0 ; i < worlds . size ( ) ; i + + ) {
auxString + = worlds . get ( i ) . getName ( ) ;
if ( ( i + 1 ) < worlds . size ( ) ) {
auxString + = " , " ;
}
}
sender . sendMessage ( ChatColor . YELLOW + auxString ) ;
return false ;
}
auxString = " " ;
for ( int i = 0 ; i < args . length ; i + + ) {
if ( args [ i ] = = null ) {
2016-03-01 12:32:27 +00:00
logger . warning ( " Bukkit发送了无效的参数数组! Cmd: " + cmd . getName ( ) + " args.length: " + args . length ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
auxString + = args [ i ] ;
if ( i < ( args . length - 1 ) ) {
auxString + = " " ;
}
}
dataHolder = worldsHolder . getWorldData ( auxString ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . YELLOW + " 你选择了世界 ' " + dataHolder . getName ( ) + " '. " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 这个世界正在使用下面的数据文件.. " ) ;
sender . sendMessage ( ChatColor . YELLOW + " 组: " + ChatColor . GREEN + " " + dataHolder . getGroupsFile ( ) . getAbsolutePath ( ) ) ;
sender . sendMessage ( ChatColor . YELLOW + " 用户: " + ChatColor . GREEN + " " + dataHolder . getUsersFile ( ) . getAbsolutePath ( ) ) ;
2016-03-01 03:15:02 +00:00
return true ;
default :
break ;
}
}
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 你没有该命令的权限. " ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
@Override
public void onDisable ( ) {
onDisable ( false ) ;
}
public void onDisable ( final boolean restarting ) {
setLoaded ( false ) ;
if ( ! restarting ) {
// Unregister this service if we are shutting down.
this . getServer ( ) . getServicesManager ( ) . unregister ( this . worldsHolder ) ;
}
disableScheduler ( ) ; // Shutdown before we save, so it doesn't interfere.
if ( worldsHolder ! = null ) {
try {
worldsHolder . saveChanges ( false ) ;
} catch ( final IllegalStateException ex ) {
GroupManager . logger . log ( Level . WARNING , ex . getMessage ( ) ) ;
}
}
// Remove all attachments before clearing
if ( BukkitPermissions ! = null ) {
BukkitPermissions . removeAllAttachments ( ) ;
}
if ( ! restarting ) {
if ( WorldEvents ! = null )
WorldEvents = null ;
BukkitPermissions = null ;
}
// EXAMPLE: Custom code, here we just output some info so we can check that all is well
final PluginDescriptionFile pdfFile = this . getDescription ( ) ;
2016-03-01 12:32:27 +00:00
System . out . println ( pdfFile . getName ( ) + " 版本 " + pdfFile . getVersion ( ) + " 已卸载! " ) ;
2016-03-01 03:15:02 +00:00
if ( ! restarting )
GroupManager . logger . removeHandler ( ch ) ;
}
@Override
public void onEnable ( ) {
/ *
* Initialize the event handler
* /
setGMEventHandler ( new GroupManagerEventHandler ( this ) ) ;
onEnable ( false ) ;
new VersionChecker ( this ) ;
}
public void onEnable ( final boolean restarting ) {
try {
/ *
* reset local variables .
* /
overloadedUsers = new HashMap < String , ArrayList < User > > ( ) ;
selectedWorlds = new HashMap < String , String > ( ) ;
lastError = " " ;
/ *
* Setup our logger if we are not restarting .
* /
if ( ! restarting ) {
GroupManager . logger . setUseParentHandlers ( false ) ;
ch = new GMLoggerHandler ( ) ;
GroupManager . logger . addHandler ( ch ) ;
}
GroupManager . logger . setLevel ( Level . ALL ) ;
// Create the backup folder, if it doesn't exist.
prepareFileFields ( ) ;
// Load the config.yml
prepareConfig ( ) ;
// Load the global groups
globalGroups = new GlobalGroups ( this ) ;
/ *
* Configure the worlds holder .
* /
if ( ! restarting )
worldsHolder = new WorldsHolder ( this ) ;
else
worldsHolder . resetWorldsHolder ( ) ;
/ *
* This should NEVER happen . No idea why it ' s still here .
* /
final PluginDescriptionFile pdfFile = this . getDescription ( ) ;
if ( worldsHolder = = null ) {
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " 无法启用 " + pdfFile . getName ( ) + " 版本 " + pdfFile . getVersion ( ) + " , 错误的载入! " ) ;
2016-03-01 03:15:02 +00:00
this . getServer ( ) . getPluginManager ( ) . disablePlugin ( this ) ;
2016-03-01 12:32:27 +00:00
throw new IllegalStateException ( " 载入 GroupManager 时发生了一个错误! " ) ;
2016-03-01 03:15:02 +00:00
}
/ *
* Prevent our registered events from triggering
* updates as we are not fully loaded .
* /
setLoaded ( false ) ;
/ *
* Initialize the world listener and bukkit permissions
* to handle events if this is a fresh start
*
* else
*
* Reset bukkit perms .
* /
if ( ! restarting ) {
WorldEvents = new GMWorldListener ( this ) ;
BukkitPermissions = new BukkitPermissions ( this ) ;
} else {
BukkitPermissions . reset ( ) ;
}
/ *
* Start the scheduler for data saving .
* /
enableScheduler ( ) ;
/ *
* Schedule a Bukkit Permissions update for 1 tick later .
* All plugins will be loaded by then
* /
if ( getServer ( ) . getScheduler ( ) . scheduleSyncDelayedTask ( this , new BukkitPermsUpdateTask ( ) , 1 ) = = - 1 ) {
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " 无法计划 Bukkit Permissions 刷新任务. " ) ;
2016-03-01 03:15:02 +00:00
/ *
* Flag that we are now loaded and should start processing events .
* /
setLoaded ( true ) ;
}
2016-03-01 12:32:27 +00:00
System . out . println ( pdfFile . getName ( ) + " 版本 " + pdfFile . getVersion ( ) + " 已加载 汉化 By 喵♂呜! " ) ;
2016-03-01 03:15:02 +00:00
// Register as a service
if ( ! restarting )
this . getServer ( ) . getServicesManager ( ) . register ( WorldsHolder . class , this . worldsHolder , this , ServicePriority . Lowest ) ;
} catch ( final Exception ex ) {
/ *
* Store the error and write to the log .
* /
saveErrorLog ( ex ) ;
/ *
* Throw an error so Bukkit knows about it .
* /
throw new IllegalArgumentException ( ex . getMessage ( ) , ex ) ;
}
}
/ * *
* @param validateOnlinePlayer
* the validateOnlinePlayer to set
* /
public void setValidateOnlinePlayer ( final boolean validateOnlinePlayer ) {
this . validateOnlinePlayer = validateOnlinePlayer ;
}
/ * *
* Checks if a permission exists and of a lower or same priority .
* /
private boolean checkPermissionExists ( final CommandSender sender , final String newPerm , final PermissionCheckResult oldPerm , final String type ) {
if ( newPerm . startsWith ( " + " ) ) {
if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 当前 " + type + " 已经有直接访问权限. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
} else if ( newPerm . startsWith ( " - " ) ) {
if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 当前 " + type + " 已经有例外(拒绝)权限. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
return true ;
} else if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " The " + type + " 已经有一个匹配节点. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
} else {
if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . EXCEPTION ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 当前 " + type + " 已经有例外(拒绝)权限. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
} else if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . NEGATION ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 当前 " + type + " 已经有一个匹配节点. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
} else if ( oldPerm . resultType . equals ( PermissionCheckResult . Type . FOUND ) ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 当前 " + type + " 已经有直接访问权限. " ) ;
sender . sendMessage ( ChatColor . RED + " 节点: " + oldPerm . accessLevel ) ;
2016-03-01 03:15:02 +00:00
// Since not all plugins define wildcard permissions, allow setting the permission anyway if the permissions dont match exactly.
return ( oldPerm . accessLevel . equalsIgnoreCase ( newPerm ) ) ;
}
}
return false ;
}
private void prepareConfig ( ) {
config = new GMConfiguration ( this ) ;
}
private void prepareFileFields ( ) {
backupFolder = new File ( this . getDataFolder ( ) , " backup " ) ;
if ( ! backupFolder . exists ( ) ) {
getBackupFolder ( ) . mkdirs ( ) ;
}
}
/ * *
* Write an error . log
*
* @param ex
* /
private void saveErrorLog ( final Exception ex ) {
if ( ! getDataFolder ( ) . exists ( ) ) {
getDataFolder ( ) . mkdirs ( ) ;
}
lastError = ex . getMessage ( ) ;
GroupManager . logger . severe ( " =================================================== " ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " = 错误报告 开始 - " + this . getDescription ( ) . getVersion ( ) + " = " ) ;
2016-03-01 03:15:02 +00:00
GroupManager . logger . severe ( " =================================================== " ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " === 请从插件目录复制错误日志ERROR.LOG发送给开发者 == " ) ;
2016-03-01 03:15:02 +00:00
GroupManager . logger . severe ( " =================================================== " ) ;
GroupManager . logger . severe ( lastError ) ;
GroupManager . logger . severe ( " =================================================== " ) ;
2016-03-01 12:32:27 +00:00
GroupManager . logger . severe ( " = 错误报告 结束 = " ) ;
2016-03-01 03:15:02 +00:00
GroupManager . logger . severe ( " =================================================== " ) ;
// Append this error to the error log.
try {
2016-03-01 12:32:27 +00:00
String error = " =============================== GM 错误日志 =============================== \ n " ;
2016-03-01 03:15:02 +00:00
error + = " = ERROR REPORT START - " + this . getDescription ( ) . getVersion ( ) + " = \ n \ n " ;
error + = Tasks . getStackTraceAsString ( ex ) ;
error + = " \ n============================================================================ \ n " ;
Tasks . appendStringToFile ( error , ( getDataFolder ( ) + System . getProperty ( " file.separator " ) + " ERROR.LOG " ) ) ;
} catch ( final IOException e ) {
// Failed to write file.
e . printStackTrace ( ) ;
}
}
/ * *
* Sets up the default world for use .
* /
private boolean setDefaultWorldHandler ( final CommandSender sender ) {
dataHolder = worldsHolder . getWorldData ( worldsHolder . getDefaultWorld ( ) . getName ( ) ) ;
permissionHandler = dataHolder . getPermissionsHandler ( ) ;
if ( ( dataHolder ! = null ) & & ( permissionHandler ! = null ) ) {
selectedWorlds . put ( sender . getName ( ) , dataHolder . getName ( ) ) ;
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 无法确定你所在的世界,已选择默认世界 ' " + worldsHolder . getDefaultWorld ( ) . getName ( ) ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 无法确定你所在的世界,请指定一个世界. " ) ;
sender . sendMessage ( ChatColor . RED + " 使用 /manselect <world> " ) ;
2016-03-01 03:15:02 +00:00
return false ;
}
/ * *
* Load a List of players matching the name given . If none online , check
* Offline .
*
* @param playerName ,
* sender
* @return true if a single match is found
* /
private List < String > validatePlayer ( final String playerName , final CommandSender sender ) {
List < Player > players = new ArrayList < Player > ( ) ;
final List < String > match = new ArrayList < String > ( ) ;
players = this . getServer ( ) . matchPlayer ( playerName ) ;
if ( players . isEmpty ( ) ) {
// Check for an offline player (exact match).
if ( Arrays . asList ( this . getServer ( ) . getOfflinePlayers ( ) ) . contains ( Bukkit . getOfflinePlayer ( playerName ) ) ) {
match . add ( playerName ) ;
} else {
// look for partial matches
for ( final OfflinePlayer offline : this . getServer ( ) . getOfflinePlayers ( ) ) {
if ( offline . getName ( ) . toLowerCase ( ) . startsWith ( playerName . toLowerCase ( ) ) )
match . add ( offline . getName ( ) ) ;
}
}
} else {
for ( final Player player : players ) {
match . add ( player . getName ( ) ) ;
}
}
if ( match . isEmpty ( ) | | match = = null ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 玩家未找到! " ) ;
2016-03-01 03:15:02 +00:00
return null ;
} else if ( match . size ( ) > 1 ) {
2016-03-01 12:32:27 +00:00
sender . sendMessage ( ChatColor . RED + " 过多的参数! ( " + match . toString ( ) + " ) " ) ;
2016-03-01 03:15:02 +00:00
return null ;
}
return match ;
}
}