forked from External/mage
[LCI] Implement Preacher of the Schism
This commit is contained in:
parent
f4ef2bbd88
commit
ee60325c07
6 changed files with 216 additions and 60 deletions
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue