package de.tobiyas.racesandclasses.traitcontainer.modifiers;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import de.tobiyas.racesandclasses.traitcontainer.modifiers.specific.BiomeModifier;
import de.tobiyas.racesandclasses.traitcontainer.modifiers.specific.EvaluationModifiers;
import de.tobiyas.racesandclasses.traitcontainer.modifiers.specific.LevelModifier;
import de.tobiyas.racesandclasses.traitcontainer.modifiers.specific.TimeModifier;
import de.tobiyas.racesandclasses.traitcontainer.modifiers.specific.WorldModifier;
public class ModifierFactory {
/**
* The Generator Map.
*/
private static Map<String,Class<? extends AbstractModifier>> modifierMap = new HashMap<String, Class<? extends AbstractModifier>>();
static{
modifierMap.put("biome", BiomeModifier.class);
modifierMap.put("eval", EvaluationModifiers.class);
modifierMap.put("level", LevelModifier.class);
modifierMap.put("time", TimeModifier.class);
modifierMap.put("world", WorldModifier.class);
}
/**
* This generates an Modifier from the Values passed.
*
* @param toParse the value to parse.
*
* @return the modifier or null if not parseable.
*/
public static TraitSituationModifier generate(String toParse){
String[] split = toParse.split(":");
if(split.length < 3) return null;
String type = split[0].toLowerCase();
String descriptor = split[1];
String mod = split[2];
String toUseOn = split.length <=3 ? "*" : split[3];
double parsedMod = 0;
try{ parsedMod = Double.parseDouble(mod); }catch(IllegalArgumentException exp){ return null; }
Class<? extends AbstractModifier> generator = modifierMap.get(type);
if(generator == null) return null;
try{
Method method = generator.getMethod("generate", String.class, Double.class, String.class);
return (TraitSituationModifier) method.invoke(null, descriptor, parsedMod, toUseOn);
}catch(Throwable exp){
//not parseable.
return null;
}
}
}