/*******************************************************************************
* 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.racespawn;
import java.util.Collection;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
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.RaceAPI;
import de.tobiyas.racesandclasses.commands.AbstractCommand;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolder;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.race.RaceContainer;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager;
import de.tobiyas.racesandclasses.translation.languages.Keys;
import de.tobiyas.racesandclasses.util.consts.PermissionNode;
import de.tobiyas.util.autocomplete.AutoCompleteUtils;
import de.tobiyas.util.player.PlayerUtils;
public class CommandExecutor_RaceSpawn extends AbstractCommand {
private RacesAndClasses plugin;
public CommandExecutor_RaceSpawn(){
super("racespawn");
plugin = RacesAndClasses.getPlugin();
}
@Override
public boolean onInternalCommand(CommandSender sender, Command command,
String label, String[] args) {
if(!plugin.getConfigManager().getGeneralConfig().isConfig_enableRaceSpawn()){
LanguageAPI.sendTranslatedMessage(sender, Keys.something_disabled,
"value", "Race-Spawns");
return true;
}
//Console may send someone to his home.
if(sender == Bukkit.getConsoleSender() && args.length >= 1){
Player player = PlayerUtils.getPlayer(args[0]);
if(player == null) return true;
Location spawn = RaceAPI.getRaceSpawnOfPlayer(player);
if(spawn == null) return true;
player.teleport(spawn);
return true;
}
if(!(sender instanceof Player)) return false;
Player player = (Player) sender;
//to own spawn
if(args.length == 0){
if(!plugin.getPermissionManager().checkPermissions(sender, PermissionNode.raceSpawnUseOwn)) return true;
if(checkCooldown(player)) return true;
sendPlayerToOwnSpawn(player);
return true;
}
//setting spawn
if(args.length == 2){
if(args[0].equalsIgnoreCase("set")){
if(!plugin.getPermissionManager().checkPermissions(sender, PermissionNode.raceSpawnCreate)) return true;
String race = args[1];
RaceContainer container = RaceAPI.getRaceByName(race);
if(container == null){
LanguageAPI.sendTranslatedMessage(sender, Keys.race_not_exist, "race", race);
return true;
}
plugin.getAddinManager().getRaceSpawnManager().setRaceSpawn(race, player.getLocation());
LanguageAPI.sendTranslatedMessage(sender, Keys.race_spawn_created, "race", container.getDisplayName());
return true;
}
LanguageAPI.sendTranslatedMessage(player, Keys.wrong_command_use, "command", "/racespawn set <racename>");
return true;
}
//to other spawn
if(args.length == 1){
RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player);
AbstractTraitHolder holder = racPlayer.getRace();
String own = holder.getDisplayName();
String wanted = args[0];
if(checkCooldown(player)) return true;
if(own.equalsIgnoreCase(wanted)){
if(!plugin.getPermissionManager().checkPermissions(sender, PermissionNode.raceSpawnUseOwn)) return true;
sendPlayerToOwnSpawn(player);
return true;
}else{
if(!plugin.getPermissionManager().checkPermissions(sender, PermissionNode.raceSpawnUseOther)) return true;
sendPlayerToSpawn(player, wanted);
return true;
}
}
return true;
}
/**
* Checks if the player has cooldown.
*
* @param player to check
*
* @return true if has cooldown.
*/
private boolean checkCooldown(Player player){
int cooldown = plugin.getCooldownManager().stillHasCooldown(player.getName(), "command.racespawn");
if(cooldown > 0){
LanguageAPI.sendTranslatedMessage(player, Keys.cooldown_is_ready_in, "time", cooldown + " Seconds");
return true;
}
return false;
}
/**
* Sends the player to the spawn passed.
*
* @param player to send to spawn
* @param spawn to send to
*/
private boolean sendPlayerToSpawn(Player player, String spawn){
Location loc = plugin.getAddinManager().getRaceSpawnManager().getSpawnForRace(spawn);
if(loc == null){
LanguageAPI.sendTranslatedMessage(player, Keys.race_spawn_no_spawnpoint, "race", spawn);
return false;
}
player.teleport(loc);
int cooldownTime = plugin.getConfigManager().getGeneralConfig().getConfig_raceSpawnCooldown();
plugin.getCooldownManager().setCooldown(player.getName(), "command.racespawn", cooldownTime);
LanguageAPI.sendTranslatedMessage(player, Keys.race_spawn_teleport_success, "race", spawn);
return false;
}
/**
* Sends the player to the spawn passed.
*
* @param player to send to spawn
*
* @return if worked or not.
*/
private boolean sendPlayerToOwnSpawn(Player player){
RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player);
AbstractTraitHolder holder = racPlayer.getRace();
if(holder == null) return false;
return sendPlayerToSpawn(player, holder.getDisplayName());
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command,
String alias, String[] args) {
String raceStart = null;
Collection<String> raceNames = RaceAPI.getAllRaceNames();
if(args.length == 1) { raceStart = args[0]; raceNames.add("set"); }
if(args.length == 2 && args[0].equalsIgnoreCase("set")) raceStart = args[1];
if(raceStart != null)return AutoCompleteUtils.getAllNamesWith(raceNames, raceStart);
return super.onTabComplete(sender, command, alias, args);
}
}