Implement [J22] Mild-Mannered Librarian

closes #10031
This commit is contained in:
xenohedron 2023-08-11 23:21:10 -04:00
parent a8d86e1587
commit b0f7f0c78c
3 changed files with 57 additions and 23 deletions

View file

@ -0,0 +1,44 @@
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateOncePerGameActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.AddCardSubTypeSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.constants.*;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.counters.CounterType;
/**
* @author xenohedron
*/
public final class MildManneredLibrarian extends CardImpl {
public MildManneredLibrarian(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
this.subtype.add(SubType.HUMAN);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// {3}{G}: Mild-Mannered Librarian becomes a Werewolf. Put two +1/+1 counters on it and you draw a card. Activate only once.
Ability ability = new ActivateOncePerGameActivatedAbility(Zone.BATTLEFIELD, new AddCardSubTypeSourceEffect(Duration.Custom, SubType.WEREWOLF),
new ManaCostsImpl<>("{3}{G}"), TimingRule.INSTANT);
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)).setText("Put two +1/+1 counters on it"));
ability.addEffect(new DrawCardSourceControllerEffect(1).setText("and you draw a card"));
this.addAbility(ability);
}
private MildManneredLibrarian(final MildManneredLibrarian card) {
super(card);
}
@Override
public MildManneredLibrarian copy() {
return new MildManneredLibrarian(this);
}
}

View file

@ -475,6 +475,7 @@ public final class Jumpstart2022 extends ExpansionSet {
cards.add(new SetCardInfo("Michiko Konda, Truth Seeker", 215, Rarity.RARE, mage.cards.m.MichikoKondaTruthSeeker.class));
cards.add(new SetCardInfo("Midnight Guard", 216, Rarity.COMMON, mage.cards.m.MidnightGuard.class));
cards.add(new SetCardInfo("Might of the Masses", 690, Rarity.COMMON, mage.cards.m.MightOfTheMasses.class));
cards.add(new SetCardInfo("Mild-Mannered Librarian", 41, Rarity.UNCOMMON, mage.cards.m.MildManneredLibrarian.class));
cards.add(new SetCardInfo("Military Intelligence", 322, Rarity.UNCOMMON, mage.cards.m.MilitaryIntelligence.class));
cards.add(new SetCardInfo("Miraculous Recovery", 217, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class));
cards.add(new SetCardInfo("Mire Blight", 442, Rarity.COMMON, mage.cards.m.MireBlight.class));

View file

@ -7,10 +7,12 @@ import mage.abilities.effects.ContinuousEffectImpl;
import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.util.CardUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
/**
* @author TheElk801
@ -27,9 +29,7 @@ public class AddCardSubTypeSourceEffect extends ContinuousEffectImpl {
public AddCardSubTypeSourceEffect(Duration duration, boolean inAddition, SubType... addedSubType) {
super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.Benefit);
this.inAddition = inAddition;
for (SubType cardType : addedSubType) {
this.addedSubTypes.add(cardType);
}
this.addedSubTypes.addAll(Arrays.asList(addedSubType));
}
private AddCardSubTypeSourceEffect(final AddCardSubTypeSourceEffect effect) {
@ -71,24 +71,13 @@ public class AddCardSubTypeSourceEffect extends ContinuousEffectImpl {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
StringBuilder sb = new StringBuilder();
sb.append("{this} becomes ");
boolean article = false;
for (SubType subType : addedSubTypes) {
if (!article) {
if (subType.toString().startsWith("A") || subType.toString().startsWith("E")) {
sb.append("an ");
} else {
sb.append("a ");
}
article = true;
}
sb.append(subType.toString().toLowerCase(Locale.ENGLISH)).append(" ");
}
if (inAddition) {
sb.append(" in addition to its other types ");
}
sb.append(this.getDuration().toString());
return sb.toString();
String subTypeText = addedSubTypes
.stream()
.map(SubType::toString)
.collect(Collectors.joining(" "));
return "{this} becomes "
+ CardUtil.addArticle(subTypeText)
+ (inAddition ? " in addition to its other types" : "")
+ (duration.toString().isEmpty() ? "" : ' ' + duration.toString());
}
}