/*******************************************************************************
* Copyright 2014 Tobias Welther
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tobiyas.racesandclasses.commands.help;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.commands.AbstractCommand;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolder;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager;
import de.tobiyas.racesandclasses.util.consts.PermissionNode;
public class CommandExecutor_PermissionCheck extends AbstractCommand {
/**
* The plugin to call stuff on
*/
private RacesAndClasses plugin;
/**
* Creates a CommandExecutor to call when command should be executed.
*/
public CommandExecutor_PermissionCheck() {
super("racpermcheck", new String[]{"rc", "racp"});
plugin = RacesAndClasses.getPlugin();
}
@Override
public boolean onInternalCommand(CommandSender sender, Command command,
String label, String[] args) {
if(args.length == 1 && "race".equalsIgnoreCase(args[0])){
listRacePermissions(sender);
return true;
}
if(args.length == 1 && "class".equalsIgnoreCase(args[0])){
listClassPermissions(sender);
return true;
}
if(args.length == 1 && "class".equalsIgnoreCase(args[0])){
listCommandPermissions(sender);
return true;
}
return true;
}
/**
* Checks Permissions for specific Race.
*
* @param sender
*/
private void listRacePermissions(CommandSender sender){
if(!plugin.getConfigManager().getGeneralConfig().isConfig_enableRaces()){
sender.sendMessage("[RaC] Races are Disabled.");
return;
}
sender.sendMessage(ChatColor.RED + "=====" + ChatColor.YELLOW + " Race Permissions: " + ChatColor.RED + "=====");
List<String> holders = plugin.getRaceManager().listAllVisibleHolders();
for(String holderName : holders){
AbstractTraitHolder holder = plugin.getRaceManager().getHolderByName(holderName);
boolean senderContained = (sender instanceof Player) ?
holder.containsPlayer(RaCPlayerManager.get().getPlayer(((Player) sender))) :
false;
boolean hasPermissions = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.racePermPre + holderName);
sender.sendMessage(ChatColor.BLUE + holder.getDisplayName() + ": " + (senderContained ? ChatColor.LIGHT_PURPLE + " (Your Race)" : ""
+ (hasPermissions? ChatColor.GREEN + " Permissions" : ChatColor.RED + " No Permissions")));
}
if(holders.isEmpty()){
sender.sendMessage(ChatColor.RED + "You have access to no Race.");
}
}
/**
* Checks Permissions for Specific Classes.
*
* @param sender
*/
private void listClassPermissions(CommandSender sender){
sender.sendMessage(ChatColor.RED + "=====" + ChatColor.YELLOW + " Class Permissions: " + ChatColor.RED + "=====");
List<String> holders = plugin.getClassManager().listAllVisibleHolders();
for(String holderName : holders){
AbstractTraitHolder holder = plugin.getClassManager().getHolderByName(holderName);
boolean senderContained = (sender instanceof Player) ?
holder.containsPlayer(RaCPlayerManager.get().getPlayer(((Player) sender))) :
false;
boolean hasPermissions = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.classPermPre + holderName);
sender.sendMessage(ChatColor.BLUE + holder.getDisplayName() + ": " + (senderContained ? ChatColor.LIGHT_PURPLE + " (Your Class)" : ""
+ (hasPermissions? ChatColor.GREEN + " Permissions" : ChatColor.RED + " No Permissions")));
}
if(holders.isEmpty()){
sender.sendMessage(ChatColor.RED + "You have access to no Class.");
}
}
/**
* Lists permissions to all commands.
*
* @param sender
*/
private void listCommandPermissions(CommandSender sender){
sender.sendMessage(ChatColor.RED + "=====" + ChatColor.YELLOW + " Command Permissions: " + ChatColor.RED + "=====");
boolean raceSelectPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.selectRace);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/race select' "
+ (raceSelectPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean raceChangePermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.changeRace);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/race change' "
+ (raceChangePermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean classSelectPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.selectClass);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/class select' "
+ (classSelectPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean classChangePermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.changeClass);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/class change' "
+ (classChangePermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean healSelfPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.healSelf);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/racesheal' "
+ (healSelfPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean healOthersPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.healOther);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/raceheal <playername>' "
+ (healOthersPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean setGodmodePermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.god);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/racesgod [playername]' "
+ (setGodmodePermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean reloadPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.reload);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/racesreload [-gc]' "
+ (reloadPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean debugPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.debug);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/racesdebug [subcommand]' "
+ (debugPermission ? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
boolean statisticsPermission = plugin.getPermissionManager().checkPermissionsSilent(sender, PermissionNode.debug);
sender.sendMessage(ChatColor.LIGHT_PURPLE + "'/racesstatistics [plugin / subcommand]' "
+ (statisticsPermission? ChatColor.GREEN + "yes" : ChatColor.RED + "no"));
}
}