Доброго утра, сегодня я хочу поделиться с вами проблемой, над решением которой бьюсь уже неделю.
Предыстория: Мы решили покопаться в моде ЛОТР, скачали мастер-src с русской википедии мода, и сразу же нашли несколько багов при запуске в Эклипсе. Если все остальные решить удалось, то вот последний - нет, а именно со свитками-модификаторами. Что это такое? Эти свитки накладывают определенный эффект на инструмент или оружие, например, если взять железный меч и дать ему модификатор +1 урона, то к урону железного меча накладывается еще один дамаг. Вроде бы все просто, но при просмотре кода самого модификатора ошибку найти не удалось.
Вот сам код модификатора.
Далее метод getBaseDamageBoost() вызывается методом calcBaseMeleeDamageBoost() в своем блоке инициализации:
Тот в свою очередь вызывается методом func_152377_a:
Который в свою очередь вызывается вот этим:
Может ли здесь быть ошибка, и это подтвердит мою теорию о том, что я просто слеп и глуп, или проблема гораздо глубже?
Всем неравнодушным спасибо за помощь.
Предыстория: Мы решили покопаться в моде ЛОТР, скачали мастер-src с русской википедии мода, и сразу же нашли несколько багов при запуске в Эклипсе. Если все остальные решить удалось, то вот последний - нет, а именно со свитками-модификаторами. Что это такое? Эти свитки накладывают определенный эффект на инструмент или оружие, например, если взять железный меч и дать ему модификатор +1 урона, то к урону железного меча накладывается еще один дамаг. Вроде бы все просто, но при просмотре кода самого модификатора ошибку найти не удалось.
Вот сам код модификатора.
Java:
public class LOTREnchantmentDamage extends LOTREnchantment {
private final float baseDamageBoost;
public LOTREnchantmentDamage(String s, float boost) {
super(s, new LOTREnchantmentType[] { LOTREnchantmentType.MELEE, LOTREnchantmentType.THROWING_AXE });
baseDamageBoost = boost;
//следующие два блока определяют количество материала для усовершенствования
if (baseDamageBoost >= 0.0f) {
setValueModifier((7.0f + baseDamageBoost * 5.0f) / 7.0f);
} else {
setValueModifier((7.0f + baseDamageBoost) / 7.0f);
}
}
public float getBaseDamageBoost() { //геттер для получение дамага модификатора
return baseDamageBoost;
}
public float getEntitySpecificDamage(EntityLivingBase entity) {
return 0.0f;
}
Далее метод getBaseDamageBoost() вызывается методом calcBaseMeleeDamageBoost() в своем блоке инициализации:
Java:
public static float calcBaseMeleeDamageBoost(ItemStack itemstack) {
float damage = 0.0f;
if (itemstack != null) {
List<LOTREnchantment> enchants = LOTREnchantmentHelper.getEnchantList(itemstack);
for (LOTREnchantment ench : enchants) {
if (!(ench instanceof LOTREnchantmentDamage)) {
continue;
}
damage += ((LOTREnchantmentDamage)ench).getBaseDamageBoost();
}
}
return damage;
}
Тот в свою очередь вызывается методом func_152377_a:
Java:
public static float func_152377_a(ItemStack itemstack, EnumCreatureAttribute creatureAttribute) {
return LOTREnchantmentHelper.calcBaseMeleeDamageBoost(itemstack);
}
Который в свою очередь вызывается вот этим:
Java:
public static float getMeleeDamageBonus(ItemStack itemstack) {
Multimap weaponAttributes;
float damage = 0.0f;
if (itemstack != null && (weaponAttributes = itemstack.getAttributeModifiers()) != null) {
for (Object obj : weaponAttributes.entries()) {
Map.Entry e = (Map.Entry) obj;
AttributeModifier mod = (AttributeModifier) e.getValue();
if (mod.getID() != LOTRItemSword.accessWeaponDamageModifier()) {
continue;
}
damage = (float)(damage + mod.getAmount());
damage += LOTRReplacedMethods.Enchants.func_152377_a(itemstack, EnumCreatureAttribute.UNDEFINED);
}
}
return damage;
}
Может ли здесь быть ошибка, и это подтвердит мою теорию о том, что я просто слеп и глуп, или проблема гораздо глубже?
Всем неравнодушным спасибо за помощь.