private double baseDamage;
private double modifierMultiple;
private double repairMultiple;
private final double sharpnessExponent = 1.75;
private final double levelExponent = 1.3;
private final double infusionMultiple = 2.0;
public DamageProperties(DarkItem item) {
this.item = item;
// load base damage
if (item.getCustomDamage() > 0) {
this.baseDamage = (item.getCustomDamage());
} else {
if (item.getWeapon() != null) {
Weapon w = item.getWeapon();
this.baseDamage = (item.getItemType().getDamageModifier() * w.getDamage());
} else {
this.baseDamage = 0.5;
}
}
// get modifier multiple
this.modifierMultiple = (item.getModifier() != null ? item.getModifier().getDamageModifier() : 1);
this.repairMultiple = (item.isRepaired() ? 1.4 : item.isBlunt() ? 0.7 : 1);
}
public double getDamage() {
double damage = this.getBaseDamage();
damage += this.getModifierDamage();
damage += this.getSharpnessDamage();
damage += this.getRepairDamage();
damage += this.getInfusionDamage();
damage += this.getLevelsDamage();
return round(damage);
}
private double getLevelsDamage() {
double multiple = Math.pow(Math.floor(item.getLevel()/5.0)+1, 0.5);
return (this.getBaseDamage()*multiple)-this.getBaseDamage();
}
private double getInfusionDamage() {
int infusions = item.getInfusions();
return infusions * this.getInfusionMultiple();
}
private double getRepairDamage() {
return (this.getModifierDamage() * this.getRepairMultiple()) - this.getModifierDamage();
}
private double getSharpnessDamage() {
double sharpnessLevel = item.getEnchantmentLevel(Enchantment.SHARPNESS + item.getEnchantmentLevel(Enchantment.POWER) + item.getEnchantmentLevel(Enchantment.STRENGTH);
return Math.pow(sharpnessLevel, getSharpnessExponent());
}
private double getModifierDamage() {
return this.getBaseDamage() * getModifierMultiple();
}
public double getProtection() {
double protectionLevel = getEnchantmentLevel(Enchantment.PROTECTION) + 1;
double protModifier = 2.0;
double infusionMultiplier = 2.0;
double infusions = this.getInfusions();
if (this.isBlunt()) { protModifier = 1.8; } else if (this.isRepaired()) { protModifier = 2.2; }
if (this.getCustomProtection() > 0.0) {
return Math.round(((this.getCustomProtection() + (protectionLevel * protModifier)) + (infusions * infusionMultiplier)) * 100.0) / 100.0;
} else {
double baseProt = getBaseProtection(this.getItem().getType());
double protection = baseProt * getItemType().getProtectionModifier() * getModifier().getProtectionModifier() + (protectionLevel * protModifier) + (infusions * infusionMultiplier);
double rounding = protection * 100;
double finalProtection = Math.round(rounding) / 100.0;
return finalProtection;
}
}