mirror of
https://github.com/magefree/mage.git
synced 2025-12-30 07:22:03 -08:00
[BRO] Implemented Mishra, Claimed by Gix / Phyrexian Dragon Engine / Mishra, Lost to Phyrexia
This commit is contained in:
parent
5a4d755dba
commit
55e9314135
8 changed files with 294 additions and 8 deletions
|
|
@ -2,6 +2,7 @@ package mage.abilities.common;
|
|||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.EntersTheBattlefieldEvent;
|
||||
|
|
@ -12,13 +13,21 @@ import mage.game.events.GameEvent;
|
|||
*/
|
||||
public class EntersBattlefieldFromGraveyardTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private final TargetController targetController;
|
||||
|
||||
public EntersBattlefieldFromGraveyardTriggeredAbility(Effect effect) {
|
||||
this(effect, TargetController.ANY);
|
||||
}
|
||||
|
||||
public EntersBattlefieldFromGraveyardTriggeredAbility(Effect effect, TargetController targetController) {
|
||||
super(Zone.BATTLEFIELD, effect, false);
|
||||
setTriggerPhrase("When {this} enters the battlefield from a graveyard, ");
|
||||
this.targetController = targetController;
|
||||
setTriggerPhrase(generateTriggerPhrase());
|
||||
}
|
||||
|
||||
public EntersBattlefieldFromGraveyardTriggeredAbility(final EntersBattlefieldFromGraveyardTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.targetController = ability.targetController;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -29,11 +38,29 @@ public class EntersBattlefieldFromGraveyardTriggeredAbility extends TriggeredAbi
|
|||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
return event.getTargetId().equals(getSourceId())
|
||||
&& ((EntersTheBattlefieldEvent) event).getFromZone() == Zone.GRAVEYARD;
|
||||
&& ((EntersTheBattlefieldEvent) event).getFromZone() == Zone.GRAVEYARD
|
||||
&& (targetController == TargetController.ANY
|
||||
|| (targetController == TargetController.YOU
|
||||
&& isControlledBy(game.getOwnerId(event.getTargetId()))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntersBattlefieldFromGraveyardTriggeredAbility copy() {
|
||||
return new EntersBattlefieldFromGraveyardTriggeredAbility(this);
|
||||
}
|
||||
|
||||
private String generateTriggerPhrase() {
|
||||
StringBuilder sb = new StringBuilder("When {this} enters the battlefield from ");
|
||||
switch (targetController) {
|
||||
case YOU:
|
||||
sb.append("your");
|
||||
break;
|
||||
case ANY:
|
||||
sb.append("a");
|
||||
default:
|
||||
throw new UnsupportedOperationException("TargetController " + targetController + "not supported");
|
||||
}
|
||||
sb.append(" graveyard, ");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import mage.constants.TargetController;
|
|||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
|
@ -18,12 +19,17 @@ public class MeldCondition implements Condition {
|
|||
|
||||
private final String message;
|
||||
private final FilterPermanent filter;
|
||||
private final boolean attacking;
|
||||
|
||||
public MeldCondition(String meldWithName) {
|
||||
this(meldWithName, CardType.CREATURE);
|
||||
}
|
||||
|
||||
public MeldCondition(String meldWithName, CardType cardType) {
|
||||
this(meldWithName, cardType, false);
|
||||
}
|
||||
|
||||
public MeldCondition(String meldWithName, CardType cardType, boolean attacking) {
|
||||
this.message = "you both own and control {this} and "
|
||||
+ CardUtil.addArticle(cardType.toString().toLowerCase())
|
||||
+ " named " + meldWithName;
|
||||
|
|
@ -31,6 +37,10 @@ public class MeldCondition implements Condition {
|
|||
this.filter.add(TargetController.YOU.getOwnerPredicate());
|
||||
this.filter.add(cardType.getPredicate());
|
||||
this.filter.add(new NamePredicate(meldWithName));
|
||||
if (attacking) {
|
||||
this.filter.add(AttackingPredicate.instance);
|
||||
}
|
||||
this.attacking = attacking;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -39,6 +49,7 @@ public class MeldCondition implements Condition {
|
|||
return sourcePermanent != null
|
||||
&& sourcePermanent.isControlledBy(source.getControllerId())
|
||||
&& sourcePermanent.isOwnedBy(source.getControllerId())
|
||||
&& (!attacking || sourcePermanent.isAttacking())
|
||||
&& game.getBattlefield().contains(filter, source, game, 1);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import mage.constants.Zone;
|
|||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
|
|
@ -29,17 +30,24 @@ public class MeldEffect extends OneShotEffect {
|
|||
|
||||
private final String meldWithName;
|
||||
private final String meldIntoName;
|
||||
private final boolean attacking;
|
||||
|
||||
public MeldEffect(String meldWithName, String meldIntoName) {
|
||||
this(meldWithName, meldIntoName, false);
|
||||
}
|
||||
|
||||
public MeldEffect(String meldWithName, String meldIntoName, boolean attacking) {
|
||||
super(Outcome.Benefit);
|
||||
this.meldWithName = meldWithName;
|
||||
this.meldIntoName = meldIntoName;
|
||||
this.attacking = attacking;
|
||||
}
|
||||
|
||||
public MeldEffect(final MeldEffect effect) {
|
||||
super(effect);
|
||||
this.meldWithName = effect.meldWithName;
|
||||
this.meldIntoName = effect.meldIntoName;
|
||||
this.attacking = effect.attacking;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -54,6 +62,7 @@ public class MeldEffect extends OneShotEffect {
|
|||
if (controller == null
|
||||
|| sourcePermanent == null
|
||||
|| !sourcePermanent.isControlledBy(controller.getId())
|
||||
|| (attacking && !sourcePermanent.isAttacking())
|
||||
|| !sourcePermanent.isOwnedBy(controller.getId())) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -61,6 +70,9 @@ public class MeldEffect extends OneShotEffect {
|
|||
FilterPermanent filter = new FilterControlledPermanent("permanent named " + meldWithName);
|
||||
filter.add(new NamePredicate(meldWithName));
|
||||
filter.add(TargetController.YOU.getOwnerPredicate());
|
||||
if (attacking) {
|
||||
filter.add(AttackingPredicate.instance);
|
||||
}
|
||||
if (!game.getBattlefield().contains(filter, source, game, 1)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -101,7 +113,10 @@ public class MeldEffect extends OneShotEffect {
|
|||
game.addMeldCard(meldCard.getId(), meldCard);
|
||||
game.getState().addCard(meldCard);
|
||||
meldCard.setZone(Zone.EXILED, game);
|
||||
controller.moveCards(meldCard, Zone.BATTLEFIELD, source, game);
|
||||
controller.moveCards(meldCard, Zone.BATTLEFIELD, source, game, attacking, false, false, null);
|
||||
if (attacking) {
|
||||
game.getCombat().addAttackingCreature(meldCard.getId(), game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue