/*
* PermissionsEx - Permissions plugin for Bukkit
* Copyright (C) 2011 t3hk0d3 http://www.tehkode.ru
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package pex.permissions.bukkit.commands;
import java.util.Map;
import java.util.logging.Logger;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumChatFormatting;
import pex.permissions.PermissionGroup;
import pex.permissions.PermissionUser;
import pex.permissions.bukkit.PermissionsEx;
import pex.permissions.commands.Command;
import pex.permissions.exceptions.RankingException;
public class PromotionCommands extends PermissionsCommand {
@Command(name = "pex", syntax = "group <group> rank [rank] [ladder]", description = "Get or set <group> [rank] [ladder]", isPrimary = true, permission = "permissions.groups.rank.<group>")
public void rankGroup(Object plugin, ICommandSender sender, Map<String, String> args) {
String groupName = this.autoCompleteGroupName(args.get("group"));
PermissionGroup group = PermissionsEx.getPermissionManager().getGroup(groupName);
if (group == null) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "Group \"" + groupName + "\" not found");
return;
}
if (args.get("rank") != null) {
String newRank = args.get("rank").trim();
try {
group.setRank(Integer.parseInt(newRank));
} catch (NumberFormatException e) {
PermissionsEx.sendChatToPlayer(sender, "Wrong rank. Make sure it's number.");
}
if (args.containsKey("ladder")) {
group.setRankLadder(args.get("ladder"));
}
}
int rank = group.getRank();
if (rank > 0) {
PermissionsEx.sendChatToPlayer(sender, "Group " + group.getName() + " rank is " + rank + " (ladder = " + group.getRankLadder() + ")");
} else {
PermissionsEx.sendChatToPlayer(sender, "Group " + group.getName() + " is unranked");
}
}
@Command(name = "pex", syntax = "promote <user> [ladder]", description = "Promotes <user> to next group on [ladder]", isPrimary = true)
public void promoteUser(Object plugin, ICommandSender sender, Map<String, String> args) {
String userName = this.autoCompletePlayerName(args.get("user"));
PermissionUser user = PermissionsEx.getPermissionManager().getUser(userName);
if (user == null) {
PermissionsEx.sendChatToPlayer(sender, "Specified user \"" + args.get("user") + "\" not found!");
return;
}
String promoterName = "console";
String ladder = "default";
if (args.containsKey("ladder")) {
ladder = args.get("ladder");
}
PermissionUser promoter = null;
if (sender instanceof EntityPlayer) {
promoter = PermissionsEx.getPermissionManager().getUser(((EntityPlayer) sender).username);
if (promoter == null || !promoter.has("permissions.user.promote." + ladder, String.valueOf(((EntityPlayer) sender).dimension))) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "You don't have enough permissions to promote on this ladder");
return;
}
promoterName = promoter.getName();
}
try {
PermissionGroup targetGroup = user.promote(promoter, ladder);
informPlayer(plugin, user.getName(), "You have been promoted on " + targetGroup.getRankLadder() + " ladder to " + targetGroup.getName() + " group");
PermissionsEx.sendChatToPlayer(sender, "User " + user.getName() + " promoted to " + targetGroup.getName() + " group");
Logger.getLogger("Minecraft").info("User " + user.getName() + " has been promoted to " + targetGroup.getName() + " group on " + targetGroup.getRankLadder() + " ladder by " + promoterName);
} catch (RankingException e) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "Promotion error: " + e.getMessage());
Logger.getLogger("Minecraft").severe("Ranking Error (" + promoterName + " > " + e.getTarget().getName() + "): " + e.getMessage());
}
}
@Command(name = "pex", syntax = "demote <user> [ladder]", description = "Demotes <user> to previous group or [ladder]", isPrimary = true)
public void demoteUser(Object plugin, ICommandSender sender, Map<String, String> args) {
String userName = this.autoCompletePlayerName(args.get("user"));
PermissionUser user = PermissionsEx.getPermissionManager().getUser(userName);
if (user == null) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "Specified user \"" + args.get("user") + "\" not found!");
return;
}
String demoterName = "console";
String ladder = "default";
if (args.containsKey("ladder")) {
ladder = args.get("ladder");
}
PermissionUser demoter = null;
if (sender instanceof EntityPlayer) {
demoter = PermissionsEx.getPermissionManager().getUser(((EntityPlayer) sender).username);
if (demoter == null || !demoter.has("permissions.user.demote." + ladder, String.valueOf(((EntityPlayer) sender).dimension))) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "You don't have enough permissions to demote on this ladder");
return;
}
demoterName = demoter.getName();
}
try {
PermissionGroup targetGroup = user.demote(demoter, args.get("ladder"));
informPlayer(plugin, user.getName(), "You have been demoted on " + targetGroup.getRankLadder() + " ladder to " + targetGroup.getName() + " group");
PermissionsEx.sendChatToPlayer(sender, "User " + user.getName() + " demoted to " + targetGroup.getName() + " group");
Logger.getLogger("Minecraft").info("User " + user.getName() + " has been demoted to " + targetGroup.getName() + " group on " + targetGroup.getRankLadder() + " ladder by " + demoterName);
} catch (RankingException e) {
PermissionsEx.sendChatToPlayer(sender, EnumChatFormatting.RED + "Demotion error: " + e.getMessage());
Logger.getLogger("Minecraft").severe("Ranking Error (" + demoterName + " demotes " + e.getTarget().getName() + "): " + e.getMessage());
}
}
@Command(name = "promote", syntax = "<user>", description = "Promotes <user> to next group", isPrimary = true, permission = "permissions.user.rank.promote")
public void promoteUserAlias(Object plugin, ICommandSender sender, Map<String, String> args) {
promoteUser(plugin, sender, args);
}
@Command(name = "demote", syntax = "<user>", description = "Demotes <user> to previous group", isPrimary = true, permission = "permissions.user.rank.demote")
public void demoteUserAlias(Object plugin, ICommandSender sender, Map<String, String> args) {
demoteUser(plugin, sender, args);
}
}