/*******************************************************************************
* 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.level;
import static de.tobiyas.racesandclasses.translation.languages.Keys.number_not_readable;
import static de.tobiyas.racesandclasses.translation.languages.Keys.player_not_exist;
import static de.tobiyas.racesandclasses.translation.languages.Keys.success;
import static de.tobiyas.racesandclasses.translation.languages.Keys.value_0_not_allowed;
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.APIs.LanguageAPI;
import de.tobiyas.racesandclasses.APIs.LevelAPI;
import de.tobiyas.racesandclasses.commands.AbstractCommand;
import de.tobiyas.racesandclasses.playermanagement.leveling.LevelCalculator;
import de.tobiyas.racesandclasses.playermanagement.leveling.LevelPackage;
import de.tobiyas.racesandclasses.playermanagement.leveling.PlayerLevelManager;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager;
import de.tobiyas.racesandclasses.util.consts.PermissionNode;
public class Command_RACLevel extends AbstractCommand {
/**
* Registers the Command "class" to the plugin.
*/
public Command_RACLevel(){
super("raclevel", "lvl");
}
@Override
public boolean onInternalCommand(CommandSender sender, Command command,
String label, String[] args) {
if((sender instanceof Player) &&
(!RacesAndClasses.getPlugin().getPermissionManager().checkPermissionsSilent(sender, PermissionNode.levelEdit)
|| args.length == 0 )){
postLevel((Player)sender);
return true;
}
if(args.length != 3){
pasteHelp(sender);
return true;
}
String subCommand = args[1];
RaCPlayer player = RaCPlayerManager.get().getPlayerByName(args[0]);
if(player == null){
LanguageAPI.sendTranslatedMessage(sender, player_not_exist, "PLAYER", args[0]);
return true;
}
int value = 0;
try{
value = Integer.valueOf(args[2]);
}catch(NumberFormatException exp){
LanguageAPI.sendTranslatedMessage(sender, number_not_readable);
return true;
}
PlayerLevelManager manager = player.getLevelManager();
if(manager == null){
LanguageAPI.sendTranslatedMessage(sender, player_not_exist,
"player", player.getName());
return true;
}
if(value == 0){
LanguageAPI.sendTranslatedMessage(sender, value_0_not_allowed,
"player", player.getName());
return true;
}
if("exp".equalsIgnoreCase(subCommand)){
if(value < 0){
manager.removeExp(-value);
}
if(value > 0){
manager.addExp(value);
}
LanguageAPI.sendTranslatedMessage(sender, success);
return true;
}
if("lvl".equalsIgnoreCase(subCommand)){
if(value > 0){
manager.addLevel(value);
}else{
manager.removeLevel(-value);
}
LanguageAPI.sendTranslatedMessage(sender, success);
return true;
}
pasteHelp(sender);
return true;
}
/**
* Posts the level infos to the player.
*
* @param sender
*/
private void postLevel(Player player) {
RaCPlayer pl = RaCPlayerManager.get().getPlayer(player);
int level = LevelAPI.getCurrentLevel(player);
int levelExp = (int) LevelAPI.getCurrentExpOfLevel(player);
LevelPackage levelPack = LevelCalculator.calculateLevelPackage(level);
int maxEXP = levelPack.getMaxEXP();
pl.sendMessage(ChatColor.YELLOW + "==== Level ====");
pl.sendMessage(ChatColor.YELLOW + "Level: " + ChatColor.AQUA + level);
pl.sendMessage(ChatColor.YELLOW + "Exp: " + ChatColor.AQUA + levelExp + ChatColor.GRAY + "/" + ChatColor.AQUA + maxEXP);
}
/**
* Paste the help for the Level command
*
* @param sender to send to
*/
private void pasteHelp(CommandSender sender) {
sender.sendMessage(ChatColor.YELLOW + "=== RAC Level ===");
sender.sendMessage(ChatColor.LIGHT_PURPLE + "/raclevel <player> exp <value>"
+ ChatColor.YELLOW + " Adds / Removes EXP to player.");
sender.sendMessage(ChatColor.LIGHT_PURPLE + "/raclevel <player> lvl <value>"
+ ChatColor.YELLOW + " Adds / Removes LEVELS to player.");
}
}