/*******************************************************************************
* 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.datacontainer.traitholdercontainer.classes;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractHolderManager;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.AbstractTraitHolder;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.DefaultContainer;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.PlayerHolderAssociation;
import de.tobiyas.racesandclasses.eventprocessing.events.holderevent.HolderSelectedEvent;
import de.tobiyas.racesandclasses.eventprocessing.events.holderevent.classevent.AfterClassChangedEvent;
import de.tobiyas.racesandclasses.eventprocessing.events.holderevent.classevent.AfterClassSelectedEvent;
import de.tobiyas.racesandclasses.playermanagement.player.RaCPlayer;
import de.tobiyas.racesandclasses.saving.PlayerSavingData;
import de.tobiyas.racesandclasses.util.consts.Consts;
import de.tobiyas.util.config.YAMLConfigExtended;
public class ClassManager extends AbstractHolderManager{
public ClassManager(){
super(Consts.classesYML, "classes");
}
@Override
public void init() {
DefaultContainer.createSTDClasses();
super.init();
}
@Override
protected AbstractTraitHolder generateTraitHolder(
YAMLConfigExtended traitHolderConfig, String holderName) {
return ClassContainer.loadClass(traitHolderConfig, holderName);
}
@Override
protected String getConfigPrefix() {
return "class";
}
@Override
public AbstractTraitHolder getDefaultHolder() {
String className = plugin.getConfigManager().getGeneralConfig().getConfig_takeClassWhenNoClass();
if(className == null || className.isEmpty()) return null;
AbstractTraitHolder container = getHolderByName(className);
return container;
}
@Override
protected void initDefaultHolder() {
//not needed
}
@Override
public String getContainerTypeAsString() {
return "class";
}
@Override
protected String getCorrectFieldFromDBHolder(
PlayerHolderAssociation container) {
return container.getClassName();
}
@Override
protected void saveContainerToDBField(PlayerHolderAssociation container, String name) {
container.setClassName(name);
}
@Override
protected HolderSelectedEvent generateAfterSelectEvent(RaCPlayer player,
AbstractTraitHolder newHolder) {
return new AfterClassSelectedEvent(player.getPlayer(), (ClassContainer)newHolder);
}
@Override
protected HolderSelectedEvent generateAfterChangeEvent(RaCPlayer player,
AbstractTraitHolder newHolder, AbstractTraitHolder oldHolder) {
return new AfterClassChangedEvent(player.getPlayer(), (ClassContainer) newHolder, (ClassContainer) oldHolder);
}
@Override
protected AbstractTraitHolder getStartingHolder() {
String className = plugin.getConfigManager().getGeneralConfig().getConfig_takeClassWhenNoClass();
if(className == null || "".equals(className)){
return getDefaultHolder();
}
AbstractTraitHolder holder = getHolderByName(className);
return holder != null ? holder : getDefaultHolder();
}
@Override
protected AbstractTraitHolder getHolder(PlayerSavingData data) {
return getHolderByName(data.getClassName());
}
@Override
protected void saveToContainer(PlayerSavingData data, AbstractTraitHolder holder) {
data.setClassName(holder.getDisplayName());
}
}