Files
Wurm-Armoury/src/main/java/mod/sin/armoury/ArmouryModMain.java
2018-09-21 03:29:09 -04:00

330 lines
21 KiB
Java

package mod.sin.armoury;
import com.wurmonline.server.items.Materials;
import mod.sin.lib.Prop;
import org.gotti.wurmunlimited.modloader.interfaces.*;
import java.util.HashMap;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ArmouryModMain
implements WurmServerMod, Configurable, PreInitable, ItemTemplatesCreatedListener, ServerStartedListener {
public static Logger logger = Logger.getLogger(ArmouryModMain.class.getName());
// Configuration options
public static boolean enableNonPlayerCrits = true;
// - Shield configuration -- //
public static boolean enableShieldDamageEnchants = true;
public static boolean enableShieldSpeedEnchants = true;
// -- Weapon configuration -- //
public static float minimumSwingTime = 3.0f;
public static boolean raresReduceSwingTime = true;
public static float rareSwingSpeedReduction = 0.2f;
public static boolean fixSavedSwingTimer = true;
public static boolean betterDualWield = true; // HIGHLY EXPERIMENTAL
public static boolean enableWeaponMaterialChanges = true;
public static boolean enableItemMaterialChanges = true;
// Weapon variable changes
public static HashMap<Integer, Float> weaponDamage = new HashMap<>();
public static HashMap<Integer, Float> weaponSpeed = new HashMap<>();
public static HashMap<Integer, Float> weaponCritChance = new HashMap<>();
public static HashMap<Integer, Integer> weaponReach = new HashMap<>();
public static HashMap<Integer, Integer> weaponWeightGroup = new HashMap<>();
public static HashMap<Integer, Float> weaponParryPercent = new HashMap<>();
public static HashMap<Integer, Double> weaponSkillPenalty = new HashMap<>();
public static byte parseMaterialType(String str){
byte mat = Materials.convertMaterialStringIntoByte(str);
if(mat > 0){
return mat;
}
return Byte.parseByte(str);
}
@Override
public void configure(Properties properties) {
logger.info("Beginning configuration...");
Prop.properties = properties;
// Initialization sequences
MaterialTweaks.initializeMaterialMaps();
WeaponTweaks.initializeWeaponMaps();
// Base configuration options
enableNonPlayerCrits = Prop.getBooleanProperty("enableNonPlayerCrits", enableNonPlayerCrits);
/*if(enableArmourModifications){
ArmourTweaks.configure();
}*/
//adamantineMaterialMod = Float.parseFloat(properties.getProperty("adamantineMaterialMod", Float.toString(adamantineMaterialMod)));
//glimmersteelMaterialMod = Float.parseFloat(properties.getProperty("glimmersteelMaterialMod", Float.toString(glimmersteelMaterialMod)));
//seryllMaterialMod = Float.parseFloat(properties.getProperty("seryllMaterialMod", Float.toString(seryllMaterialMod)));
// Shield configuration
enableShieldDamageEnchants = Boolean.parseBoolean(properties.getProperty("enableShieldDamageEnchants", Boolean.toString(enableShieldDamageEnchants)));
// Weapon configuration
minimumSwingTime = Float.parseFloat(properties.getProperty("minimumSwingTime", Float.toString(minimumSwingTime)));
raresReduceSwingTime = Boolean.parseBoolean(properties.getProperty("raresReduceSwingTime", Boolean.toString(raresReduceSwingTime)));
rareSwingSpeedReduction = Float.parseFloat(properties.getProperty("rareSwingSpeedReduction", Float.toString(rareSwingSpeedReduction)));
fixSavedSwingTimer = Boolean.parseBoolean(properties.getProperty("fixSavedSwingTimer", Boolean.toString(fixSavedSwingTimer)));
betterDualWield = Boolean.parseBoolean(properties.getProperty("betterDualWield", Boolean.toString(betterDualWield)));
enableWeaponMaterialChanges = Prop.getBooleanProperty("enableWeaponMaterialChanges", enableWeaponMaterialChanges);
enableItemMaterialChanges = Prop.getBooleanProperty("enableItemMaterialChanges", enableItemMaterialChanges);
for (String name : properties.stringPropertyNames()) {
try {
String value = properties.getProperty(name);
switch (name) {
case "debug":
case "classname":
case "classpath":
case "sharedClassLoader":
case "depend.import":
case "depend.suggests":
break; //ignore
default:
if (name.startsWith("materialWeaponDamage")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
double mult = Double.parseDouble(split[1]);
WeaponTweaks.addMaterialWeaponDamage(material, mult);
} else if (name.startsWith("materialWeaponSpeed")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
WeaponTweaks.addMaterialWeaponSpeed(material, mult);
} else if (name.startsWith("materialWeaponParry")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
WeaponTweaks.addMaterialWeaponParry(material, mult);
} else if (name.startsWith("materialWeaponArmourDamage")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
double mult = Double.parseDouble(split[1]);
WeaponTweaks.addMaterialWeaponArmourDamage(material, mult);
} else if (name.startsWith("materialDamageModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialDamageModifier(material, mult);
} else if (name.startsWith("materialDecayModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialDecayModifier(material, mult);
} else if (name.startsWith("materialCreationBonus")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float bonus = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialCreationBonus(material, bonus);
} else if (name.startsWith("materialImproveBonus")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float bonus = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialImproveBonus(material, bonus);
} else if (name.startsWith("materialShatterResistance")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float resistance = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialShatterResistance(material, resistance);
} else if (name.startsWith("materialLockpickBonus")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float bonus = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialLockpickBonus(material, bonus);
} else if (name.startsWith("materialAnchorBonus")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float bonus = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialAnchorBonus(material, bonus);
} else if (name.startsWith("materialPendulumEffect")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float bonus = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialPendulumEffect(material, bonus);
} else if (name.startsWith("materialRepairSpeed")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialRepairSpeed(material, mult);
} else if (name.startsWith("materialBashModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
double mult = Double.parseDouble(split[1]);
MaterialTweaks.addMaterialBashModifier(material, mult);
} else if (name.startsWith("materialSpellEffectModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
float mult = Float.parseFloat(split[1]);
MaterialTweaks.addMaterialSpellEffectModifier(material, mult);
} else if (name.startsWith("materialSpecificSpellEffectModifier")) {
String[] split = value.split(";");
byte material = parseMaterialType(split[0]);
String[] split2 = split[1].split(",");
MaterialTweaks.addMaterialSpecificSpellEffectModifier(material, split2);
} else if (name.startsWith("materialDifficultyModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
double mult = Double.parseDouble(split[1]);
MaterialTweaks.addMaterialDifficultyModifier(material, mult);
} else if (name.startsWith("materialActionSpeedModifier")) {
String[] split = value.split(",");
byte material = parseMaterialType(split[0]);
double mult = Double.parseDouble(split[1]);
MaterialTweaks.addMaterialActionSpeedModifier(material, mult);
} else if (name.startsWith("weaponDamage")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
float newVal = Float.parseFloat(split[1]);
weaponDamage.put(weaponId, newVal);
} else if (name.startsWith("weaponSpeed")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
float newVal = Float.parseFloat(split[1]);
weaponSpeed.put(weaponId, newVal);
} else if (name.startsWith("weaponCritChance")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
float newVal = Float.parseFloat(split[1]);
weaponCritChance.put(weaponId, newVal);
} else if (name.startsWith("weaponReach")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
int newVal = Integer.parseInt(split[1]);
weaponReach.put(weaponId, newVal);
} else if (name.startsWith("weaponWeightGroup")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
int newVal = Integer.parseInt(split[1]);
weaponWeightGroup.put(weaponId, newVal);
} else if (name.startsWith("weaponParryPercent")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
float newVal = Float.parseFloat(split[1]);
weaponParryPercent.put(weaponId, newVal);
} else if (name.startsWith("weaponSkillPenalty")) {
String[] split = value.split(",");
int weaponId = Integer.parseInt(split[0]);
double newVal = Double.parseDouble(split[1]);
weaponSkillPenalty.put(weaponId, newVal);
} else {
logger.warning("Unknown config property: " + name);
}
}
} catch (Exception e) {
logger.severe("Error processing property " + name);
e.printStackTrace();
}
}
// Print values of main.java.armoury.mod configuration
logger.info(" -- Mod Configuration -- ");
logger.log(Level.INFO, "enableNonPlayerCrits: " + enableNonPlayerCrits);
logger.info(" -- Material Configuration -- ");
logger.info("> Weapon Material Damage Settings <");
for(byte material : WeaponTweaks.materialWeaponDamage.keySet()){
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponDamage.get(material)*100f));
}
logger.info("> Weapon Material Speed Settings <");
for(byte material : WeaponTweaks.materialWeaponSpeed.keySet()){
logger.info(String.format("Speed modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponSpeed.get(material)*100f));
}
logger.info("> Weapon Material Parry Settings <");
for(byte material : WeaponTweaks.materialWeaponParry.keySet()){
logger.info(String.format("Parry modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponParry.get(material)*100f));
}
logger.info("> Weapon Material Armour Damage Settings <");
for(byte material : WeaponTweaks.materialWeaponArmourDamage.keySet()){
logger.info(String.format("Armour Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), WeaponTweaks.materialWeaponArmourDamage.get(material)*100f));
}
logger.info("> Item Material Damage Modifier Settings <");
for(byte material : MaterialTweaks.materialDamageModifier.keySet()){
logger.info(String.format("Damage modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDamageModifier.get(material)*100f));
}
logger.info("> Item Material Decay Modifier Settings <");
for(byte material : MaterialTweaks.materialDecayModifier.keySet()){
logger.info(String.format("Decay modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDecayModifier.get(material)*100f));
}
logger.info("> Item Material Creation Bonus Settings <");
for(byte material : MaterialTweaks.materialCreationBonus.keySet()){
logger.info(String.format("Creation bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialCreationBonus.get(material)*100f));
}
logger.info("> Item Material Improve Bonus Settings <");
for(byte material : MaterialTweaks.materialImproveBonus.keySet()){
logger.info(String.format("Improve bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialImproveBonus.get(material)*100f));
}
logger.info("> Item Material Shatter Resistance Settings <");
for(byte material : MaterialTweaks.materialShatterResistance.keySet()){
logger.info(String.format("Shatter resistance for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialShatterResistance.get(material)*100f));
}
logger.info("> Item Material Lockpick Bonus Settings <");
for(byte material : MaterialTweaks.materialLockpickBonus.keySet()){
logger.info(String.format("Lockpick bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialLockpickBonus.get(material)*100f));
}
logger.info("> Item Material Anchor Bonus Settings <");
for(byte material : MaterialTweaks.materialAnchorBonus.keySet()){
logger.info(String.format("Anchor bonus for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialAnchorBonus.get(material)*100f));
}
logger.info("> Item Material Pendulum Effect Settings <");
for(byte material : MaterialTweaks.materialPendulumEffect.keySet()){
logger.info(String.format("Pendulum effect for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialPendulumEffect.get(material)*100f));
}
logger.info("> Item Material Repair Speed Settings <");
for(byte material : MaterialTweaks.materialRepairSpeed.keySet()){
logger.info(String.format("Repair speed for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialRepairSpeed.get(material)*100f));
}
logger.info("> Item Material Bash Modifier Settings <");
for(byte material : MaterialTweaks.materialBashModifier.keySet()){
logger.info(String.format("Bash modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialBashModifier.get(material)*100f));
}
logger.info("> Item Material Spell Effect Modifier Settings <");
for(byte material : MaterialTweaks.materialSpellEffectModifier.keySet()){
logger.info(String.format("Spell effect modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialSpellEffectModifier.get(material)*100f));
}
logger.info("> Item Material Specific Spell Effect Modifier Settings <");
for(byte material : MaterialTweaks.materialSpecificSpellEffectModifier.keySet()){
//String name = materialNameReference.containsKey(material) ? materialNameReference.get(material) : String.valueOf(material);
HashMap<Byte, Float> enchantMap = MaterialTweaks.materialSpecificSpellEffectModifier.get(material);
for(byte enchant : enchantMap.keySet()){
logger.info(String.format("Spell Effect Power for material %s with enchant %s: %.2f%%", MaterialTweaks.getMaterialName(material), enchant, enchantMap.get(enchant)*100f));
}
}
logger.info("> Item Material Difficulty Modifier Settings <");
for(byte material : MaterialTweaks.materialDifficultyModifier.keySet()){
logger.info(String.format("Difficulty modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialDifficultyModifier.get(material)*100f));
}
logger.info("> Item Material Action Speed Modifier Settings <");
for(byte material : MaterialTweaks.materialActionSpeedModifier.keySet()){
logger.info(String.format("Action Speed modifier for material %s: %.2f%%", MaterialTweaks.getMaterialName(material), MaterialTweaks.materialActionSpeedModifier.get(material)*100f));
}
logger.info(" -- Shield Configuration -- ");
logger.log(Level.INFO, "enableShieldDamageEnchants: " + enableShieldDamageEnchants);
logger.info(" -- Weapon Configuration -- ");
logger.log(Level.INFO, "minimumSwingTime: " + minimumSwingTime);
logger.log(Level.INFO, "raresReduceSwingTime: " + raresReduceSwingTime);
logger.log(Level.INFO, "rareSwingSpeedReduction: " + rareSwingSpeedReduction);
logger.log(Level.INFO, "fixSavedSwingTimer: " + fixSavedSwingTimer);
logger.log(Level.INFO, "betterDualWield: " + betterDualWield);
logger.info(" -- Configuration complete -- ");
}
@Override
public void preInit(){
CombatTweaks.preInit();
ShieldTweaks.preInit();
WeaponTweaks.preInit();
MaterialTweaks.preInit();
}
@Override
public void onItemTemplatesCreated(){
logger.info("Beginning onItemTemplatesCreated...");
}
@Override
public void onServerStarted(){
WeaponTweaks.onServerStarted();
}
}