From a5be6ea3fcd6baaa78aac410c5cba50f77761222 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 31 Jul 2024 19:15:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Kill=20Clip=E9=99=84=E9=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/enchantment/KillClip.java | 25 ++++++++++- .../superbwarfare/event/GunEventHandler.java | 11 +++++ .../event/LivingEventHandler.java | 43 +++++++++++++++++-- .../superbwarfare/init/ModEnchantments.java | 1 + .../superbwarfare/item/gun/GunItem.java | 4 ++ .../assets/superbwarfare/lang/en_us.json | 2 + .../assets/superbwarfare/lang/zh_cn.json | 2 + 7 files changed, 84 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java b/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java index 8b1b5e8ee..f83285c31 100644 --- a/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java @@ -1,4 +1,27 @@ package net.mcreator.superbwarfare.enchantment; -public class KillClip { +import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.enchantment.Enchantment; + +public class KillClip extends Enchantment { + + public KillClip() { + super(Rarity.UNCOMMON, EnchantmentCategoryTool.GUN, new EquipmentSlot[]{EquipmentSlot.MAINHAND}); + } + + @Override + public int getMaxLevel() { + return 2; + } + + @Override + public int getMinCost(int pLevel) { + return 20 + 3 * pLevel; + } + + @Override + public int getMaxCost(int pLevel) { + return getMinCost(pLevel) + 10; + } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 0333de7ca..707f6f268 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -65,6 +65,7 @@ public class GunEventHandler { } handleHealClip(player, stack); + handleKillClip(stack); } /** @@ -833,4 +834,14 @@ public class GunEventHandler { stack.getOrCreateTag().putInt("HealClipTime", 0); } } + + private static void handleKillClip(ItemStack stack) { + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILL_CLIP.get(), stack); + + int time = stack.getOrCreateTag().getInt("KillClipReloadTime"); + if (time > 0) { + stack.getOrCreateTag().putInt("KillClipTime", 90 + 10 * level); + stack.getOrCreateTag().putInt("KillClipReloadTime", 0); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index 902c59059..fa2f4adf5 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -38,6 +38,7 @@ public class LivingEventHandler { return; } + handleKillClipDamage(event); renderDamageIndicator(event); reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); } @@ -50,7 +51,7 @@ public class LivingEventHandler { killIndication(event.getSource().getEntity()); handlePlayerKillEntity(event); - handleHealClip(event); + handleClipEnchantments(event); } private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) { @@ -248,7 +249,7 @@ public class LivingEventHandler { } } - private static void handleHealClip(LivingDeathEvent event) { + private static void handleClipEnchantments(LivingDeathEvent event) { DamageSource source = event.getSource(); Player attacker = null; @@ -263,7 +264,9 @@ public class LivingEventHandler { return; } - if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) { + if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || + source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE) + || source.is(ModDamageTypes.PROJECTILE_BOOM)) { ItemStack stack = attacker.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) { return; @@ -273,6 +276,40 @@ public class LivingEventHandler { if (healClipLevel != 0) { stack.getOrCreateTag().putInt("HealClipTime", 80 + healClipLevel * 20); } + + int killClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILL_CLIP.get(), stack); + if (killClipLevel != 0) { + stack.getOrCreateTag().putInt("KillClipReloadTime", 80); + } + } + } + + private static void handleKillClipDamage(LivingHurtEvent event) { + DamageSource source = event.getSource(); + + Player attacker = null; + if (source.getEntity() instanceof Player player) { + attacker = player; + } + if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof Player player) { + attacker = player; + } + + if (attacker == null) { + return; + } + + if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || + source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE) + || source.is(ModDamageTypes.PROJECTILE_BOOM)) { + ItemStack stack = attacker.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) { + return; + } + + if (stack.getOrCreateTag().getInt("KillClipTime") > 0) { + event.setAmount(event.getAmount() * 1.25f); + } } } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java index d4ed41494..43e1a0ce7 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java @@ -17,4 +17,5 @@ public class ModEnchantments { public static final RegistryObject LONGER_WIRE = REGISTRY.register("longer_wire", LongerWire::new); public static final RegistryObject MONSTER_HUNTER = REGISTRY.register("monster_hunter", MonsterHunter::new); public static final RegistryObject HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new); + public static final RegistryObject KILL_CLIP = REGISTRY.register("kill_clip", KillClip::new); } 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 9b57a5978..8ee35aa96 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -91,6 +91,10 @@ public abstract class GunItem extends Item { itemstack.getOrCreateTag().putInt("HealClipTime", Math.max(0, itemstack.getOrCreateTag().getInt("HealClipTime") - 1)); } + if (itemstack.getOrCreateTag().getInt("KillClipReloadTime") > 0) { + itemstack.getOrCreateTag().putInt("KillClipReloadTime", Math.max(0, itemstack.getOrCreateTag().getInt("KillClipReloadTime") - 1)); + } + if (itemstack.getOrCreateTag().getInt("KillClipTime") > 0) { itemstack.getOrCreateTag().putInt("KillClipTime", Math.max(0, itemstack.getOrCreateTag().getInt("KillClipTime") - 1)); } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 2507a0b8e..52b46f670 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -241,6 +241,8 @@ "enchantment.superbwarfare.monster_hunter.desc": "Increases bullet damage against monsters", "enchantment.superbwarfare.heal_clip": "Heal Clip", "enchantment.superbwarfare.heal_clip.desc": "Reloading after dealing a final blow will heal you and your nearby allies", + "enchantment.superbwarfare.kill_clip": "Kill Clip", + "enchantment.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow", "des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s", "des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 63e6f9a0c..1b5f8ae4c 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -241,6 +241,8 @@ "enchantment.superbwarfare.monster_hunter.desc": "增加对怪物的子弹伤害", "enchantment.superbwarfare.heal_clip": "治疗弹匣", "enchantment.superbwarfare.heal_clip.desc": "最后一击后短时间内填装,可治疗自身和附近队友", + "enchantment.superbwarfare.kill_clip": "杀戮弹匣", + "enchantment.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害", "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", "des.superbwarfare.need_bolt_action": "【需要拉栓】",