From d244e52ede9088bbebc553a701997beb8a276c9c Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 14 Jan 2023 14:28:26 -0500 Subject: [PATCH] [ONE] Implement Skrelv's Hive --- Mage.Sets/src/mage/cards/s/SkrelvsHive.java | 64 +++++++++++++++++++ .../src/mage/sets/PhyrexiaAllWillBeOne.java | 1 + .../condition/common/CorruptedCondition.java | 40 ++++++++++++ .../main/java/mage/constants/AbilityWord.java | 1 + 4 files changed, 106 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/s/SkrelvsHive.java create mode 100644 Mage/src/main/java/mage/abilities/condition/common/CorruptedCondition.java diff --git a/Mage.Sets/src/mage/cards/s/SkrelvsHive.java b/Mage.Sets/src/mage/cards/s/SkrelvsHive.java new file mode 100644 index 0000000000..98e78fa470 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SkrelvsHive.java @@ -0,0 +1,64 @@ +package mage.cards.s; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.CorruptedCondition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.ToxicAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.permanent.token.PhyrexianMiteToken; + +/** + * @author TheElk801 + */ +public final class SkrelvsHive extends CardImpl { + + private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); + + static { + filter.add(new AbilityPredicate(ToxicAbility.class)); + } + + public SkrelvsHive(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); + + // At the beginning of your upkeep, you lose 1 life and create a 1/1 colorless Phyrexian Mite artifact creature token with toxic 1 and "This creature can't block." + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new LoseLifeSourceControllerEffect(1), TargetController.YOU, false + ); + ability.addEffect(new CreateTokenEffect(new PhyrexianMiteToken()).concatBy("and")); + this.addAbility(ability); + + // Corrupted -- As long as an opponent has three or more poison counters, creatures you control with toxic have lifelink. + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilityAllEffect( + LifelinkAbility.getInstance(), Duration.WhileOnBattlefield, filter + ), CorruptedCondition.instance, "as long as an opponent has three " + + "or more poison counters, creatures you control with toxic have lifelink" + )).setAbilityWord(AbilityWord.CORRUPTED).addHint(CorruptedCondition.getHint())); + } + + private SkrelvsHive(final SkrelvsHive card) { + super(card); + } + + @Override + public SkrelvsHive copy() { + return new SkrelvsHive(this); + } +} diff --git a/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java b/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java index 105e61f277..1546f61f12 100644 --- a/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java +++ b/Mage.Sets/src/mage/sets/PhyrexiaAllWillBeOne.java @@ -36,6 +36,7 @@ public final class PhyrexiaAllWillBeOne extends ExpansionSet { cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Razorverge Thicket", 257, Rarity.RARE, mage.cards.r.RazorvergeThicket.class)); cards.add(new SetCardInfo("Seachrome Coast", 258, Rarity.RARE, mage.cards.s.SeachromeCoast.class)); + cards.add(new SetCardInfo("Skrelv's Hive", 34, Rarity.RARE, mage.cards.s.SkrelvsHive.class)); cards.add(new SetCardInfo("Swamp", 274, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("The Monumental Facade", 255, Rarity.RARE, mage.cards.t.TheMonumentalFacade.class)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/CorruptedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/CorruptedCondition.java new file mode 100644 index 0000000000..a01806a78b --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/CorruptedCondition.java @@ -0,0 +1,40 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.abilities.hint.ConditionHint; +import mage.abilities.hint.Hint; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.stack.Spell; +import mage.players.Player; + +import java.util.Objects; + +/** + * @author TheElk801 + */ + +public enum CorruptedCondition implements Condition { + instance; + private static final Hint hint = new ConditionHint(instance, "An opponent has three or more poison counters"); + + @Override + public boolean apply(Game game, Ability source) { + return game.getOpponents(source.getControllerId()) + .stream() + .map(game::getPlayer) + .filter(Objects::nonNull) + .map(Player::getCounters) + .anyMatch(counters -> counters.getCount(CounterType.POISON) >= 3); + } + + @Override + public String toString() { + return "an opponent has three or more poison counters"; + } + + public static Hint getHint() { + return hint; + } +} diff --git a/Mage/src/main/java/mage/constants/AbilityWord.java b/Mage/src/main/java/mage/constants/AbilityWord.java index 14b5a2528a..6a8e916c06 100644 --- a/Mage/src/main/java/mage/constants/AbilityWord.java +++ b/Mage/src/main/java/mage/constants/AbilityWord.java @@ -17,6 +17,7 @@ public enum AbilityWord { COHORT("Cohort"), CONSTELLATION("Constellation"), CONVERGE("Converge"), + CORRUPTED("Corrupted"), COUNCILS_DILEMMA("Council's dilemma"), COVEN("Coven"), DELIRIUM("Delirium"),