/*******************************************************************************
* 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.playermanagement;
import org.bukkit.ChatColor;
import org.bukkit.metadata.FixedMetadataValue;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.datacontainer.armorandtool.ArmorToolManager;
import de.tobiyas.racesandclasses.datacontainer.arrow.ArrowManager;
import de.tobiyas.racesandclasses.pets.PlayerPetManager;
import de.tobiyas.racesandclasses.playermanagement.health.HealthManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.PlayerLevelManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.manager.CustomPlayerLevelManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.manager.HeroesLevelManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.manager.MCPlayerLevelManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.manager.McMMOLevelManager;
import de.tobiyas.racesandclasses.playermanagement.leveling.manager.SkillAPILevelManager;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.playermanagement.playerdisplay.PlayerActionBarDisplay;
import de.tobiyas.racesandclasses.playermanagement.playerdisplay.scoreboard.PlayerRaCScoreboardManager;
import de.tobiyas.racesandclasses.playermanagement.skilltree.PlayerSkillTreeManager;
import de.tobiyas.racesandclasses.playermanagement.spellmanagement.PlayerSpellManager;
import de.tobiyas.racesandclasses.saving.PlayerSavingData;
import de.tobiyas.racesandclasses.saving.PlayerSavingManager;
public class PlayerContainer {
/**
* The plugin to get the managers from.
*/
private static RacesAndClasses plugin = RacesAndClasses.getPlugin();
/**
* The ArrowManager of the Player.
*/
private final ArrowManager arrowManager;
/**
* The Armor and Tool Manager of the Player
*/
private final ArmorToolManager armorToolManager;
/**
* The PetManager of the player.
*/
private final PlayerPetManager petManager;
/**
* The Name of the Player associated with this Container
*/
private final RaCPlayer player;
/**
* The health manager to use.
*/
protected final HealthManager healthManager;
/**
* The Spell Manager managing the Spells of the Player.
*/
private final PlayerSpellManager spellManager;
/**
* The Level Manager of the Player.
*/
private final PlayerLevelManager levelManager;
/**
* The Scoreboard manager for Scoreboards.
*/
private final PlayerRaCScoreboardManager playerScoreboardManager;
/**
* The Skill-Tree manager for the Player.
*/
private final PlayerSkillTreeManager playerSkillTreeManager;
/**
* The saving Container to use.
*/
private final PlayerSavingData savingContainer;
/**
* The actionbar-Display to use.
*/
private final PlayerActionBarDisplay actionbarDisplay;
/**
* This constructor only sets the most important stuff.
* It is thought for converting and restoring from DB.
*
* THIS DOES NO RESCANNING!!! All is set to default! No extra stuff.
*
* @param player
*/
public PlayerContainer(RaCPlayer player){
this.player = player;
//Loads the Saving Container.
this.savingContainer = PlayerSavingManager.get().getPlayerData(player.getUniqueId());
this.armorToolManager = new ArmorToolManager(player);
this.arrowManager = new ArrowManager(player);
this.healthManager = new HealthManager(player);
this.playerScoreboardManager = new PlayerRaCScoreboardManager(player);
this.petManager = new PlayerPetManager(player);
this.playerSkillTreeManager = new PlayerSkillTreeManager(player, savingContainer);
this.actionbarDisplay = new PlayerActionBarDisplay(player);
//choose level manager.
switch(plugin.getConfigManager().getGeneralConfig().getConfig_useLevelSystem()){
case RacesAndClasses : this.levelManager = new CustomPlayerLevelManager(player, savingContainer); break;
case VanillaMC : this.levelManager = new MCPlayerLevelManager(player, savingContainer); break;
case SkillAPI : this.levelManager = new SkillAPILevelManager(player, savingContainer); break;
case mcMMO : this.levelManager = new McMMOLevelManager(player, savingContainer); break;
case Heroes : this.levelManager = new HeroesLevelManager(player, savingContainer); break;
//if none found (should not happen) the RaC level manager is used.
default: this.levelManager = new CustomPlayerLevelManager(player, savingContainer);
}
this.spellManager = new PlayerSpellManager(player);
}
/**
* Inits all managers.
*/
public void init(){
rescan();
}
public void rescan(){
if(player == null || !player.isOnline()) return;
arrowManager.rescanPlayer();
armorToolManager.rescanPermission();
armorToolManager.checkArmorNotValidEquiped();
healthManager.rescanPlayer();
spellManager.rescan();
levelManager.checkLevelChanged();
player.getPlayer().setMetadata("LEVEL", new FixedMetadataValue(plugin, levelManager.getCurrentLevel()));
}
/**
* This ticks the Container once per second.
*/
public void tick(){
//Tick the Managers:
levelManager.tick();
petManager.tick();
spellManager.tick();
//Display the Displays:
actionbarDisplay.display();
}
/**
* Returns the calculated Max Health of the player.
* @return
*/
public HealthManager getHealthManager(){
return healthManager;
}
/**
* Switches the God state of a player.
*/
public void switchGod(){
savingContainer.setGodMode(!savingContainer.isGodModeEnabled());
if(player != null && player.isOnline()){
if(savingContainer.isGodModeEnabled()){
player.sendMessage(ChatColor.GREEN + "God mode toggled.");
}else{
player.sendMessage(ChatColor.RED + "God mode removed.");
}
}
}
/**
* Returns the Arrow Manager
* @return
*/
public ArrowManager getArrowManager(){
return arrowManager;
}
/**
* Returns the Armor and Tool Permissions Manager
* @return
*/
public ArmorToolManager getArmorToolManager(){
return armorToolManager;
}
/**
* Returns if the player has god mode
*
* @return
*/
public boolean isGod() {
return this.savingContainer.isGodModeEnabled();
}
/**
* Gets the Saving Container.
* @return the saving Container.
*/
public PlayerSavingData getSavingData(){
return this.savingContainer;
}
/**
* Returns the Spell Manager of the Player.
*
* @return
*/
public PlayerSpellManager getSpellManager() {
return this.spellManager;
}
/**
* Returns the Score-board Manager for the Player.
*
* @return score-board Manager.
*/
public PlayerRaCScoreboardManager getPlayerScoreboardManager() {
return playerScoreboardManager;
}
/**
* Returns the LevelManager of the Player.
*
* @return
*/
public PlayerLevelManager getPlayerLevelManager() {
return this.levelManager;
}
/**
* Returns the PetManager of this player.
*/
public PlayerPetManager getPlayerPetManager() {
return this.petManager;
}
/**
* Retruns the ActionBar Display.
* @return the actionbar display.
*/
public PlayerActionBarDisplay getActionbarDisplay() {
return actionbarDisplay;
}
/**
* Clears everything in the Containers.
*/
public void shutdown(){
petManager.despawnAndClear();
}
/**
* Returns the SkillTree Manager
*/
public PlayerSkillTreeManager getSkillTreeManager() {
return playerSkillTreeManager;
}
}