@Override public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { return game.getBattlefield().containsPermanent(sourceId); }
public Permanent getPermanent(UUID permanentId) { if (permanentId != null && battlefield.containsPermanent(permanentId)) { Permanent permanent = battlefield.getPermanent(permanentId); // setZone(permanent.getId(), Zone.BATTLEFIELD); // shouldn't this be set anyway? (LevelX2) return permanent; } return null; }
@Override public boolean apply(Game game, Ability source) { if (game.getBattlefield().containsPermanent(shireiId)) { return super.apply(game, source); } return false; } }
if (state.getBattlefield().containsPermanent(objectId)) { object = state.getBattlefield().getPermanent(objectId);
if (!target.isNotTarget()) { for (UUID targetId : target.getTargets()) { if (game.getBattlefield().containsPermanent(targetId)) { returnValue = true; targetedPermanentIds.add(targetId); if (game.getBattlefield().containsPermanent(targetId)) { returnValue = true; targetedPermanentIds.add(targetId);
if (state.getBattlefield().containsPermanent(objectId)) { object = state.getBattlefield().getPermanent(objectId); return object;
return new SurviveInfo(!sim.getBattlefield().containsPermanent(attacker.getId()), !sim.getBattlefield().containsPermanent(blocker.getId()));
@Override public void addAbility(Ability ability, UUID sourceId, Game game, boolean createNewId) { if (!abilities.containsKey(ability.getId())) { Ability copyAbility = ability.copy(); if (createNewId) { copyAbility.newId(); // needed so that source can get an ability multiple times (e.g. Raging Ravine) } copyAbility.setControllerId(controllerId); copyAbility.setSourceId(objectId); game.getState().addAbility(copyAbility, sourceId, this); abilities.add(copyAbility); } else if (!createNewId) { // triggered abilities must be added to the state().triggerdAbilities // still as long as the prev. permanent is known to the LKI (e.g. Showstopper) so gained dies triggered ability will trigger if (!game.getBattlefield().containsPermanent(this.getId())) { Ability copyAbility = ability.copy(); copyAbility.setControllerId(controllerId); copyAbility.setSourceId(objectId); game.getState().addAbility(copyAbility, sourceId, this); } } }
public static SurviveInfo getCombatInfo(Game game, UUID attackingPlayerId, UUID defendingPlayerId, Permanent attacker) { Game sim = game.copy(); Combat combat = sim.getCombat(); combat.setAttacker(attackingPlayerId); combat.setDefenders(sim); UUID defenderId = sim.getCombat().getDefenders().iterator().next(); boolean triggered = false; sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, defendingPlayerId, defendingPlayerId)); sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { triggered = true; sim.getStack().resolve(sim); sim.applyEffects(); } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_BLOCKERS_STEP_POST, sim.getActivePlayerId(), sim.getActivePlayerId())); simulateStep(sim, new FirstCombatDamageStep()); simulateStep(sim, new CombatDamageStep()); simulateStep(sim, new EndOfCombatStep()); // The following commented out call produces random freezes. //sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { triggered = true; sim.getStack().resolve(sim); sim.applyEffects(); } return new SurviveInfo(!sim.getBattlefield().containsPermanent(attacker.getId()), false, sim.getPlayer(defenderId), triggered); }
public static SurviveInfo willItSurvive(Game game, UUID attackingPlayerId, UUID defendingPlayerId, Permanent attacker, Permanent blocker) { Game sim = game.copy(); Combat combat = sim.getCombat(); combat.setAttacker(attackingPlayerId); combat.setDefenders(sim); if (blocker == null || attacker == null || sim.getPlayer(defendingPlayerId) == null) { return null; } sim.getPlayer(defendingPlayerId).declareBlocker(defendingPlayerId, blocker.getId(), attacker.getId(), sim); sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, defendingPlayerId, defendingPlayerId)); sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { sim.getStack().resolve(sim); sim.applyEffects(); } sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_BLOCKERS_STEP_POST, sim.getActivePlayerId(), sim.getActivePlayerId())); simulateStep(sim, new FirstCombatDamageStep()); simulateStep(sim, new CombatDamageStep()); simulateStep(sim, new EndOfCombatStep()); // The following commented out call produces random freezes. //sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { sim.getStack().resolve(sim); sim.applyEffects(); } return new SurviveInfo(!sim.getBattlefield().containsPermanent(attacker.getId()), !sim.getBattlefield().containsPermanent(blocker.getId())); }
Filter filterTest = targetTest.getFilter(); if (filterTest.match(landChosen, game)) { if (game.getBattlefield().containsPermanent(landChosen.getId())) { //verify that it is still on the battlefield game.informPlayers(landsController.getLogName() + " attaches " + steamVines.getLogName() + " to " + landChosen.getLogName()); Effect effect = new AttachEffect(Outcome.Neutral);