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" ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage (
ChatColor . RED + "所有的命令已被锁定由于载入错误. " + ChatColor . BOLD + "" + ChatColor . UNDERLINE + "Check plugins/groupmanager/error.log or console" + ChatColor . RESET + "" + ChatColor . RED + " 请尝试使用命令 '/manload''." ) ;
2016-03-01 03:15:02 +00:00
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" ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage (
ChatColor . RED + "所有的命令已被锁定由于载入错误. " + ChatColor . BOLD + "" + ChatColor . UNDERLINE + "Check plugins/groupmanager/error.log or console" + ChatColor . RESET + "" + ChatColor . RED + " 请尝试使用命令 '/manload''." ) ;
2016-03-01 03:15:02 +00:00
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 ( ) ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 involving a group that you don't inherit." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ( ) ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 involving a group that you don't inherit." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same group as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same group as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . YELLOW + "在重载模式下没有用户." ) ;
2016-03-01 03:15:02 +00:00
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 ( ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage (
ChatColor . RED + "所有的命令已被锁定由于载入错误. " + ChatColor . BOLD + "" + ChatColor . UNDERLINE + "Check plugins/groupmanager/error.log or console" + ChatColor . RESET + "" + ChatColor . RED + " 请尝试使用命令 '/manload''." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ( ) ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 involving a group that you don't inherit." ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ! permissionHandler . hasGroupInInheritance ( auxUser . getGroup ( ) , auxGroup . getName ( ) ) & & ! permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 using groups with different heritage line." ) ;
2016-03-01 03:15:02 +00:00
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 ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 with same permissions as you, or higher." ) ;
2016-03-01 03:15:02 +00:00
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 ( ) ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 involving a group that you don't inherit." ) ;
2016-03-01 03:15:02 +00:00
return true ;
}
if ( ! permissionHandler . hasGroupInInheritance ( auxUser . getGroup ( ) , auxGroup . getName ( ) ) & & ! permissionHandler . hasGroupInInheritance ( auxGroup , auxUser . getGroupName ( ) ) ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . RED + "你不能修改玩家 using groups with different inheritage line." ) ;
2016-03-01 03:15:02 +00:00
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 ) {
2016-03-01 12:39:17 +00:00
sender . sendMessage ( ChatColor . YELLOW + "你选择了世界 '" + dataHolder . getName ( ) + "'." ) ;
2016-03-01 03:15:02 +00:00
} 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 ;
}
}