[ZNR] Implemented Sizzling Barrage

This commit is contained in:
Evan Kranzler 2020-09-08 16:26:14 -04:00
parent ce90d066a0
commit c5d5c54aa4
2 changed files with 87 additions and 0 deletions

View file

@ -0,0 +1,86 @@
package mage.cards.s;
import mage.MageObjectReference;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.WatcherScope;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.watchers.Watcher;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class SizzlingBarrage extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("creature that blocked this turn");
static {
filter.add(SizzlingBarragePredicate.instance);
}
public SizzlingBarrage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}");
// Sizzling Barrage deals 4 damage to target creature that blocked this turn.
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
this.getSpellAbility().addTarget(new TargetPermanent(filter));
this.getSpellAbility().addWatcher(new SizzlingBarrageWatcher());
}
private SizzlingBarrage(final SizzlingBarrage card) {
super(card);
}
@Override
public SizzlingBarrage copy() {
return new SizzlingBarrage(this);
}
}
enum SizzlingBarragePredicate implements Predicate<Permanent> {
instance;
@Override
public boolean apply(Permanent input, Game game) {
SizzlingBarrageWatcher watcher = game.getState().getWatcher(SizzlingBarrageWatcher.class);
return watcher != null && watcher.checkCreature(input, game);
}
}
class SizzlingBarrageWatcher extends Watcher {
private final Set<MageObjectReference> blockers = new HashSet<>();
SizzlingBarrageWatcher() {
super(WatcherScope.GAME);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() != GameEvent.EventType.BLOCKER_DECLARED) {
blockers.add(new MageObjectReference(event.getSourceId(), game));
}
}
@Override
public void reset() {
super.reset();
this.blockers.clear();
}
boolean checkCreature(Permanent permanent, Game game) {
return blockers.stream().anyMatch(mor -> mor.refersTo(permanent, game));
}
}

View file

@ -273,6 +273,7 @@ public final class ZendikarRising extends ExpansionSet {
cards.add(new SetCardInfo("Shepherd of Heroes", 38, Rarity.COMMON, mage.cards.s.ShepherdOfHeroes.class));
cards.add(new SetCardInfo("Silundi Isle", 80, Rarity.UNCOMMON, mage.cards.s.SilundiIsle.class));
cards.add(new SetCardInfo("Silundi Vision", 80, Rarity.UNCOMMON, mage.cards.s.SilundiVision.class));
cards.add(new SetCardInfo("Sizzling Barrage", 162, Rarity.COMMON, mage.cards.s.SizzlingBarrage.class));
cards.add(new SetCardInfo("Skyclave Basilica", 40, Rarity.UNCOMMON, mage.cards.s.SkyclaveBasilica.class));
cards.add(new SetCardInfo("Skyclave Cleric", 40, Rarity.UNCOMMON, mage.cards.s.SkyclaveCleric.class));
cards.add(new SetCardInfo("Skyclave Geopede", 163, Rarity.UNCOMMON, mage.cards.s.SkyclaveGeopede.class));