From a83d198df03b9b6c1aa43621cea072290d0db3b0 Mon Sep 17 00:00:00 2001 From: Travja Date: Thu, 20 Feb 2025 22:05:08 -0700 Subject: [PATCH] Make sure divinity damages done via Fabled actually get scaled properly --- .../api/event/DivinityDamageEvent.java | 21 +++++++++++++++++++ .../manager/damage/DamageManager.java | 2 +- .../object/VanillaWrapperListener.java | 14 +++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/studio/magemonkey/divinity/api/event/DivinityDamageEvent.java b/src/main/java/studio/magemonkey/divinity/api/event/DivinityDamageEvent.java index 82eadc71..fe2d9d7c 100644 --- a/src/main/java/studio/magemonkey/divinity/api/event/DivinityDamageEvent.java +++ b/src/main/java/studio/magemonkey/divinity/api/event/DivinityDamageEvent.java @@ -217,6 +217,27 @@ public Start( } } + public static class BeforeScale extends DivinityDamageEvent { + + public BeforeScale( + @NotNull LivingEntity zertva, + @Nullable LivingEntity damager, + @Nullable Projectile projectile, + @NotNull Map damageMap, + @NotNull Map defenseMap, + @NotNull Map statsMap, + @NotNull EntityDamageEvent eventOrig, + @NotNull DamageMeta meta, + boolean exempt + ) { + super(zertva, damager, projectile, eventOrig, meta); + this.damageMap = damageMap; + this.defenseMap = defenseMap; + this.damagerItemStatsMap = statsMap; + this.exempt = exempt; + } + } + /** * Called at the start of Damage Event, before damage calculations. * This is the second QuantumDamageEvent instance. diff --git a/src/main/java/studio/magemonkey/divinity/manager/damage/DamageManager.java b/src/main/java/studio/magemonkey/divinity/manager/damage/DamageManager.java index ae2151df..2b604c34 100644 --- a/src/main/java/studio/magemonkey/divinity/manager/damage/DamageManager.java +++ b/src/main/java/studio/magemonkey/divinity/manager/damage/DamageManager.java @@ -550,7 +550,7 @@ public boolean dealDamage(@NotNull LivingEntity entity, final boolean[] success = {false}; Listener listener = new Listener() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onDamage(DivinityDamageEvent.Start event) { + public void onDamage(DivinityDamageEvent.BeforeScale event) { if (event.getOriginalEvent().getEntity() != entity) return; Map damageMap = event.getDamageMap(); damageMap.clear(); diff --git a/src/main/java/studio/magemonkey/divinity/manager/listener/object/VanillaWrapperListener.java b/src/main/java/studio/magemonkey/divinity/manager/listener/object/VanillaWrapperListener.java index 3b63dc49..49825d5c 100644 --- a/src/main/java/studio/magemonkey/divinity/manager/listener/object/VanillaWrapperListener.java +++ b/src/main/java/studio/magemonkey/divinity/manager/listener/object/VanillaWrapperListener.java @@ -338,6 +338,20 @@ public void onVanillaDamage(EntityDamageEvent e) { .forEach((dmgAtt) -> damages.compute(dmgAtt, (dmgKey, dmgVal) -> (dmgVal != null ? dmgVal : 0) + damageStart2)); + DivinityDamageEvent.BeforeScale beforeScale = new DivinityDamageEvent.BeforeScale(victim, + damager, + projectile, + damages, + defenses, + stats, + e, + meta, + skillShouldIgnore); + plugin.getPluginManager().callEvent(beforeScale); + if (beforeScale.isCancelled()) { + return; + } + scaleValuesWithCore(damager, projectile, damages, defenses, victim); DivinityDamageEvent.Start eventStart = new DivinityDamageEvent.Start(victim,