58 lines
2.3 KiB
Java
58 lines
2.3 KiB
Java
package com.atsuishio.superbwarfare.perk.functional;
|
|
|
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
|
import com.atsuishio.superbwarfare.init.ModDamageTypes;
|
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
|
import com.atsuishio.superbwarfare.perk.Perk;
|
|
import com.atsuishio.superbwarfare.perk.PerkInstance;
|
|
import net.minecraft.world.damagesource.DamageSource;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class FourthTimesCharm extends Perk {
|
|
|
|
public FourthTimesCharm() {
|
|
super("fourth_times_charm", Perk.Type.FUNCTIONAL);
|
|
}
|
|
|
|
@Override
|
|
public void tick(GunData data, PerkInstance instance, @Nullable LivingEntity living) {
|
|
data.perk.reduceCooldown(this, "FourthTimesCharmTick");
|
|
|
|
var tag = data.perk.getTag(this);
|
|
int count = tag.getInt("FourthTimesCharmCount");
|
|
|
|
if (count >= 4) {
|
|
tag.remove("FourthTimesCharmTick");
|
|
tag.remove("FourthTimesCharmCount");
|
|
|
|
int mag = data.magazine();
|
|
data.ammo.set(Math.min(mag, data.ammo.get() + 2));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onHit(float damage, GunData data, PerkInstance instance, LivingEntity target, DamageSource source) {
|
|
if (source.getDirectEntity() instanceof ProjectileEntity projectile) {
|
|
float bypassArmorRate = projectile.getBypassArmorRate();
|
|
if (bypassArmorRate >= 1.0f && source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)) {
|
|
handleFourthTimesCharm(data, instance);
|
|
} else if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
|
handleFourthTimesCharm(data, instance);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void handleFourthTimesCharm(GunData data, PerkInstance instance) {
|
|
int fourthTimesCharmTick = data.perk.getTag(this).getInt("FourthTimesCharmTick");
|
|
if (fourthTimesCharmTick <= 0) {
|
|
data.perk.getTag(this).putInt("FourthTimesCharmTick", 40 + 10 * instance.level());
|
|
data.perk.getTag(this).putInt("FourthTimesCharmCount", 1);
|
|
} else {
|
|
int count = data.perk.getTag(this).getInt("FourthTimesCharmCount");
|
|
if (count < 4) {
|
|
data.perk.getTag(this).putInt("FourthTimesCharmCount", Math.min(4, count + 1));
|
|
}
|
|
}
|
|
}
|
|
}
|