[LCI] Implement Preacher of the Schism

This commit is contained in:
Susucre 2023-11-05 15:38:02 +01:00
parent f4ef2bbd88
commit ee60325c07
6 changed files with 216 additions and 60 deletions

View file

@ -0,0 +1,36 @@
package mage.abilities.condition.common;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.other.PlayerWithTheMostLifePredicate;
import mage.game.Game;
import mage.players.Player;
import java.util.UUID;
/**
* @author Susucr
*/
public enum SourceAttackingPlayerWithMostLifeCondition implements Condition {
instance;
@Override
public boolean apply(Game game, Ability source) {
UUID defenderId = game.getCombat().getDefenderId(source.getSourceId());
if (defenderId == null) {
return false;
}
Player attackedPlayer = game.getPlayer(defenderId);
return PlayerWithTheMostLifePredicate.instance.apply(
new ObjectSourcePlayer<>(attackedPlayer, source.getControllerId(), source),
game
);
}
@Override
public String toString() {
return "{this} is attacking the player with the most life or tied for most life";
}
}

View file

@ -1,16 +1,18 @@
package mage.abilities.keyword;
import java.util.UUID;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.other.PlayerWithTheMostLifePredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.players.Player;
import java.util.UUID;
/**
* Dethrone triggers whenever a creature with dethrone attacks the player with
* the most life or tied for the most life. When the ability resolves, you put a
@ -48,23 +50,15 @@ public class DethroneAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
UUID defenderId = game.getCombat().getDefenderId(getSourceId());
if (defenderId != null) {
Player attackedPlayer = game.getPlayer(defenderId);
Player controller = game.getPlayer(getControllerId());
if (attackedPlayer != null && controller != null) {
int mostLife = Integer.MIN_VALUE;
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
if (player.getLife() > mostLife) {
mostLife = player.getLife();
}
}
}
return attackedPlayer.getLife() == mostLife;
}
if (defenderId == null) {
return false;
}
return false;
Player attackedPlayer = game.getPlayer(defenderId);
return PlayerWithTheMostLifePredicate.instance.apply(
new ObjectSourcePlayer<>(attackedPlayer, getControllerId(), null),
game
);
}
@Override

View file

@ -0,0 +1,32 @@
package mage.filter.predicate.other;
import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate;
import mage.game.Game;
import mage.players.Player;
import java.util.UUID;
/**
* @author Susucr
*/
public enum PlayerWithTheMostLifePredicate implements ObjectSourcePlayerPredicate<Player> {
instance;
@Override
public boolean apply(ObjectSourcePlayer<Player> input, Game game) {
Player inputPlayer = input.getObject();
if (inputPlayer == null) {
return false;
}
int mostLife = Integer.MIN_VALUE;
for (UUID playerId : game.getState().getPlayersInRange(input.getPlayerId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null && player.getLife() > mostLife) {
mostLife = player.getLife();
}
}
return inputPlayer.getLife() == mostLife;
}
}