From e10b227cce6a026816b5632c45380332916b4296 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 7 May 2025 21:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=AE=8F=E4=BC=9F=E4=B9=8B?= =?UTF-8?q?=E5=9A=8Eperk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/LivingEventHandler.java | 2 +- .../superbwarfare/init/ModPerks.java | 1 + .../superbwarfare/init/ModVillagers.java | 2 + .../perk/damage/MagnificentHowl.java | 45 +++++++++++++++++++ .../assets/superbwarfare/lang/en_us.json | 6 ++- .../assets/superbwarfare/lang/zh_cn.json | 6 ++- .../data/superbwarfare/guns/k_98.json | 1 + .../data/superbwarfare/guns/marlin.json | 1 + .../data/superbwarfare/guns/sks.json | 2 +- .../data/superbwarfare/guns/trachelium.json | 1 + 10 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/perk/damage/MagnificentHowl.java diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index b07f10802..238e3eaef 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -493,8 +493,8 @@ public class LivingEventHandler { for (Perk.Type type : Perk.Type.values()) { var instance = data.perk.getInstance(type); if (instance != null) { - instance.perk().onHit(damage, data, instance, event.getEntity(), source); damage = instance.perk().getModifiedDamage(damage, data, instance, event.getEntity(), source); + instance.perk().onHit(damage, data, instance, event.getEntity(), source); if (instance.perk().shouldCancelHurtEvent(damage, data, instance, event.getEntity(), source)) { event.setCanceled(true); return; diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java index 64cbac8a7..a9b35311a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java @@ -72,6 +72,7 @@ public class ModPerks { public static final DeferredHolder VOLT_OVERLOAD = DAMAGE_PERKS.register("volt_overload", VoltOverload::new); public static final DeferredHolder DESPERADO = DAMAGE_PERKS.register("desperado", Desperado::new); public static final DeferredHolder VORPAL_WEAPON = DAMAGE_PERKS.register("vorpal_weapon", VorpalWeapon::new); + public static final DeferredHolder MAGNIFICENT_HOWL = DAMAGE_PERKS.register("magnificent_howl", MagnificentHowl::new); // public static void registerCompatPerks() { // if (ModList.get().isLoaded(CompatHolder.DMV)) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java index 5c0bd2810..cebfd823f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java @@ -207,6 +207,8 @@ public class ModVillagers { new ItemStack(getItemHolder("monster_hunter"), 1), 4, 25, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 40), new ItemStack(getItemHolder("vorpal_weapon"), 1), 4, 25, 0.05f)); + trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 42), + new ItemStack(getItemHolder("magnificent_howl"), 1), 4, 25, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 64), new ItemStack(ModItems.HUNTING_RIFLE_BLUEPRINT.get()), 10, 30, 0.05f)); diff --git a/src/main/java/com/atsuishio/superbwarfare/perk/damage/MagnificentHowl.java b/src/main/java/com/atsuishio/superbwarfare/perk/damage/MagnificentHowl.java new file mode 100644 index 000000000..8dc83f210 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/perk/damage/MagnificentHowl.java @@ -0,0 +1,45 @@ +package com.atsuishio.superbwarfare.perk.damage; + +import com.atsuishio.superbwarfare.item.gun.data.GunData; +import com.atsuishio.superbwarfare.perk.Perk; +import com.atsuishio.superbwarfare.perk.PerkInstance; +import com.atsuishio.superbwarfare.tools.DamageTypeTool; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +import org.jetbrains.annotations.Nullable; + +public class MagnificentHowl extends Perk { + + public MagnificentHowl() { + super("magnificent_howl", Perk.Type.DAMAGE); + } + + @Override + public void onKill(GunData data, PerkInstance instance, LivingEntity target, DamageSource source) { + if (DamageTypeTool.isHeadshotDamage(source)) { + data.perk.getTag(this).putInt("MagnificentHowlCount", + Math.min(data.perk.getTag(this).getInt("MagnificentHowlCount") + 1 + instance.level() / 5, 9 + instance.level())); + } + } + + @Override + public void preReload(GunData data, PerkInstance instance, @Nullable LivingEntity living) { + data.perk.getTag(this).putInt("MagnificentHowlDamageCount", data.perk.getTag(this).getInt("MagnificentHowlCount")); + data.perk.getTag(this).remove("MagnificentHowlCount"); + } + + @Override + public void onHit(float damage, GunData data, PerkInstance instance, LivingEntity target, DamageSource source) { + if (data.perk.getTag(this).getInt("MagnificentHowlDamageCount") > 0) { + data.perk.reduceCooldown(this, "MagnificentHowlDamageCount"); + } + } + + @Override + public float getModifiedDamage(float damage, GunData data, PerkInstance instance, @Nullable LivingEntity target, DamageSource source) { + if (data.perk.getTag(this).getInt("MagnificentHowlDamageCount") > 0) { + return damage * 1.5f; + } + return super.getModifiedDamage(damage, data, instance, target, source); + } +} diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 328ab8ede..fbaff46a9 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -322,6 +322,8 @@ "des.superbwarfare.butterfly_bullet": "Replace fired bullets with Rain Shower Butterflies.", "item.superbwarfare.bread_bullet": "Bread Bullet", "des.superbwarfare.bread_bullet": "Deals extreme knockback and slowness to stuck mobs.", + "item.superbwarfare.micro_missile": "Micro Missile", + "des.superbwarfare.micro_missile": "Fires a high-speed projectile without gravity.", "item.superbwarfare.heal_clip": "Heal Clip", "des.superbwarfare.heal_clip": "Reloading after defeating a mob will heal you and your nearby allies.", @@ -356,8 +358,8 @@ "des.superbwarfare.desperado": "Reload after a headshot-kill will increase rate of fire.", "item.superbwarfare.vorpal_weapon": "Vorpal Weapon", "des.superbwarfare.vorpal_weapon": "Increases damage against bosses.", - "item.superbwarfare.micro_missile": "Micro Missile", - "des.superbwarfare.micro_missile": "Fires a high-speed projectile without gravity", + "item.superbwarfare.magnificent_howl": "Magnificent Howl", + "des.superbwarfare.magnificent_howl": "The number of precision final blows before reloading affects the total rounds granted with increased damage.", "item.superbwarfare.empty_perk": "Empty Perk", "item.superbwarfare.shortcut_pack": "Shortcut Pack", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index dcccb7532..dd496c02f 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -320,6 +320,8 @@ "des.superbwarfare.butterfly_bullet": "将子弹替换成骤雨之蝶", "item.superbwarfare.bread_bullet": "面包弹", "des.superbwarfare.bread_bullet": "命中后会使目标移速下降,并造成强大的击退", + "item.superbwarfare.micro_missile": "微型导弹", + "des.superbwarfare.micro_missile": "使武器发射无视重力前进的高速弹药", "item.superbwarfare.heal_clip": "治疗弹匣", "des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友", @@ -354,8 +356,8 @@ "des.superbwarfare.desperado": "精准击杀后进行换弹,可暂时提升射速", "item.superbwarfare.vorpal_weapon": "斩首武器", "des.superbwarfare.vorpal_weapon": "提升对强大敌人造成的伤害", - "item.superbwarfare.micro_missile": "微型导弹", - "des.superbwarfare.micro_missile": "使武器发射无视重力前进的高速弹药", + "item.superbwarfare.magnificent_howl": "宏伟之嚎", + "des.superbwarfare.magnificent_howl": "填装前精准最后一击的次数会影响伤害增加的子弹总数", "item.superbwarfare.empty_perk": "空白模组", "item.superbwarfare.shortcut_pack": "捷径包", diff --git a/src/main/resources/data/superbwarfare/guns/k_98.json b/src/main/resources/data/superbwarfare/guns/k_98.json index 6c2f3824e..7e603fa54 100644 --- a/src/main/resources/data/superbwarfare/guns/k_98.json +++ b/src/main/resources/data/superbwarfare/guns/k_98.json @@ -26,6 +26,7 @@ "superbwarfare:kill_clip", "superbwarfare:monster_hunter", "superbwarfare:vorpal_weapon", + "superbwarfare:magnificent_howl", "!superbwarfare:micro_missile", "!superbwarfare:longer_wire", "!superbwarfare:butterfly_bullet" diff --git a/src/main/resources/data/superbwarfare/guns/marlin.json b/src/main/resources/data/superbwarfare/guns/marlin.json index 5e6d6eca7..22dfa0fb0 100644 --- a/src/main/resources/data/superbwarfare/guns/marlin.json +++ b/src/main/resources/data/superbwarfare/guns/marlin.json @@ -28,6 +28,7 @@ "superbwarfare:head_seeker", "superbwarfare:desperado", "superbwarfare:vorpal_weapon", + "superbwarfare:magnificent_howl", "!superbwarfare:micro_missile", "!superbwarfare:longer_wire" ] diff --git a/src/main/resources/data/superbwarfare/guns/sks.json b/src/main/resources/data/superbwarfare/guns/sks.json index a37527afd..6ef0bc46a 100644 --- a/src/main/resources/data/superbwarfare/guns/sks.json +++ b/src/main/resources/data/superbwarfare/guns/sks.json @@ -25,8 +25,8 @@ "superbwarfare:gutshot_straight", "superbwarfare:monster_hunter", "superbwarfare:head_seeker", - "superbwarfare:desperado", "superbwarfare:vorpal_weapon", + "superbwarfare:magnificent_howl", "!superbwarfare:micro_missile", "!superbwarfare:longer_wire" ] diff --git a/src/main/resources/data/superbwarfare/guns/trachelium.json b/src/main/resources/data/superbwarfare/guns/trachelium.json index e8b994ce8..216dbe7e2 100644 --- a/src/main/resources/data/superbwarfare/guns/trachelium.json +++ b/src/main/resources/data/superbwarfare/guns/trachelium.json @@ -25,6 +25,7 @@ "superbwarfare:gutshot_straight", "superbwarfare:monster_hunter", "superbwarfare:vorpal_weapon", + "superbwarfare:magnificent_howl", "!superbwarfare:micro_missile", "!superbwarfare:longer_wire", "!superbwarfare:butterfly_bullet"