* Fixed a problem with triggered mana abilities. Fixed a problem that AI did not always select the needed mana color. Fixed a problem with Reflecting Pool not taking triggered mana abilities into account.

This commit is contained in:
LevelX2 2016-11-03 22:37:54 +01:00
parent f07408f995
commit d2561c1752
74 changed files with 744 additions and 436 deletions

View file

@ -36,7 +36,8 @@ import java.util.UUID;
import mage.abilities.common.ZoneChangeTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.mana.ManaAbility;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.constants.AbilityType;
import mage.constants.Zone;
import mage.game.Game;
import mage.util.ThreadLocalStringBuilder;
@ -48,7 +49,7 @@ import org.apache.log4j.Logger;
* @param <T>
*/
public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Abilities<T> {
private static final Logger logger = Logger.getLogger(AbilitiesImpl.class);
private static final ThreadLocalStringBuilder threadLocalBuilder = new ThreadLocalStringBuilder(200);
@ -143,29 +144,40 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
}
@Override
public Abilities<ManaAbility> getManaAbilities(Zone zone) {
Abilities<ManaAbility> abilities = new AbilitiesImpl<>();
public Abilities<ActivatedManaAbilityImpl> getActivatedManaAbilities(Zone zone) {
Abilities<ActivatedManaAbilityImpl> abilities = new AbilitiesImpl<>();
for (T ability : this) {
if (ability instanceof ManaAbility && ability.getZone().match(zone)) {
abilities.add((ManaAbility) ability);
if (ability instanceof ActivatedManaAbilityImpl && ability.getZone().match(zone)) {
abilities.add((ActivatedManaAbilityImpl) ability);
}
}
return abilities;
}
@Override
public Abilities<ManaAbility> getAvailableManaAbilities(Zone zone, Game game) {
Abilities<ManaAbility> abilities = new AbilitiesImpl<>();
public Abilities<ActivatedManaAbilityImpl> getAvailableActivatedManaAbilities(Zone zone, Game game) {
Abilities<ActivatedManaAbilityImpl> abilities = new AbilitiesImpl<>();
for (T ability : this) {
if (ability instanceof ManaAbility && ability.getZone().match(zone)) {
if ((((ManaAbility) ability).canActivate(ability.getControllerId(), game))) {
abilities.add((ManaAbility) ability);
if (ability instanceof ActivatedManaAbilityImpl && ability.getZone().match(zone)) {
if ((((ActivatedManaAbilityImpl) ability).canActivate(ability.getControllerId(), game))) {
abilities.add((ActivatedManaAbilityImpl) ability);
}
}
}
return abilities;
}
@Override
public Abilities<Ability> getManaAbilities(Zone zone) {
Abilities<Ability> abilities = new AbilitiesImpl<>();
for (T ability : this) {
if (ability.getAbilityType().equals(AbilityType.MANA) && ability.getZone().match(zone)) {
abilities.add(ability);
}
}
return abilities;
}
@Override
public Abilities<EvasionAbility> getEvasionAbilities() {
Abilities<EvasionAbility> abilities = new AbilitiesImpl<>();
@ -340,4 +352,4 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
}
return sb.toString();
}
}
}