mirror of
https://github.com/magefree/mage.git
synced 2025-12-28 06:22:01 -08:00
143 lines
4 KiB
Java
143 lines
4 KiB
Java
|
|
package mage.cards.c;
|
|
|
|
import mage.MageInt;
|
|
import mage.abilities.Ability;
|
|
import mage.abilities.common.ZoneChangeTriggeredAbility;
|
|
import mage.abilities.effects.OneShotEffect;
|
|
import mage.abilities.keyword.DefenderAbility;
|
|
import mage.cards.CardImpl;
|
|
import mage.cards.CardSetInfo;
|
|
import mage.constants.*;
|
|
import mage.game.Game;
|
|
import mage.game.events.GameEvent;
|
|
import mage.game.permanent.Permanent;
|
|
import mage.watchers.Watcher;
|
|
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* @author BetaSteward
|
|
*/
|
|
public final class CathedralMembrane extends CardImpl {
|
|
|
|
public CathedralMembrane(UUID ownerId, CardSetInfo setInfo) {
|
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}{W/P}");
|
|
this.subtype.add(SubType.WALL);
|
|
|
|
this.power = new MageInt(0);
|
|
this.toughness = new MageInt(3);
|
|
|
|
// <i>({W/P} can be paid with either {W} or 2 life.)</i>
|
|
this.addAbility(DefenderAbility.getInstance());
|
|
|
|
// When Cathedral Membrane dies during combat, it deals 6 damage to each creature it blocked this combat.
|
|
this.addAbility(new CathedralMembraneAbility(), new CathedralMembraneWatcher());
|
|
|
|
}
|
|
|
|
private CathedralMembrane(final CathedralMembrane card) {
|
|
super(card);
|
|
}
|
|
|
|
@Override
|
|
public CathedralMembrane copy() {
|
|
return new CathedralMembrane(this);
|
|
}
|
|
}
|
|
|
|
class CathedralMembraneAbility extends ZoneChangeTriggeredAbility {
|
|
|
|
CathedralMembraneAbility() {
|
|
super(Zone.BATTLEFIELD, Zone.GRAVEYARD, new CathedralMembraneEffect(), "When {this} dies during combat, ", false);
|
|
}
|
|
|
|
private CathedralMembraneAbility(CathedralMembraneAbility ability) {
|
|
super(ability);
|
|
}
|
|
|
|
@Override
|
|
public CathedralMembraneAbility copy() {
|
|
return new CathedralMembraneAbility(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean checkTrigger(GameEvent event, Game game) {
|
|
if (super.checkTrigger(event, game)) {
|
|
if (game.getPhase().getType() == TurnPhase.COMBAT) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
class CathedralMembraneEffect extends OneShotEffect {
|
|
|
|
CathedralMembraneEffect() {
|
|
super(Outcome.Damage);
|
|
staticText = "it deals 6 damage to each creature it blocked this combat";
|
|
}
|
|
|
|
private CathedralMembraneEffect(final CathedralMembraneEffect effect) {
|
|
super(effect);
|
|
}
|
|
|
|
@Override
|
|
public CathedralMembraneEffect copy() {
|
|
return new CathedralMembraneEffect(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean apply(Game game, Ability source) {
|
|
CathedralMembraneWatcher watcher = (CathedralMembraneWatcher) game.getState().getWatchers().get(CathedralMembraneWatcher.class.getSimpleName(), source.getSourceId());
|
|
if (watcher != null) {
|
|
for (UUID uuid : watcher.getBlockedCreatures()) {
|
|
Permanent permanent = game.getPermanent(uuid);
|
|
if (permanent != null) {
|
|
permanent.damage(6, source.getSourceId(), game, false, true);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class CathedralMembraneWatcher extends Watcher {
|
|
|
|
private final Set<UUID> blockedCreatures = new HashSet<>();
|
|
|
|
CathedralMembraneWatcher() {
|
|
super(CathedralMembraneWatcher.class.getSimpleName(), WatcherScope.CARD);
|
|
}
|
|
|
|
private CathedralMembraneWatcher(final CathedralMembraneWatcher watcher) {
|
|
super(watcher);
|
|
this.blockedCreatures.addAll(watcher.blockedCreatures);
|
|
}
|
|
|
|
@Override
|
|
public CathedralMembraneWatcher copy() {
|
|
return new CathedralMembraneWatcher(this);
|
|
}
|
|
|
|
@Override
|
|
public void watch(GameEvent event, Game game) {
|
|
if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED && event.getSourceId().equals(sourceId)) {
|
|
blockedCreatures.add(event.getTargetId());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void reset() {
|
|
super.reset();
|
|
blockedCreatures.clear();
|
|
}
|
|
|
|
Set<UUID> getBlockedCreatures() {
|
|
return blockedCreatures;
|
|
}
|
|
}
|