添加维持生计perk

This commit is contained in:
17146 2024-08-10 14:23:50 +08:00
parent c021f4184f
commit 499c4e739c
5 changed files with 33 additions and 1 deletions

View file

@ -324,6 +324,7 @@ public class LivingEventHandler {
if (DamageTypeTool.isGunDamage(source)) { if (DamageTypeTool.isGunDamage(source)) {
handleKillingTallyAddCount(stack); handleKillingTallyAddCount(stack);
handleSubsistence(stack, attacker);
} }
} }
@ -388,7 +389,7 @@ public class LivingEventHandler {
int fourthTimesCharmTick = stack.getOrCreateTag().getInt("FourthTimesCharmTick"); int fourthTimesCharmTick = stack.getOrCreateTag().getInt("FourthTimesCharmTick");
if (fourthTimesCharmTick <= 0) { if (fourthTimesCharmTick <= 0) {
stack.getOrCreateTag().putInt("FourthTimesCharmTick", 60); stack.getOrCreateTag().putInt("FourthTimesCharmTick", 40 + 10 * level);
stack.getOrCreateTag().putInt("FourthTimesCharmCount", 1); stack.getOrCreateTag().putInt("FourthTimesCharmCount", 1);
} else { } else {
int count = stack.getOrCreateTag().getInt("FourthTimesCharmCount"); int count = stack.getOrCreateTag().getInt("FourthTimesCharmCount");
@ -398,4 +399,28 @@ public class LivingEventHandler {
} }
} }
private static void handleSubsistence(ItemStack stack, Player player) {
int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), stack);
if (level == 0) {
return;
}
float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.17f : 0f);
int mag = stack.getOrCreateTag().getInt("mag");
int ammoReload = (int) Math.min(mag, mag * rate);
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null)
.ifPresent(capability -> {
if (stack.is(ModTags.Items.RIFLE)) {
capability.rifleAmmo -= Math.min(capability.rifleAmmo, ammoReload);
} else if (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.HANDGUN)) {
capability.handgunAmmo -= Math.min(capability.handgunAmmo, ammoReload);
}
capability.syncPlayerVariables(player);
stack.getOrCreateTag().putInt("ammo", ammoReload);
}
);
}
} }

View file

@ -45,6 +45,7 @@ public class ModPerks {
public static final RegistryObject<Perk> HEAL_CLIP = FUNC_PERKS.register("heal_clip", () -> new Perk("heal_clip", Perk.Type.FUNCTIONAL)); public static final RegistryObject<Perk> HEAL_CLIP = FUNC_PERKS.register("heal_clip", () -> new Perk("heal_clip", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> FOURTH_TIMES_CHARM = FUNC_PERKS.register("fourth_times_charm", () -> new Perk("fourth_times_charm", Perk.Type.FUNCTIONAL)); public static final RegistryObject<Perk> FOURTH_TIMES_CHARM = FUNC_PERKS.register("fourth_times_charm", () -> new Perk("fourth_times_charm", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> SUBSISTENCE = FUNC_PERKS.register("subsistence", () -> new Perk("subsistence", Perk.Type.FUNCTIONAL));
/** /**
* Damage Perks * Damage Perks

View file

@ -10,11 +10,13 @@ public class ModTags {
public static class Items { public static class Items {
public static final TagKey<Item> GUN = tag("gun"); public static final TagKey<Item> GUN = tag("gun");
public static final TagKey<Item> HANDGUN = tag("handgun"); public static final TagKey<Item> HANDGUN = tag("handgun");
public static final TagKey<Item> RIFLE = tag("rifle"); public static final TagKey<Item> RIFLE = tag("rifle");
public static final TagKey<Item> SHOTGUN = tag("shotgun"); public static final TagKey<Item> SHOTGUN = tag("shotgun");
public static final TagKey<Item> SNIPER_RIFLE = tag("sniper_rifle"); public static final TagKey<Item> SNIPER_RIFLE = tag("sniper_rifle");
public static final TagKey<Item> SMG = tag("smg"); public static final TagKey<Item> SMG = tag("smg");
public static final TagKey<Item> NORMAL_GUN = tag("normal_gun"); public static final TagKey<Item> NORMAL_GUN = tag("normal_gun");
public static final TagKey<Item> LEGENDARY_GUN = tag("legendary_gun"); public static final TagKey<Item> LEGENDARY_GUN = tag("legendary_gun");
public static final TagKey<Item> SPECIAL_GUN = tag("special_gun"); public static final TagKey<Item> SPECIAL_GUN = tag("special_gun");

View file

@ -191,6 +191,8 @@
"des.superbwarfare.heal_clip": "Reloading after dealing a final blow will heal you and your nearby allies", "des.superbwarfare.heal_clip": "Reloading after dealing a final blow will heal you and your nearby allies",
"item.superbwarfare.fourth_times_charm": "Fourth Time's The Charm", "item.superbwarfare.fourth_times_charm": "Fourth Time's The Charm",
"des.superbwarfare.fourth_times_charm": "Rapidly landing precision hits will return two rounds to the magazine", "des.superbwarfare.fourth_times_charm": "Rapidly landing precision hits will return two rounds to the magazine",
"item.superbwarfare.subsistence": "Subsistence",
"des.superbwarfare.subsistence": "Defeating targets partially reloads the magazine from reserves",
"item.superbwarfare.kill_clip": "Kill Clip", "item.superbwarfare.kill_clip": "Kill Clip",
"des.superbwarfare.kill_clip": "Increases the damage of weapon after dealing a final blow", "des.superbwarfare.kill_clip": "Increases the damage of weapon after dealing a final blow",

View file

@ -191,6 +191,8 @@
"des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友", "des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友",
"item.superbwarfare.fourth_times_charm": "事不过四", "item.superbwarfare.fourth_times_charm": "事不过四",
"des.superbwarfare.fourth_times_charm": "快速精准命中目标会向弹匣中返还两枚弹药", "des.superbwarfare.fourth_times_charm": "快速精准命中目标会向弹匣中返还两枚弹药",
"item.superbwarfare.subsistence": "维持生计",
"des.superbwarfare.subsistence": "消灭目标会使弹药从备弹中转移并填装部分弹匣",
"item.superbwarfare.kill_clip": "杀戮弹匣", "item.superbwarfare.kill_clip": "杀戮弹匣",
"des.superbwarfare.kill_clip": "完成击杀后填装可提升武器伤害", "des.superbwarfare.kill_clip": "完成击杀后填装可提升武器伤害",