From cf49fc759922e44c5e509a6c5c3bbc0ffee31a2d Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sun, 31 Mar 2024 08:44:06 -0700 Subject: [PATCH] fix thrown tridents not getting XP or subskill benefits --- Changelog.txt | 3 ++ pom.xml | 2 +- .../nossr50/util/skills/CombatUtils.java | 49 +++++++++++++++++-- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 6ed5ad53d..e6f576aa7 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,6 @@ +Version 2.2.002 + Fixed bug where thrown tridents did not grant XP or benefit from subskills + Version 2.2.001 Fixed Crossbow's Powered shot showing the text for the wrong skill from the locale when using /crossbows command diff --git a/pom.xml b/pom.xml index 531e48828..e06a21b70 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.2.001 + 2.2.002-SNAPSHOT mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index 43e1d67fe..fd2d240c2 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -111,7 +111,7 @@ public final class CombatUtils { } } } - private static void processTridentCombat(@NotNull LivingEntity target, @NotNull Player player, @NotNull EntityDamageByEntityEvent event) { + private static void processTridentCombatMelee(@NotNull LivingEntity target, @NotNull Player player, @NotNull EntityDamageByEntityEvent event) { if (event.getCause() == DamageCause.THORNS) { return; } @@ -127,10 +127,40 @@ public final class CombatUtils { TridentsManager tridentsManager = mcMMOPlayer.getTridentsManager(); - if (tridentsManager.canActivateAbility()) { - mcMMOPlayer.checkAbilityActivation(PrimarySkillType.TRIDENTS); +// if (tridentsManager.canActivateAbility()) { +// mcMMOPlayer.checkAbilityActivation(PrimarySkillType.TRIDENTS); +// } + + if (SkillUtils.canUseSubskill(player, SubSkillType.TRIDENTS_IMPALE)) { + boostedDamage += (tridentsManager.impaleDamageBonus() * mcMMOPlayer.getAttackStrength()); } + if(canUseLimitBreak(player, target, SubSkillType.TRIDENTS_TRIDENTS_LIMIT_BREAK)) { + boostedDamage += (getLimitBreakDamage(player, target, SubSkillType.TRIDENTS_TRIDENTS_LIMIT_BREAK) * mcMMOPlayer.getAttackStrength()); + } + + event.setDamage(boostedDamage); + processCombatXP(mcMMOPlayer, target, PrimarySkillType.TRIDENTS); + + printFinalDamageDebug(player, event, mcMMOPlayer); + } + + private static void processTridentCombatRanged(@NotNull Trident trident, @NotNull LivingEntity target, @NotNull Player player, @NotNull EntityDamageByEntityEvent event) { + if (event.getCause() == DamageCause.THORNS) { + return; + } + + double boostedDamage = event.getDamage(); + + McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); + + //Make sure the profiles been loaded + if(mcMMOPlayer == null) { + return; + } + + TridentsManager tridentsManager = mcMMOPlayer.getTridentsManager(); + if (SkillUtils.canUseSubskill(player, SubSkillType.TRIDENTS_IMPALE)) { boostedDamage += (tridentsManager.impaleDamageBonus() * mcMMOPlayer.getAttackStrength()); } @@ -465,7 +495,7 @@ public final class CombatUtils { } if (mcMMO.p.getSkillTools().doesPlayerHaveSkillPermission(player, PrimarySkillType.TRIDENTS)) { - processTridentCombat(target, player, event); + processTridentCombatMelee(target, player, event); } } } @@ -481,6 +511,17 @@ public final class CombatUtils { } } } + else if (painSource instanceof Trident trident) { + ProjectileSource projectileSource = trident.getShooter(); + + if (projectileSource instanceof Player player) { + if (!Misc.isNPCEntityExcludingVillagers(player)) { + if(mcMMO.p.getSkillTools().canCombatSkillsTrigger(PrimarySkillType.TRIDENTS, target)) { + processTridentCombatRanged(trident, target, player, event); + } + } + } + } else if (painSource instanceof Arrow arrow) { ProjectileSource projectileSource = arrow.getShooter(); boolean isCrossbow = arrow.isShotFromCrossbow();