From 875542926d33704646685ccba2155e2b865de520 Mon Sep 17 00:00:00 2001 From: Kiooeht Date: Wed, 28 Nov 2018 15:49:11 -0800 Subject: [PATCH] OnLoseTempHp hook for powers and relics --- CHANGELOG.md | 3 +++ .../stslib/patches/tempHp/PlayerDamage.java | 21 +++++++++++++++---- .../powers/interfaces/OnLoseTempHpPower.java | 8 +++++++ .../mod/stslib/relics/OnLoseTempHpRelic.java | 8 +++++++ 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/evacipated/cardcrawl/mod/stslib/powers/interfaces/OnLoseTempHpPower.java create mode 100644 src/main/java/com/evacipated/cardcrawl/mod/stslib/relics/OnLoseTempHpRelic.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 00489b0e..39240c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ #### dev #### * Powers * `HealthBarRenderPower` + * `OnLoseTempHpPower` +* Relics + * `OnLoseTempHpRelic` #### v1.8.1 #### * Fix stun having incorrect intents the next turn diff --git a/src/main/java/com/evacipated/cardcrawl/mod/stslib/patches/tempHp/PlayerDamage.java b/src/main/java/com/evacipated/cardcrawl/mod/stslib/patches/tempHp/PlayerDamage.java index 73cdcb82..3a22ca3f 100644 --- a/src/main/java/com/evacipated/cardcrawl/mod/stslib/patches/tempHp/PlayerDamage.java +++ b/src/main/java/com/evacipated/cardcrawl/mod/stslib/patches/tempHp/PlayerDamage.java @@ -1,6 +1,8 @@ package com.evacipated.cardcrawl.mod.stslib.patches.tempHp; import com.evacipated.cardcrawl.mod.stslib.patches.core.AbstractCreature.TempHPField; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnLoseTempHpPower; +import com.evacipated.cardcrawl.mod.stslib.relics.OnLoseTempHpRelic; import com.evacipated.cardcrawl.mod.stslib.vfx.combat.TempDamageNumberEffect; import com.evacipated.cardcrawl.modthespire.lib.*; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -8,12 +10,14 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; import javassist.CtBehavior; import java.util.ArrayList; @SpirePatch( - cls="com.megacrit.cardcrawl.characters.AbstractPlayer", + clz=AbstractPlayer.class, method="damage" ) public class PlayerDamage @@ -30,6 +34,17 @@ public static void Insert(AbstractPlayer __instance, DamageInfo info, @ByRef int int temporaryHealth = TempHPField.tempHp.get(__instance); if (temporaryHealth > 0) { + for (AbstractPower power : __instance.powers) { + if (power instanceof OnLoseTempHpPower) { + damageAmount[0] = ((OnLoseTempHpPower) power).onLoseTempHp(info, damageAmount[0]); + } + } + for (AbstractRelic relic : __instance.relics) { + if (relic instanceof OnLoseTempHpRelic) { + damageAmount[0] = ((OnLoseTempHpRelic) relic).onLoseTempHp(info, damageAmount[0]); + } + } + hadBlock[0] = true; CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.MED, ScreenShake.ShakeDur.SHORT, false); if (temporaryHealth >= damageAmount[0]) { @@ -45,8 +60,6 @@ public static void Insert(AbstractPlayer __instance, DamageInfo info, @ByRef int TempHPField.tempHp.set(__instance, temporaryHealth); } - - System.out.println("Final damage: " + damageAmount[0]); } private static class Locator extends SpireInsertLocator @@ -54,7 +67,7 @@ private static class Locator extends SpireInsertLocator @Override public int[] Locate(CtBehavior ctMethodToPatch) throws Exception { - Matcher finalMatcher = new Matcher.MethodCallMatcher("com.megacrit.cardcrawl.characters.AbstractPlayer", "decrementBlock"); + Matcher finalMatcher = new Matcher.MethodCallMatcher(AbstractPlayer.class, "decrementBlock"); return offset(LineFinder.findInOrder(ctMethodToPatch, new ArrayList<>(), finalMatcher), 1); } diff --git a/src/main/java/com/evacipated/cardcrawl/mod/stslib/powers/interfaces/OnLoseTempHpPower.java b/src/main/java/com/evacipated/cardcrawl/mod/stslib/powers/interfaces/OnLoseTempHpPower.java new file mode 100644 index 00000000..775f5f9a --- /dev/null +++ b/src/main/java/com/evacipated/cardcrawl/mod/stslib/powers/interfaces/OnLoseTempHpPower.java @@ -0,0 +1,8 @@ +package com.evacipated.cardcrawl.mod.stslib.powers.interfaces; + +import com.megacrit.cardcrawl.cards.DamageInfo; + +public interface OnLoseTempHpPower +{ + int onLoseTempHp(DamageInfo info, int damageAmount); +} diff --git a/src/main/java/com/evacipated/cardcrawl/mod/stslib/relics/OnLoseTempHpRelic.java b/src/main/java/com/evacipated/cardcrawl/mod/stslib/relics/OnLoseTempHpRelic.java new file mode 100644 index 00000000..4c2cd0a1 --- /dev/null +++ b/src/main/java/com/evacipated/cardcrawl/mod/stslib/relics/OnLoseTempHpRelic.java @@ -0,0 +1,8 @@ +package com.evacipated.cardcrawl.mod.stslib.relics; + +import com.megacrit.cardcrawl.cards.DamageInfo; + +public interface OnLoseTempHpRelic +{ + int onLoseTempHp(DamageInfo info, int damageAmount); +}