mirror of
https://github.com/correl/mage.git
synced 2024-11-15 11:09:30 +00:00
commit
22e376699e
35 changed files with 97 additions and 104 deletions
|
@ -42,17 +42,6 @@ public final class CardHelper {
|
||||||
private CardHelper() {
|
private CardHelper() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getColor(CardView c) {
|
|
||||||
if (c.getColor().getColorCount() == 0) return "Colorless";
|
|
||||||
else if (c.getColor().getColorCount() > 1) return "Gold";
|
|
||||||
else if (c.getColor().isBlack()) return "Black";
|
|
||||||
else if (c.getColor().isBlue()) return "Blue";
|
|
||||||
else if (c.getColor().isWhite()) return "White";
|
|
||||||
else if (c.getColor().isGreen()) return "Green";
|
|
||||||
else if (c.getColor().isRed()) return "Red";
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getType(CardView c) {
|
public static String getType(CardView c) {
|
||||||
StringBuilder type = new StringBuilder();
|
StringBuilder type = new StringBuilder();
|
||||||
for (SuperType superType : c.getSuperTypes()) {
|
for (SuperType superType : c.getSuperTypes()) {
|
||||||
|
@ -77,7 +66,4 @@ public final class CardHelper {
|
||||||
return type.toString();
|
return type.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCreature(CardView c) {
|
|
||||||
return c.getCardTypes().contains(CardType.CREATURE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,11 @@
|
||||||
*/
|
*/
|
||||||
package mage.client.deckeditor.table;
|
package mage.client.deckeditor.table;
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import mage.cards.MageCard;
|
import mage.cards.MageCard;
|
||||||
import mage.view.CardView;
|
import mage.view.CardView;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link MageCard} comparator. Used to sort cards in Deck Editor Table View
|
* {@link MageCard} comparator. Used to sort cards in Deck Editor Table View
|
||||||
* pane.
|
* pane.
|
||||||
|
@ -73,8 +74,8 @@ public class MageCardComparator implements Comparator<CardView> {
|
||||||
break;
|
break;
|
||||||
// Color
|
// Color
|
||||||
case 3:
|
case 3:
|
||||||
aCom = CardHelper.getColor(a);
|
aCom = a.getColorText();
|
||||||
bCom = CardHelper.getColor(b);
|
bCom = a.getColorText();
|
||||||
break;
|
break;
|
||||||
// Type
|
// Type
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -85,10 +86,10 @@ public class MageCardComparator implements Comparator<CardView> {
|
||||||
case 5:
|
case 5:
|
||||||
aCom = (float) -1;
|
aCom = (float) -1;
|
||||||
bCom = (float) -1;
|
bCom = (float) -1;
|
||||||
if (CardHelper.isCreature(a)) {
|
if (a.isCreature()) {
|
||||||
aCom = new Float(a.getPower() + '.' + (a.getToughness().startsWith("-") ? "0" : a.getToughness()));
|
aCom = new Float(a.getPower() + '.' + (a.getToughness().startsWith("-") ? "0" : a.getToughness()));
|
||||||
}
|
}
|
||||||
if (CardHelper.isCreature(b)) {
|
if (b.isCreature()) {
|
||||||
bCom = new Float(b.getPower() + '.' + (b.getToughness().startsWith("-") ? "0" : b.getToughness()));
|
bCom = new Float(b.getPower() + '.' + (b.getToughness().startsWith("-") ? "0" : b.getToughness()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -27,24 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.client.deckeditor.table;
|
package mage.client.deckeditor.table;
|
||||||
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Image;
|
|
||||||
import java.awt.event.KeyEvent;
|
|
||||||
import java.awt.event.KeyListener;
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.UUID;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.AbstractTableModel;
|
|
||||||
import javax.swing.table.TableColumnModel;
|
|
||||||
import mage.client.MageFrame;
|
import mage.client.MageFrame;
|
||||||
import mage.client.cards.BigCard;
|
import mage.client.cards.BigCard;
|
||||||
import mage.client.cards.CardEventSource;
|
import mage.client.cards.CardEventSource;
|
||||||
|
@ -64,6 +46,16 @@ import org.jdesktop.swingx.JXPanel;
|
||||||
import org.mage.card.arcane.ManaSymbols;
|
import org.mage.card.arcane.ManaSymbols;
|
||||||
import org.mage.card.arcane.UI;
|
import org.mage.card.arcane.UI;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
import javax.swing.table.TableColumnModel;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Table Model for card list.
|
* Table Model for card list.
|
||||||
*
|
*
|
||||||
|
@ -260,11 +252,11 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
||||||
castingCost = ManaSymbols.replaceSymbolsWithHTML(castingCost, ManaSymbols.Type.TABLE);
|
castingCost = ManaSymbols.replaceSymbolsWithHTML(castingCost, ManaSymbols.Type.TABLE);
|
||||||
return "<html>" + castingCost + "</html>";
|
return "<html>" + castingCost + "</html>";
|
||||||
case 3:
|
case 3:
|
||||||
return CardHelper.getColor(c);
|
return c.getColorText();
|
||||||
case 4:
|
case 4:
|
||||||
return CardHelper.getType(c);
|
return CardHelper.getType(c);
|
||||||
case 5:
|
case 5:
|
||||||
return CardHelper.isCreature(c) ? c.getPower() + '/'
|
return c.isCreature() ? c.getPower() + '/'
|
||||||
+ c.getToughness() : "-";
|
+ c.getToughness() : "-";
|
||||||
case 6:
|
case 6:
|
||||||
return c.getRarity().toString();
|
return c.getRarity().toString();
|
||||||
|
|
|
@ -957,4 +957,19 @@ public class CardView extends SimpleCardView {
|
||||||
this.canAttack = canAttack;
|
this.canAttack = canAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCreature(){
|
||||||
|
return cardTypes.contains(CardType.CREATURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColorText() {
|
||||||
|
if (getColor().getColorCount() == 0) return "Colorless";
|
||||||
|
else if (getColor().getColorCount() > 1) return "Gold";
|
||||||
|
else if (getColor().isBlack()) return "Black";
|
||||||
|
else if (getColor().isBlue()) return "Blue";
|
||||||
|
else if (getColor().isWhite()) return "White";
|
||||||
|
else if (getColor().isGreen()) return "Green";
|
||||||
|
else if (getColor().isRed()) return "Red";
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class AkutaBornOfAsh extends CardImpl {
|
||||||
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
||||||
new DoIfCostPaid(new ReturnSourceFromGraveyardToBattlefieldEffect(), new SacrificeTargetCost(new TargetControlledPermanent(filterSwamp))),
|
new DoIfCostPaid(new ReturnSourceFromGraveyardToBattlefieldEffect(), new SacrificeTargetCost(new TargetControlledPermanent(filterSwamp))),
|
||||||
TargetController.YOU, false),
|
TargetController.YOU, false),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may sacrifice a Swamp. If you do, return {this} from your graveyard to the battlefield.");
|
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may sacrifice a Swamp. If you do, return {this} from your graveyard to the battlefield.");
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class AngelOfTheDireHour extends CardImpl {
|
||||||
// When Angel of the Dire Hour enters the battlefield, if you cast it from your hand, exile all attacking creatures.
|
// When Angel of the Dire Hour enters the battlefield, if you cast it from your hand, exile all attacking creatures.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(new FilterAttackingCreature("attacking creatures")), false),
|
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(new FilterAttackingCreature("attacking creatures")), false),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, exile all attacking creatures."),
|
"When {this} enters the battlefield, if you cast it from your hand, exile all attacking creatures."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class BreachingLeviathan extends CardImpl {
|
||||||
// When Breaching Leviathan enters the battlefield, if you cast it from your hand, tap all nonblue creatures. Those creatures don't untap during their controllers' next untap steps.
|
// When Breaching Leviathan enters the battlefield, if you cast it from your hand, tap all nonblue creatures. Those creatures don't untap during their controllers' next untap steps.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new BreachingLeviathanEffect(), false),
|
new EntersBattlefieldTriggeredAbility(new BreachingLeviathanEffect(), false),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, tap all nonblue creatures. Those creatures don't untap during their controllers' next untap steps."),
|
"When {this} enters the battlefield, if you cast it from your hand, tap all nonblue creatures. Those creatures don't untap during their controllers' next untap steps."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class CoalStoker extends CardImpl {
|
||||||
// When Coal Stoker enters the battlefield, if you cast it from your hand, add {R}{R}{R} to your mana pool.
|
// When Coal Stoker enters the battlefield, if you cast it from your hand, add {R}{R}{R} to your mana pool.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)), false),
|
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)), false),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, add {R}{R}{R} to your mana pool."),
|
"When {this} enters the battlefield, if you cast it from your hand, add {R}{R}{R} to your mana pool."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class DeathOfAThousandStings extends CardImpl {
|
||||||
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
||||||
new ReturnSourceFromGraveyardToHandEffect(),
|
new ReturnSourceFromGraveyardToHandEffect(),
|
||||||
TargetController.YOU, true),
|
TargetController.YOU, true),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may return {this} from your graveyard to your hand.");
|
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may return {this} from your graveyard to your hand.");
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ class DeathbringerRegentCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
return new CastFromHandSourceCondition().apply(game, source)
|
return CastFromHandSourceCondition.instance.apply(game, source)
|
||||||
&& game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), game).size() >= 6;
|
&& game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), game).size() >= 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,11 +61,11 @@ public class DescendantOfKiyomaro extends CardImpl {
|
||||||
// As long as you have more cards in hand than each opponent, Descendant of Kiyomaro gets +1/+2 and has "Whenever this creature deals combat damage, you gain 3 life."
|
// As long as you have more cards in hand than each opponent, Descendant of Kiyomaro gets +1/+2 and has "Whenever this creature deals combat damage, you gain 3 life."
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
new BoostSourceEffect(1,2, Duration.WhileOnBattlefield),
|
new BoostSourceEffect(1,2, Duration.WhileOnBattlefield),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"As long as you have more cards in hand than each opponent, {this} gets +1/+2"));
|
"As long as you have more cards in hand than each opponent, {this} gets +1/+2"));
|
||||||
ability.addEffect(new ConditionalContinuousEffect(
|
ability.addEffect(new ConditionalContinuousEffect(
|
||||||
new GainAbilitySourceEffect(new DealsCombatDamageTriggeredAbility(new GainLifeEffect(3), false)),
|
new GainAbilitySourceEffect(new DealsCombatDamageTriggeredAbility(new GainLifeEffect(3), false)),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"and has \"Whenever this creature deals combat damage, you gain 3 life.\""));
|
"and has \"Whenever this creature deals combat damage, you gain 3 life.\""));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
@ -44,6 +43,8 @@ import mage.target.Target;
|
||||||
import mage.target.common.TargetArtifactPermanent;
|
import mage.target.common.TargetArtifactPermanent;
|
||||||
import mage.target.common.TargetControlledPermanent;
|
import mage.target.common.TargetControlledPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Styxo
|
* @author Styxo
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class DreadCacodemon extends CardImpl {
|
||||||
// if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control.
|
// if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control.
|
||||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(opponentsCreatures, false));
|
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(opponentsCreatures, false));
|
||||||
ability.addEffect(new TapAllEffect(otherCreaturesYouControl));
|
ability.addEffect(new TapAllEffect(otherCreaturesYouControl));
|
||||||
this.addAbility(new ConditionalTriggeredAbility(ability, new CastFromHandSourceCondition(),
|
this.addAbility(new ConditionalTriggeredAbility(ability, CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control."), new CastFromHandWatcher());
|
"When {this} enters the battlefield, if you cast it from your hand, destroy all creatures your opponents control, then tap all other creatures you control."), new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class Epochrasite extends CardImpl {
|
||||||
// Epochrasite enters the battlefield with three +1/+1 counters on it if you didn't cast it from your hand.
|
// Epochrasite enters the battlefield with three +1/+1 counters on it if you didn't cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(
|
this.addAbility(new EntersBattlefieldAbility(
|
||||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)),
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)),
|
||||||
new InvertCondition(new CastFromHandSourceCondition()),
|
new InvertCondition(CastFromHandSourceCondition.instance),
|
||||||
"{this} enters the battlefield with three +1/+1 counters on it if you didn't cast it from your hand",""),
|
"{this} enters the battlefield with three +1/+1 counters on it if you didn't cast it from your hand",""),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class ExileIntoDarkness extends CardImpl {
|
||||||
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
||||||
new ReturnSourceFromGraveyardToHandEffect(),
|
new ReturnSourceFromGraveyardToHandEffect(),
|
||||||
TargetController.YOU, true),
|
TargetController.YOU, true),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may return {this} from your graveyard to your hand.");
|
"At the beginning of your upkeep, if you have more cards in hand than each opponent, you may return {this} from your graveyard to your hand.");
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class FurnaceDragon extends CardImpl {
|
||||||
// When Furnace Dragon enters the battlefield, if you cast it from your hand, exile all artifacts.
|
// When Furnace Dragon enters the battlefield, if you cast it from your hand, exile all artifacts.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(filter), false),
|
new EntersBattlefieldTriggeredAbility(new ExileAllEffect(filter), false),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, exile all artifacts."),
|
"When {this} enters the battlefield, if you cast it from your hand, exile all artifacts."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class InameAsOne extends CardImpl {
|
||||||
// When Iname as One enters the battlefield, if you cast it from your hand, you may search your library for a Spirit permanent card, put it onto the battlefield, then shuffle your library.
|
// When Iname as One enters the battlefield, if you cast it from your hand, you may search your library for a Spirit permanent card, put it onto the battlefield, then shuffle your library.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, filter)), true),
|
new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, filter)), true),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, you may search your library for a Spirit permanent card, put it onto the battlefield, then shuffle your library."),
|
"When {this} enters the battlefield, if you cast it from your hand, you may search your library for a Spirit permanent card, put it onto the battlefield, then shuffle your library."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.k;
|
package mage.cards.k;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.condition.common.MoreCardsInHandThanOpponentsCondition;
|
import mage.abilities.condition.common.MoreCardsInHandThanOpponentsCondition;
|
||||||
|
@ -41,6 +40,8 @@ import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
@ -60,7 +61,7 @@ public class KitsuneBonesetter extends CardImpl {
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new PreventDamageToTargetEffect(Duration.EndOfTurn, 3),
|
new PreventDamageToTargetEffect(Duration.EndOfTurn, 3),
|
||||||
new TapSourceCost(),
|
new TapSourceCost(),
|
||||||
new MoreCardsInHandThanOpponentsCondition()
|
MoreCardsInHandThanOpponentsCondition.instance
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class LinvalaThePreserver extends CardImpl {
|
||||||
|
|
||||||
// When Linvala, the Preserver enters the battlefield, if an opponent has more life than you, you gain 5 life.
|
// When Linvala, the Preserver enters the battlefield, if an opponent has more life than you, you gain 5 life.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
|
this.addAbility(new ConditionalTriggeredAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
|
||||||
new OpponentHasMoreLifeCondition(),
|
OpponentHasMoreLifeCondition.instance,
|
||||||
"When {this} enters the battlefield, if an opponent has more life than you, you gain 5 life."));
|
"When {this} enters the battlefield, if an opponent has more life than you, you gain 5 life."));
|
||||||
|
|
||||||
// When Linvala enters the battlefield, if an opponent controls more creatures than you, create a 3/3 white Angel creature token with flying.
|
// When Linvala enters the battlefield, if an opponent controls more creatures than you, create a 3/3 white Angel creature token with flying.
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class MyojinOfCleansingFire extends CardImpl {
|
||||||
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
||||||
|
|
||||||
// Myojin of Cleansing Fire enters the battlefield with a divinity counter on it if you cast it from your hand.
|
// Myojin of Cleansing Fire enters the battlefield with a divinity counter on it if you cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), new CastFromHandSourceCondition(), ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourceCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
||||||
// Myojin of Cleansing Fire is indestructible as long as it has a divinity counter on it.
|
// Myojin of Cleansing Fire is indestructible as long as it has a divinity counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class MyojinOfInfiniteRage extends CardImpl {
|
||||||
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
||||||
|
|
||||||
// Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand.
|
// Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), new CastFromHandSourceCondition(), ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourceCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
||||||
// Myojin of Infinite Rage is indestructible as long as it has a divinity counter on it.
|
// Myojin of Infinite Rage is indestructible as long as it has a divinity counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldAbility;
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
@ -53,6 +52,8 @@ import mage.players.Player;
|
||||||
import mage.target.common.TargetCardInHand;
|
import mage.target.common.TargetCardInHand;
|
||||||
import mage.watchers.common.CastFromHandWatcher;
|
import mage.watchers.common.CastFromHandWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX
|
* @author LevelX
|
||||||
*/
|
*/
|
||||||
|
@ -69,7 +70,7 @@ public class MyojinOfLifesWeb extends CardImpl {
|
||||||
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
||||||
|
|
||||||
// Myojin of Life's Web enters the battlefield with a divinity counter on it if you cast it from your hand.
|
// Myojin of Life's Web enters the battlefield with a divinity counter on it if you cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), new CastFromHandSourceCondition(), ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourceCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
||||||
// Myojin of Life's Web is indestructible as long as it has a divinity counter on it.
|
// Myojin of Life's Web is indestructible as long as it has a divinity counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldAbility;
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
@ -47,11 +44,14 @@ import mage.abilities.keyword.IndestructibleAbility;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.watchers.common.CastFromHandWatcher;
|
import mage.watchers.common.CastFromHandWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX
|
* @author LevelX
|
||||||
*/
|
*/
|
||||||
|
@ -68,7 +68,7 @@ public class MyojinOfNightsReach extends CardImpl {
|
||||||
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
||||||
|
|
||||||
// Myojin of Night's Reach enters the battlefield with a divinity counter on it if you cast it from your hand.
|
// Myojin of Night's Reach enters the battlefield with a divinity counter on it if you cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), new CastFromHandSourceCondition(), ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourceCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
||||||
// Myojin of Night's Reach is indestructible as long as it has a divinity counter on it.
|
// Myojin of Night's Reach is indestructible as long as it has a divinity counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldAbility;
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
|
@ -47,11 +44,14 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||||
import mage.abilities.keyword.IndestructibleAbility;
|
import mage.abilities.keyword.IndestructibleAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||||
import mage.watchers.common.CastFromHandWatcher;
|
import mage.watchers.common.CastFromHandWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LevelX
|
* @author LevelX
|
||||||
*/
|
*/
|
||||||
|
@ -73,12 +73,12 @@ public class MyojinOfSeeingWinds extends CardImpl {
|
||||||
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
this.getSpellAbility().addWatcher(new CastFromHandWatcher());
|
||||||
|
|
||||||
// Myojin of Seeing Winds enters the battlefield with a divinity counter on it if you cast it from your hand.
|
// Myojin of Seeing Winds enters the battlefield with a divinity counter on it if you cast it from your hand.
|
||||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), new CastFromHandSourceCondition(), ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourceCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand"));
|
||||||
// Myojin of Seeing Winds is indestructible as long as it has a divinity counter on it.
|
// Myojin of Seeing Winds is indestructible as long as it has a divinity counter on it.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it")));
|
||||||
// Remove a divinity counter from Myojin of Seeing Winds: Draw a card for each permanent you control.
|
// Remove a divinity counter from Myojin of Seeing Winds: Draw a card for each permanent you control.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter, 1)), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter)), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.o;
|
package mage.cards.o;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
@ -40,6 +39,8 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
@ -57,7 +58,7 @@ public class OkinaNightwatch extends CardImpl {
|
||||||
// As long as you have more cards in hand than each opponent, Okina Nightwatch gets +3/+3.
|
// As long as you have more cards in hand than each opponent, Okina Nightwatch gets +3/+3.
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
new BoostSourceEffect(3,3, Duration.WhileOnBattlefield),
|
new BoostSourceEffect(3,3, Duration.WhileOnBattlefield),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"As long as you have more cards in hand than each opponent, Okina Nightwatch gets +3/+3"));
|
"As long as you have more cards in hand than each opponent, Okina Nightwatch gets +3/+3"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class PhageTheUntouchable extends CardImpl {
|
||||||
// When Phage the Untouchable enters the battlefield, if you didn't cast it from your hand, you lose the game.
|
// When Phage the Untouchable enters the battlefield, if you didn't cast it from your hand, you lose the game.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new LoseGameSourceControllerEffect(), false),
|
new EntersBattlefieldTriggeredAbility(new LoseGameSourceControllerEffect(), false),
|
||||||
new InvertCondition(new CastFromHandSourceCondition()),
|
new InvertCondition(CastFromHandSourceCondition.instance),
|
||||||
"When {this} enters the battlefield, if you didn't cast it from your hand, you lose the game"
|
"When {this} enters the battlefield, if you didn't cast it from your hand, you lose the game"
|
||||||
), new CastFromHandWatcher());
|
), new CastFromHandWatcher());
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.ObjectColor;
|
import mage.ObjectColor;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -44,6 +43,8 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
import mage.watchers.common.CastFromHandWatcher;
|
import mage.watchers.common.CastFromHandWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author daagar
|
* @author daagar
|
||||||
|
@ -69,7 +70,7 @@ public class ReiverDemon extends CardImpl {
|
||||||
// When Reiver Demon enters the battlefield, if you cast it from your hand, destroy all nonartifact, nonblack creatures. They can't be regenerated.
|
// When Reiver Demon enters the battlefield, if you cast it from your hand, destroy all nonartifact, nonblack creatures. They can't be regenerated.
|
||||||
this.addAbility(new ConditionalTriggeredAbility(
|
this.addAbility(new ConditionalTriggeredAbility(
|
||||||
new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(filter, true), false),
|
new EntersBattlefieldTriggeredAbility(new DestroyAllEffect(filter, true), false),
|
||||||
new CastFromHandSourceCondition(),
|
CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, destroy all nonartifact, nonblack creatures. They can't be regenerated."),
|
"When {this} enters the battlefield, if you cast it from your hand, destroy all nonartifact, nonblack creatures. They can't be regenerated."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.TriggeredAbility;
|
import mage.abilities.TriggeredAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
@ -41,6 +40,8 @@ import mage.constants.CardType;
|
||||||
import mage.game.permanent.token.BirdToken;
|
import mage.game.permanent.token.BirdToken;
|
||||||
import mage.watchers.common.CastFromHandWatcher;
|
import mage.watchers.common.CastFromHandWatcher;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
@ -56,7 +57,7 @@ public class ScionOfVituGhazi extends CardImpl {
|
||||||
|
|
||||||
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BirdToken()), false);
|
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BirdToken()), false);
|
||||||
ability.addEffect(new PopulateEffect("then"));
|
ability.addEffect(new PopulateEffect("then"));
|
||||||
this.addAbility(new ConditionalTriggeredAbility(ability, new CastFromHandSourceCondition(),
|
this.addAbility(new ConditionalTriggeredAbility(ability, CastFromHandSourceCondition.instance,
|
||||||
"When {this} enters the battlefield, if you cast it from your hand, create a 1/1 white Bird creature token with flying, then populate."),
|
"When {this} enters the battlefield, if you cast it from your hand, create a 1/1 white Bird creature token with flying, then populate."),
|
||||||
new CastFromHandWatcher());
|
new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*/
|
*/
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
@ -42,6 +41,8 @@ import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
|
@ -58,11 +59,11 @@ public class Secretkeeper extends CardImpl {
|
||||||
// As long as you have more cards in hand than each opponent, Secretkeeper gets +2/+2 and has flying.
|
// As long as you have more cards in hand than each opponent, Secretkeeper gets +2/+2 and has flying.
|
||||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
|
||||||
new BoostSourceEffect(2,2, Duration.WhileOnBattlefield),
|
new BoostSourceEffect(2,2, Duration.WhileOnBattlefield),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"As long as you have more cards in hand than each opponent, Secretkeeper gets +2/+2"));
|
"As long as you have more cards in hand than each opponent, Secretkeeper gets +2/+2"));
|
||||||
ability.addEffect(new ConditionalContinuousEffect(
|
ability.addEffect(new ConditionalContinuousEffect(
|
||||||
new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield),
|
new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||||
new MoreCardsInHandThanOpponentsCondition(),
|
MoreCardsInHandThanOpponentsCondition.instance,
|
||||||
"and has flying"));
|
"and has flying"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,9 @@ import mage.watchers.common.CastFromHandWatcher;
|
||||||
*
|
*
|
||||||
* @author Loki
|
* @author Loki
|
||||||
*/
|
*/
|
||||||
public class CastFromHandSourceCondition implements Condition {
|
public enum CastFromHandSourceCondition implements Condition {
|
||||||
|
|
||||||
|
instance;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
|
|
|
@ -7,7 +7,9 @@ import mage.players.Player;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class MoreCardsInHandThanOpponentsCondition implements Condition {
|
public enum MoreCardsInHandThanOpponentsCondition implements Condition {
|
||||||
|
|
||||||
|
instance;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
|
|
|
@ -28,21 +28,21 @@
|
||||||
|
|
||||||
package mage.abilities.condition.common;
|
package mage.abilities.condition.common;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class OpponentHasMoreLifeCondition implements Condition {
|
public enum OpponentHasMoreLifeCondition implements Condition {
|
||||||
|
|
||||||
public OpponentHasMoreLifeCondition() {
|
instance;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
|
|
|
@ -65,9 +65,7 @@ public class AddCardTypeSourceEffect extends ContinuousEffectImpl {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Permanent permanent = game.getPermanent(source.getSourceId());
|
Permanent permanent = game.getPermanent(source.getSourceId());
|
||||||
if (permanent != null && affectedObjectList.contains(new MageObjectReference(permanent, game))) {
|
if (permanent != null && affectedObjectList.contains(new MageObjectReference(permanent, game))) {
|
||||||
if (!permanent.getCardType().contains(addedCardType)) {
|
|
||||||
permanent.addCardType(addedCardType);
|
permanent.addCardType(addedCardType);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
} else if (this.getDuration() == Duration.Custom) {
|
} else if (this.getDuration() == Duration.Custom) {
|
||||||
this.discard();
|
this.discard();
|
||||||
|
|
|
@ -42,7 +42,6 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.game.permanent.token.Token;
|
import mage.game.permanent.token.Token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements SourceEffect {
|
public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements SourceEffect {
|
||||||
|
@ -113,13 +112,9 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements
|
||||||
if (losePreviousTypes) {
|
if (losePreviousTypes) {
|
||||||
permanent.getCardType().clear();
|
permanent.getCardType().clear();
|
||||||
}
|
}
|
||||||
if (!token.getCardType().isEmpty()) {
|
|
||||||
for (CardType t : token.getCardType()) {
|
for (CardType t : token.getCardType()) {
|
||||||
if (!permanent.getCardType().contains(t)) {
|
|
||||||
permanent.addCardType(t);
|
permanent.addCardType(t);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if (type != null && type.isEmpty() || type == null && permanent.isLand()) {
|
if (type != null && type.isEmpty() || type == null && permanent.isLand()) {
|
||||||
permanent.getSubtype(game).retainAll(CardRepository.instance.getLandTypes());
|
permanent.getSubtype(game).retainAll(CardRepository.instance.getLandTypes());
|
||||||
}
|
}
|
||||||
|
@ -137,11 +132,10 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements
|
||||||
break;
|
break;
|
||||||
case AbilityAddingRemovingEffects_6:
|
case AbilityAddingRemovingEffects_6:
|
||||||
if (sublayer == SubLayer.NA) {
|
if (sublayer == SubLayer.NA) {
|
||||||
if (!token.getAbilities().isEmpty()) {
|
|
||||||
for (Ability ability : token.getAbilities()) {
|
for (Ability ability : token.getAbilities()) {
|
||||||
permanent.addAbility(ability, source.getSourceId(), game);
|
permanent.addAbility(ability, source.getSourceId(), game);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PTChangingEffects_7:
|
case PTChangingEffects_7:
|
||||||
|
|
|
@ -46,17 +46,13 @@ public class CardTypeApplier extends ApplyToPermanent {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Permanent permanent) {
|
public boolean apply(Game game, Permanent permanent) {
|
||||||
if (!permanent.getCardType().contains(cardType)) {
|
|
||||||
permanent.addCardType(cardType);
|
permanent.addCardType(cardType);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, MageObject mageObject) {
|
public boolean apply(Game game, MageObject mageObject) {
|
||||||
if (!mageObject.getCardType().contains(cardType)) {
|
|
||||||
mageObject.addCardType(cardType);
|
mageObject.addCardType(cardType);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue