diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/KillingTally.java b/src/main/java/net/mcreator/superbwarfare/enchantment/KillingTally.java new file mode 100644 index 000000000..6b17aebd1 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/KillingTally.java @@ -0,0 +1,39 @@ +package net.mcreator.superbwarfare.enchantment; + +import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; + +public class KillingTally extends Enchantment { + + public KillingTally() { + super(Rarity.VERY_RARE, EnchantmentCategoryTool.GUN, new EquipmentSlot[]{EquipmentSlot.MAINHAND}); + } + + @Override + public int getMaxLevel() { + return 2; + } + + @Override + public boolean isTreasureOnly() { + return true; + } + + @Override + public int getMinCost(int pLevel) { + return 23 + 3 * pLevel; + } + + @Override + public int getMaxCost(int pLevel) { + return getMinCost(pLevel) + 20; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack itemstack) { + return itemstack.is(ModTags.Items.CAN_SHOOT_BULLET); + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index f1ba8d9b0..bd0132253 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -39,9 +39,8 @@ public class LivingEventHandler { return; } - handleKillClipDamage(event); + handleGunEnchantmentsWhenHurt(event); renderDamageIndicator(event); - handleGutshotStraightDamage(event); reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); } @@ -52,8 +51,8 @@ public class LivingEventHandler { } killIndication(event.getSource().getEntity()); + handleGunEnchantmentsWhenDeath(event); handlePlayerKillEntity(event); - handleClipEnchantments(event); } private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) { @@ -201,6 +200,11 @@ public class LivingEventHandler { newStack.getOrCreateTag().putBoolean("sentinel_is_charging", false); newStack.getOrCreateTag().putInt("sentinel_charge_time", 0); + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), newStack); + if (level != 0) { + newStack.getOrCreateTag().putInt("KillingTally", 0); + } + double weight = newStack.getOrCreateTag().getDouble("weight"); if (weight == 0) { @@ -251,7 +255,7 @@ public class LivingEventHandler { } } - private static void handleClipEnchantments(LivingDeathEvent event) { + private static void handleGunEnchantmentsWhenHurt(LivingHurtEvent event) { DamageSource source = event.getSource(); Player attacker = null; @@ -266,27 +270,27 @@ public class LivingEventHandler { return; } + ItemStack stack = attacker.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) { + 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; - } + handleKillClipDamage(stack, event); + } - int healClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.HEAL_CLIP.get(), stack); - if (healClipLevel != 0) { - stack.getOrCreateTag().putInt("HealClipTime", 80 + healClipLevel * 20); - } + if (source.is(ModDamageTypes.GUN_FIRE) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) { + handleGutshotStraightDamage(stack, event); + } - int killClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILL_CLIP.get(), stack); - if (killClipLevel != 0) { - stack.getOrCreateTag().putInt("KillClipReloadTime", 80); - } + if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) { + handleKillingTallyDamage(stack, event); } } - private static void handleKillClipDamage(LivingHurtEvent event) { + private static void handleGunEnchantmentsWhenDeath(LivingDeathEvent event) { DamageSource source = event.getSource(); Player attacker = null; @@ -301,48 +305,73 @@ public class LivingEventHandler { 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) { - int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack); - if (enchantmentLevel == 0) { - return; - } - - event.setAmount(event.getAmount() * (1.2f + 0.05f * enchantmentLevel)); - } - } - } - - private static void handleGutshotStraightDamage(LivingHurtEvent event) { - DamageSource source = event.getSource(); - if (!source.is(ModDamageTypes.GUN_FIRE)) { + ItemStack stack = attacker.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) { return; } - Entity directSource = source.getDirectEntity(); - if (directSource instanceof ProjectileEntity projectile && projectile.getShooter() instanceof Player player) { - if (!projectile.isZoom()) { - 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)) { + handleClipEnchantments(stack); + } - ItemStack stack = player.getMainHandItem(); - if (!stack.is(ModTags.Items.GUN)) { - return; - } + if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) { + handleKillingTallyAddCount(stack); + } + } + private static void handleClipEnchantments(ItemStack stack) { + int healClipLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.HEAL_CLIP.get(), stack); + 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(ItemStack stack, LivingHurtEvent event) { + if (stack.getOrCreateTag().getInt("KillClipTime") > 0) { int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack); if (enchantmentLevel == 0) { return; } - event.setAmount(event.getAmount() * (1.15f + 0.05f * enchantmentLevel)); + event.setAmount(event.getAmount() * (1.2f + 0.05f * enchantmentLevel)); } } + + private static void handleGutshotStraightDamage(ItemStack stack, LivingHurtEvent event) { + int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack); + if (enchantmentLevel == 0) { + return; + } + + event.setAmount(event.getAmount() * (1.15f + 0.05f * enchantmentLevel)); + } + + private static void handleKillingTallyDamage(ItemStack stack, LivingHurtEvent event) { + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack); + if (level == 0) { + return; + } + + int killTally = stack.getOrCreateTag().getInt("KillingTally"); + if (killTally == 0) { + return; + } + + event.setAmount(event.getAmount() * (1.0f + (0.1f * level) * killTally)); + } + + private static void handleKillingTallyAddCount(ItemStack stack) { + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack); + if (level != 0) { + stack.getOrCreateTag().putInt("KillingTally", Math.min(3, stack.getOrCreateTag().getInt("KillingTally") + 1)); + } + } + } diff --git a/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java index 845c4d005..f78b4103e 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java @@ -28,6 +28,7 @@ public class ReloadEventHandler { handleHealClipPre(stack); handleKillClipPre(stack); + handleKillingTallyPre(stack); } @SubscribeEvent @@ -92,4 +93,14 @@ public class ReloadEventHandler { stack.getOrCreateTag().putInt("KillClipTime", 90 + 10 * level); } + private static void handleKillingTallyPre(ItemStack stack) { + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILLING_TALLY.get(), stack); + if (level == 0) { + return; + } + + if (stack.getOrCreateTag().contains("KillingTally")) { + stack.getOrCreateTag().putInt("KillingTally", 0); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java index 481067f5d..0b6497a6f 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java @@ -18,4 +18,5 @@ public class ModEnchantments { public static final RegistryObject HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new); public static final RegistryObject KILL_CLIP = REGISTRY.register("kill_clip", KillClip::new); public static final RegistryObject GUTSHOT_STRAIGHT = REGISTRY.register("gutshot_straight", GutshotStraight::new); + public static final RegistryObject KILLING_TALLY = REGISTRY.register("killing_tally", KillingTally::new); } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index e932b7cba..8be1c5a78 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -253,6 +253,8 @@ "enchantment.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow", "enchantment.superbwarfare.gutshot_straight": "Gutshot Straight", "enchantment.superbwarfare.gutshot_straight.desc": "Aiming down sights increases body shot damage", + "enchantment.superbwarfare.killing_tally": "Killing Tally", + "enchantment.superbwarfare.killing_tally.desc": "Kill increases the weapon's damage until it is stowed or reloaded", "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 20fa25378..bd6534953 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -253,6 +253,8 @@ "enchantment.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害", "enchantment.superbwarfare.gutshot_straight": "直击要害", "enchantment.superbwarfare.gutshot_straight.desc": "瞄准时增加身体射击伤害", + "enchantment.superbwarfare.killing_tally": "击杀记录", + "enchantment.superbwarfare.killing_tally.desc": "完成击杀可提高此武器的伤害,效果持续至切换或填装武器", "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", "des.superbwarfare.need_bolt_action": "【需要拉栓】",