修复升级bug

This commit is contained in:
17146 2024-11-22 21:58:20 +08:00
parent 99353b20ea
commit 61157d28b2

View file

@ -69,7 +69,6 @@ public class LivingEventHandler {
handlePlayerKillEntity(event); handlePlayerKillEntity(event);
handlePlayerDeathDropAmmo(event.getEntity()); handlePlayerDeathDropAmmo(event.getEntity());
giveKillExpToWeapon(event); giveKillExpToWeapon(event);
} }
/** /**
@ -191,18 +190,31 @@ public class LivingEventHandler {
if (event.getEntity() instanceof TargetEntity) return; if (event.getEntity() instanceof TargetEntity) return;
double amount = 20 + 2 * event.getEntity().getMaxHealth(); double amount = 20 + 2 * event.getEntity().getMaxHealth();
var tag = stack.getOrCreateTag();
// 先处理发射器类武器或高爆弹的爆炸伤害 // 先处理发射器类武器或高爆弹的爆炸伤害
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) { if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) { if (stack.is(ModTags.Items.LAUNCHER) || PerkHelper.getItemPerkLevel(ModPerks.HE_BULLET.get(), stack) > 0) {
stack.getOrCreateTag().putDouble("Exp", stack.getOrCreateTag().getDouble("Exp") + amount); tag.putDouble("Exp", tag.getDouble("Exp") + amount);
} }
} }
// 再判断是不是枪械能造成的伤害 // 再判断是不是枪械能造成的伤害
if (!DamageTypeTool.isGunDamage(source)) return; if (DamageTypeTool.isGunDamage(source)) {
tag.putDouble("Exp", tag.getDouble("Exp") + amount);
}
stack.getOrCreateTag().putDouble("Exp", stack.getOrCreateTag().getDouble("Exp") + amount); // 提升武器等级
int level = tag.getInt("Level");
double exp = tag.getDouble("Exp");
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
while (exp >= upgradeExpNeeded) {
exp -= upgradeExpNeeded;
tag.putDouble("Exp", exp);
tag.putInt("Level", tag.getInt("Level") + 1);
tag.putDouble("UpgradePoint", tag.getDouble("UpgradePoint") + 0.5);
}
} }
private static void handleGunLevels(LivingHurtEvent event) { private static void handleGunLevels(LivingHurtEvent event) {
@ -215,13 +227,14 @@ public class LivingEventHandler {
if (event.getEntity() instanceof TargetEntity) return; if (event.getEntity() instanceof TargetEntity) return;
var tag = stack.getOrCreateTag(); var tag = stack.getOrCreateTag();
int level = stack.getOrCreateTag().getInt("Level"); int level = tag.getInt("Level");
double exp = stack.getOrCreateTag().getDouble("Exp"); double exp = tag.getDouble("Exp");
double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20;
if (exp >= upgradeExpNeeded) { while (exp >= upgradeExpNeeded) {
tag.putDouble("Exp", exp - upgradeExpNeeded); exp -= upgradeExpNeeded;
tag.putInt("Level", level + 1); tag.putDouble("Exp", exp);
tag.putInt("Level", tag.getInt("Level") + 1);
tag.putDouble("UpgradePoint", tag.getDouble("UpgradePoint") + 0.5); tag.putDouble("UpgradePoint", tag.getDouble("UpgradePoint") + 0.5);
} }
} }