From 037e7acdde50a3c714dc122b340cd94f978b7746 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 11 Aug 2024 00:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0head=20seeker=20perk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/LivingEventHandler.java | 27 +++++++++++++++++++ .../mcreator/superbwarfare/init/ModPerks.java | 2 ++ .../superbwarfare/item/gun/GunItem.java | 6 ++++- .../assets/superbwarfare/lang/en_us.json | 2 ++ .../assets/superbwarfare/lang/zh_cn.json | 2 ++ 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index 7ef27e60b..adfb1a368 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -286,6 +286,10 @@ public class LivingEventHandler { handleKillingTallyDamage(stack, event); } + if (DamageTypeTool.isGunFireDamage(source)) { + handleHeadSeekerTime(stack); + } + if (source.getDirectEntity() instanceof ProjectileEntity projectile) { if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) { float bypassArmorRate = projectile.getBypassArmorRate(); @@ -300,6 +304,10 @@ public class LivingEventHandler { handleFieldDoctor(stack, event, attacker); } } + + if (DamageTypeTool.isGunHeadshotDamage(source)) { + handleHeadSeekerDamage(stack, event); + } } private static void handleGunPerksWhenDeath(LivingDeathEvent event) { @@ -443,4 +451,23 @@ public class LivingEventHandler { } } + private static void handleHeadSeekerTime(ItemStack stack) { + int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack); + if (level == 0) { + return; + } + + stack.getOrCreateTag().putInt("HeadSeeker", 11 + level * 2); + } + + private static void handleHeadSeekerDamage(ItemStack stack, LivingHurtEvent event) { + int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), stack); + if (level == 0) { + return; + } + + if (stack.getOrCreateTag().getInt("HeadSeeker") > 0) { + event.setAmount(event.getAmount() * (1.095f + 0.0225f * level)); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java index 101e8132c..fcb027963 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java @@ -56,8 +56,10 @@ public class ModPerks { public static final RegistryObject KILL_CLIP = DAMAGE_PERKS.register("kill_clip", () -> new Perk("kill_clip", Perk.Type.DAMAGE)); public static final RegistryObject GUTSHOT_STRAIGHT = DAMAGE_PERKS.register("gutshot_straight", () -> new Perk("gutshot_straight", Perk.Type.DAMAGE)); public static final RegistryObject KILLING_TALLY = DAMAGE_PERKS.register("killing_tally", () -> new Perk("killing_tally", Perk.Type.DAMAGE)); + public static final RegistryObject HEAD_SEEKER = DAMAGE_PERKS.register("head_seeker", () -> new Perk("head_seeker", Perk.Type.DAMAGE)); public static final RegistryObject MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE)); + public static void registerCompatPerks() { if (ModList.get().isLoaded(CompatHolder.DMV)) { AMMO_PERKS.register("blade_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("blade_bullet", Perk.Type.AMMO) diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 8053f8fc4..5f44dbee0 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -123,7 +123,7 @@ public abstract class GunItem extends Item { @Override public boolean isFoil(ItemStack stack) { - return stack.getOrCreateTag().getBoolean("beast"); + return false; } @SubscribeEvent @@ -176,6 +176,10 @@ public abstract class GunItem extends Item { stack.getOrCreateTag().putInt("ammo", Math.min(mag, stack.getOrCreateTag().getInt("ammo") + 2)); } } + + if (stack.getOrCreateTag().getInt("HeadSeeker") > 0) { + stack.getOrCreateTag().putInt("HeadSeeker", Math.max(0, stack.getOrCreateTag().getInt("HeadSeeker") - 1)); + } } public boolean canApplyPerk(ItemStack stack, Perk perk, Perk.Type slot) { diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index f68bb204c..d92a6bcc9 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -202,6 +202,8 @@ "des.superbwarfare.killing_tally": "Kill increases the weapon's damage until it is stowed or reloaded", "item.superbwarfare.gutshot_straight": "Gutshot Straight", "des.superbwarfare.gutshot_straight": "Aiming down sights increases body shot damage", + "item.superbwarfare.head_seeker": "Head Seeker", + "des.superbwarfare.head_seeker": "Body shots landed with this weapon increase precision damage for a short time", "perk.superbwarfare.tips": "[Perks]", "perk.superbwarfare.slot": "Type: ", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 9c15e03ab..54fdb724a 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -202,6 +202,8 @@ "des.superbwarfare.killing_tally": "完成击杀可提高此武器的伤害,效果持续至切换或填装武器", "item.superbwarfare.gutshot_straight": "直击要害", "des.superbwarfare.gutshot_straight": "瞄准时增加身体射击伤害", + "item.superbwarfare.head_seeker": "死亡寻觅者", + "des.superbwarfare.head_seeker": "使用此武器命中身体可在短时间内提高精准伤害", "perk.superbwarfare.tips": "[武器模组]", "perk.superbwarfare.slot": "类型: ",