/*******************************************************************************
* 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.APIs;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.race.RaceContainer;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.race.RaceManager;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayerManager;
public class RaceAPI {
/**
* The plugin to get the RaceManager from
*/
private static RacesAndClasses plugin = RacesAndClasses.getPlugin();
/**
* Returns the Race of a player.
* If the player has no race, the Default race is returned.
*
* @param player to search
* @return the {@link RaceContainer} of the player
*
* @deprecated use {@link #getRaceOfPlayer(OfflinePlayer)} instead
*/
@Deprecated
public static RaceContainer getRaceOfPlayer(String playerName){
if(!isRaceSystemActive()) return null;
return getRaceOfPlayer(Bukkit.getPlayer(playerName));
}
/**
* Returns the Race of a player.
* If the player has no race, the Default race is returned.
*
* @param player to search
* @return the {@link RaceContainer} of the player
*/
public static RaceContainer getRaceOfPlayer(Player player){
if(!isRaceSystemActive()) return null;
RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player);
RaceManager raceManager = plugin.getRaceManager();
RaceContainer race = racPlayer.getRace();
if(race != null){
return race;
}else{
return (RaceContainer) raceManager.getDefaultHolder();
}
}
/**
* Returns the {@link RaceContainer} by the name.
* If the Race is not found, Null is returned.
*
* @param raceName to search
* @return the Race corresponding to the name
*/
public static RaceContainer getRaceByName(String raceName){
if(!isRaceSystemActive()) return null;
RaceManager raceManager = plugin.getRaceManager();
return (RaceContainer) raceManager.getHolderByName(raceName);
}
/**
* Returns the Race Name of a player.
* If the player has no Race, the Default Race is returned.
*
* @param player to search
*
* @return the {@link RaceContainer} of the player
*/
public static String getRaceNameOfPlayer(Player player){
if(!isRaceSystemActive()) return null;
RaceContainer container = getRaceOfPlayer(player);
return (container == null) ? "" : container.getDisplayName();
}
/**
* Returns a List of all Race names available
*
* @return list of Race names
*/
public static List<String> getAllRaceNames(){
if(!isRaceSystemActive()) return new ArrayList<>();
return plugin.getRaceManager().getAllHolderNames();
}
/**
* Gives the passed Player a Race.
* If he already has one, the Race is changed to the new one.
*
* Returns true on success,
* false if:
* - player can not be found on Bukkit.getPlayer(player).
* - the new raceName is not found.
* - any internal error occurs.
*
* @param player the player that the Race should be changed.
* @param className to change to
* @return true if worked, false otherwise
*
* @deprecated use {@link #addPlayerToRace(OfflinePlayer, String)} instead
*/
public static boolean addPlayerToRace(String playerName, String raceName){
if(!isRaceSystemActive()) return false;
return addPlayerToRace(Bukkit.getPlayer(playerName), raceName);
}
/**
* Returns the Default Race name.
* <br>Returns null if races are disabled!
*
* @return name of default race.
*/
public static String getDefaultRaceName(){
if(!isRaceSystemActive()) return null;
return plugin.getRaceManager().getDefaultHolder().getDisplayName();
}
/**
* Gives the passed Player a Race.
* If he already has one, the Race is changed to the new one.
*
* Returns true on success,
* false if:
* - player can not be found on Bukkit.getPlayer(player).
* - the new raceName is not found.
* - any internal error occurs.
*
* @param player the player that the Race should be changed.
* @param className to change to
* @return true if worked, false otherwise
*/
public static boolean addPlayerToRace(Player player, String raceName){
if(player == null) return false;
if(!isRaceSystemActive()) return false;
RaceManager manager = plugin.getRaceManager();
RaceContainer wantedRace = (RaceContainer) manager.getHolderByName(raceName);
if(wantedRace == null){
return false;
}
RaCPlayer racPlayer = RaCPlayerManager.get().getPlayer(player);
return manager.changePlayerHolder(racPlayer, raceName, true);
}
/**
* Gets the Location for the Race spawn.
* @param name race to get for.
* @return the Location or null if none present.
*/
public static Location getRaceSpawn(String name){
return RacesAndClasses.getPlugin().getAddinManager().getRaceSpawnManager().getSpawnForRace(name);
}
/**
* Gets the Location for the Race spawn of a player.
* @param player to get for.
* @return the Location or null if none present.
*/
public static Location getRaceSpawnOfPlayer(Player player){
RaceContainer container = getRaceOfPlayer(player);
return container == null ? null : getRaceSpawn(container.getDisplayName());
}
/**
* Gets the Location for the Race spawn.
* @param name race to get for.
* @return the Location or null if none present.
*/
public static void setRaceSpawn(String name, Location target){
RacesAndClasses.getPlugin().getAddinManager().getRaceSpawnManager().setRaceSpawn(name, target);
}
/**
* Returns if the Race system is used or if it is deactivated.
*
* @return true if used.
*/
public static boolean isRaceSystemActive(){
return plugin.getConfigManager().getGeneralConfig().isConfig_enableRaces();
}
}