mirror of
https://github.com/magefree/mage.git
synced 2025-12-21 19:11:59 -08:00
[LCI] Implement Curator of Sun's Creation
This commit is contained in:
parent
77408164f1
commit
bc335b949b
6 changed files with 155 additions and 2 deletions
83
Mage.Sets/src/mage/cards/c/CuratorOfSunsCreation.java
Normal file
83
Mage.Sets/src/mage/cards/c/CuratorOfSunsCreation.java
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.keyword.DiscoverEffect;
|
||||
import mage.abilities.hint.StaticHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public final class CuratorOfSunsCreation extends CardImpl {
|
||||
|
||||
public CuratorOfSunsCreation(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.ARTIFICER);
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever you discover, discover again for the same value. This ability triggers only once per turn.
|
||||
this.addAbility(new CuratorOfSunsCreationTriggeredAbility());
|
||||
}
|
||||
|
||||
private CuratorOfSunsCreation(final CuratorOfSunsCreation card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CuratorOfSunsCreation copy() {
|
||||
return new CuratorOfSunsCreation(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CuratorOfSunsCreationTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
CuratorOfSunsCreationTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, null, false);
|
||||
setTriggersOnceEachTurn(true);
|
||||
}
|
||||
|
||||
private CuratorOfSunsCreationTriggeredAbility(final CuratorOfSunsCreationTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CuratorOfSunsCreationTriggeredAbility copy() {
|
||||
return new CuratorOfSunsCreationTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.DISCOVER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (!event.getPlayerId().equals(getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int amount = event.getAmount();
|
||||
this.getEffects().clear();
|
||||
this.getEffects().add(new DiscoverEffect(amount));
|
||||
this.getHints().clear();
|
||||
this.getHints().add(new StaticHint("Discover amount: " + amount));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you discover, discover again for the same value.";
|
||||
}
|
||||
}
|
||||
|
|
@ -55,6 +55,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Cosmium Confluence", 181, Rarity.RARE, mage.cards.c.CosmiumConfluence.class));
|
||||
cards.add(new SetCardInfo("Cosmium Kiln", 6, Rarity.UNCOMMON, mage.cards.c.CosmiumKiln.class));
|
||||
cards.add(new SetCardInfo("Council of Echoes", 51, Rarity.UNCOMMON, mage.cards.c.CouncilOfEchoes.class));
|
||||
cards.add(new SetCardInfo("Curator of Sun's Creation", 141, Rarity.UNCOMMON, mage.cards.c.CuratorOfSunsCreation.class));
|
||||
cards.add(new SetCardInfo("Dauntless Dismantler", 8, Rarity.UNCOMMON, mage.cards.d.DauntlessDismantler.class));
|
||||
cards.add(new SetCardInfo("Deep-Cavern Bat", 102, Rarity.UNCOMMON, mage.cards.d.DeepCavernBat.class));
|
||||
cards.add(new SetCardInfo("Deepfathom Echo", 228, Rarity.RARE, mage.cards.d.DeepfathomEcho.class));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
package org.mage.test.cards.single.lci;
|
||||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class CuratorOfSunsCreationTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* {@link mage.cards.c.CuratorOfSunsCreation} <br>
|
||||
* Curator of Sun's Creation {3}{R} <br>
|
||||
* Creature — Human Artificer <br>
|
||||
* Whenever you discover, discover again for the same value. This ability triggers only once each turn. <br>
|
||||
* 3/3
|
||||
*/
|
||||
private static final String curator = "Curator of Sun's Creation";
|
||||
|
||||
@Test
|
||||
public void test_trigger() {
|
||||
setStrictChooseMode(true);
|
||||
skipInitShuffling();
|
||||
|
||||
addCard(Zone.BATTLEFIELD, playerA, curator);
|
||||
addCard(Zone.HAND, playerA, "Trumpeting Carnosaur"); // {4}{R}{R}, etb discover 5
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6);
|
||||
|
||||
addCard(Zone.LIBRARY, playerA, "Grizzly Bears", 3); // 2/2 for 2
|
||||
addCard(Zone.LIBRARY, playerA, "Grave Titan"); // cost too much for discover 5
|
||||
addCard(Zone.LIBRARY, playerA, "Grizzly Bears"); // 2/2 for 2
|
||||
addCard(Zone.LIBRARY, playerA, "Grave Titan"); // cost too much for discover 5
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Trumpeting Carnosaur");
|
||||
setChoice(playerA, true); // cast for free from first discover
|
||||
setChoice(playerA, true); // cast for free from second discover
|
||||
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
assertPermanentCount(playerA, "Grizzly Bears", 2);
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import mage.filter.FilterCard;
|
|||
import mage.filter.common.FilterNonlandCard;
|
||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.DiscoverEvent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
|
|
@ -82,6 +83,7 @@ public class DiscoverEffect extends OneShotEffect {
|
|||
}
|
||||
cards.retainZone(Zone.EXILED, game);
|
||||
player.putCardsOnBottomOfLibrary(cards, game, source, false);
|
||||
game.fireEvent(new DiscoverEvent(source, player.getId(), amount));
|
||||
return card;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
Mage/src/main/java/mage/game/events/DiscoverEvent.java
Normal file
14
Mage/src/main/java/mage/game/events/DiscoverEvent.java
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
package mage.game.events;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class DiscoverEvent extends GameEvent {
|
||||
public DiscoverEvent(Ability source, UUID playerId, int amount) {
|
||||
super(EventType.DISCOVER, null, source, playerId, amount, false);
|
||||
}
|
||||
}
|
||||
|
|
@ -528,10 +528,18 @@ public class GameEvent implements Serializable {
|
|||
targetId player making the choice
|
||||
sourceId sourceId of the ability forcing the choice
|
||||
playerId controller of the ability forcing the choice
|
||||
amount numner of times choice is repeated
|
||||
amount number of times choice is repeated
|
||||
flag not used for this event
|
||||
*/
|
||||
FACE_VILLAINOUS_CHOICE,
|
||||
/* DISCOVER
|
||||
targetId not used for this event
|
||||
sourceId sourceId of the ability discovering
|
||||
playerId controller of the ability
|
||||
amount discover value
|
||||
flag not used for this event
|
||||
*/
|
||||
DISCOVER,
|
||||
//custom events
|
||||
CUSTOM_EVENT
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue