BaseMod icon indicating copy to clipboard operation
BaseMod copied to clipboard

Trigger Power on Discard

Open Pingumask opened this issue 4 years ago • 1 comments

Hello, I'm trying to make a power wich triggers when a card is discarded. I was surprised to find out AbstractPower doesn't have a onManualDiscard method contrary to AbstractRelic. I also couldn't find a subscriber that triggers on discard. Any of those would be pretty useful.

Pingumask avatar Jul 21 '20 17:07 Pingumask

These are the patches you need for onManualDiscard:

Triggered every time triggerOnManualDiscard for a card is triggered.

import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.megacrit.cardcrawl.actions.common.DiscardAction;
import com.megacrit.cardcrawl.actions.common.DiscardSpecificCardAction;
import com.megacrit.cardcrawl.actions.defect.ScrapeFollowUpAction;
import com.megacrit.cardcrawl.actions.unique.GamblingChipAction;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;

public class DiscardPatches {
    public static void onManualDiscard() {
        System.out.println("Hello Discard");
        if (AbstractDungeon.player.hasPower("yourPowerID")) {
            // trigger the onManualDiscard from the power here
            // (YourPower) AbstractDungeon.player.getPower("yourPowerID")).onManualDiscard();
        }
    }

    @SpirePatch(clz= DiscardAction.class, method="update")
    public static class DiscardCardActionPatch {
        @SpireInsertPatch(rlocs={14, 28, 55})
        public static void Insert(DiscardAction __instance) {
            onManualDiscard();
        }
    }

    @SpirePatch(clz= DiscardSpecificCardAction.class, method="update")
    public static class DiscardSpecificCardActionPatch {
        @SpireInsertPatch(rloc=7)
        public static void Insert(DiscardSpecificCardAction __instance) {
            onManualDiscard();
        }
    }

    @SpirePatch(clz = ScrapeFollowUpAction.class, method="update")
    public static class ScrapeFollowUpActionPatch {
        @SpireInsertPatch(rloc=8)
        public static void Insert(ScrapeFollowUpAction __instance) {
            onManualDiscard();
        }
    }

    @SpirePatch(clz = GamblingChipAction.class, method="update")
    public static class GamblingChipActionPatch {
        @SpireInsertPatch(rloc=22)
        public static void Insert(GamblingChipAction __instance) {
            onManualDiscard();
        }
    }
}

GniLudio avatar Dec 20 '20 20:12 GniLudio