public void setBlocked(boolean blocked, Game game) { this.blocked = blocked; for (UUID attackerId : attackers) { Permanent attacker = game.getPermanent(attackerId); if (attacker != null) { for (UUID bandedId : attacker.getBandedCards()) { if (!bandedId.equals(attackerId)) { CombatGroup bandedGroup = game.getCombat().findGroup(bandedId); if (bandedGroup != null) { bandedGroup.blocked = blocked; } } } } } }
@Override public boolean apply(Permanent input, Game game) { CombatGroup combatGroup = game.getCombat().findGroup(input.getId()); return combatGroup != null && input.isAttacking() && input.getBandedCards().isEmpty() && combatGroup.getDefenderId().equals(defenderId); } }
@Override public boolean apply(Game game, Ability source) { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (sourcePermanent != null) { for (UUID bandedId : sourcePermanent.getBandedCards()) { Permanent banded = game.getPermanent(bandedId); if (banded != null && banded.getBandedCards() != null && banded.getBandedCards().contains(sourcePermanent.getId())) { GainAbilityTargetEffect effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(bandedId)); game.addEffect(effect, source); } } return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (sourcePermanent != null) { for (UUID bandedId : sourcePermanent.getBandedCards()) { Permanent banded = game.getPermanent(bandedId); if (banded != null && banded.isAttacking() && banded.getBandedCards() != null && banded.getBandedCards().contains(sourcePermanent.getId())) { GainAbilityTargetEffect effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(bandedId)); game.addEffect(effect, source); } } return true; } return false; } }
Permanent attacker = game.getPermanent(attackerId); if (attacker != null) { for (UUID bandedId : attacker.getBandedCards()) { if (!bandedId.equals(attackerId)) { CombatGroup bandedGroup = findGroup(bandedId);
for (UUID attackerId : attackers) { // changing defender will remove a banded attacker from its current band Permanent attacker = game.getPermanent(attackerId); if (attacker != null && attacker.getBandedCards() != null) { for (UUID bandedId : attacker.getBandedCards()) { Permanent banded = game.getPermanent(bandedId); if (banded != null) {
Permanent attacker = game.getPermanent(attackerId); if (attacker != null) { for (UUID bandedId : attacker.getBandedCards()) { if (!bandedId.equals(attackerId)) { if (blockingGroups.get(blockerId) == null || !blockingGroups.get(blockerId).attackers.contains(bandedId)) {
@Override public boolean applies(GameEvent event, Ability source, Game game) { if (super.applies(event, source, game) && event instanceof DamageCreatureEvent && event.getAmount() > 0) { DamageCreatureEvent damageEvent = (DamageCreatureEvent) event; Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (sourcePermanent != null && sourcePermanent.isAttacking() && (event.getTargetId().equals(source.getSourceId()) || sourcePermanent.getBandedCards().contains(event.getTargetId()))) { Permanent permanent = game.getPermanentOrLKIBattlefield(damageEvent.getSourceId()); if (permanent != null && filter.match(permanent, game)) { return true; } } } return false; } }
private boolean appliesBandsWithOther(List<UUID> creatureIds, Game game) { for (UUID creatureId : creatureIds) { Permanent perm = game.getPermanent(creatureId); if (perm != null && perm.getBandedCards() != null) { for (Ability ab : perm.getAbilities()) { if (ab.getClass().equals(BandsWithOtherAbility.class)) {
if (permanent.getBandedCards() != null && !permanent.getBandedCards().isEmpty()) { for (UUID bandedId : permanent.getBandedCards()) { Permanent banded = game.getPermanent(bandedId); if (banded != null) {
if (attacker != null && player != null) { CombatGroup combatGroup = findGroup(attacker.getId()); if (combatGroup != null && attacker.getBandedCards().isEmpty() && getAttackers().size() > 1) { boolean canBand = attacker.getAbilities().containsKey(BandingAbility.getInstance().getId()); List<Ability> bandsWithOther = new ArrayList<>(); if (permanent != null) { for (UUID bandedId : attacker.getBandedCards()) { permanent.addBandedCard(bandedId); Permanent banded = game.getPermanent(bandedId); StringBuilder sb = new StringBuilder(player.getLogName()).append(" formed a band with ").append((attacker.getBandedCards().size() + 1) + " creatures: "); sb.append(attacker.getLogName()); for (UUID id : attacker.getBandedCards()) { sb.append(", "); Permanent permanent = game.getPermanent(id);
for (UUID bandedId : chosenPermanent.getBandedCards()) { CombatGroup bandedGroup = game.getCombat().findGroup(bandedId); if (bandedGroup != null && chosenGroup.getBlockers().size() == 1) {
if (perm.getBandedCards() != null && !perm.getBandedCards().isEmpty()) { for (UUID bandedId : new ArrayList<>(perm.getBandedCards())) { Permanent banded = getPermanent(bandedId); if (banded == null || !perm.isControlledBy(banded.getControllerId()) || !banded.getBandedCards().contains(perm.getId())) { perm.removeBandedCard(bandedId); if (banded != null && banded.getBandedCards().contains(perm.getId())) { banded.removeBandedCard(perm.getId()); } else if (perm.getBandedCards() != null && !perm.getBandedCards().isEmpty()) { perm.clearBandedCards(); for (UUID bandedId : perm.getBandedCards()) { Permanent banded = getPermanent(bandedId); if (banded != null) {
for (UUID bandedCard : permanent.getBandedCards()) { bandedCards.add(bandedCard);
for (UUID bandedId : chosenPermanent.getBandedCards()) { CombatGroup bandedGroup = game.getCombat().findGroup(bandedId); if (bandedGroup != null && chosenGroup.getBlockers().size() == 1) {