Merge branch 'landwalkFix' into 'master'

CombatUtil: fix Basic Landwalk abilities

See merge request core-developers/forge!1348
This commit is contained in:
Michael Kamensky
2019-02-02 13:24:17 +00:00

View File

@@ -43,7 +43,6 @@ import forge.util.TextUtil;
import forge.util.collect.FCollection; import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
import forge.util.maps.MapToAmount; import forge.util.maps.MapToAmount;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import java.util.List; import java.util.List;
@@ -534,6 +533,7 @@ public class CombatUtil {
List<String> walkTypes = Lists.newArrayList(); List<String> walkTypes = Lists.newArrayList();
// handle basic landwalk and snow basic landwalk
for (int i = 0; i < LANDWALK_KEYWORDS.length; i++) { for (int i = 0; i < LANDWALK_KEYWORDS.length; i++) {
final String basic = MagicColor.Constant.BASIC_LANDS.get(i); final String basic = MagicColor.Constant.BASIC_LANDS.get(i);
final String landwalk = LANDWALK_KEYWORDS[i]; final String landwalk = LANDWALK_KEYWORDS[i];
@@ -553,19 +553,24 @@ public class CombatUtil {
String keyword = inst.getOriginal(); String keyword = inst.getOriginal();
if (keyword.equals("Legendary landwalk")) { if (keyword.equals("Legendary landwalk")) {
walkTypes.add("Land.Legendary"); walkTypes.add("Land.Legendary");
} else if (keyword.equals("Desertwalk")) {
walkTypes.add("Desert");
} else if (keyword.equals("Nonbasic landwalk")) { } else if (keyword.equals("Nonbasic landwalk")) {
walkTypes.add("Land.nonBasic"); walkTypes.add("Land.nonBasic");
} else if (keyword.equals("Snow landwalk")) { } else if (keyword.equals("Snow landwalk")) {
walkTypes.add("Land.Snow"); walkTypes.add("Land.Snow");
} else if (keyword.endsWith("walk")) { } else if (keyword.endsWith("walk")) {
final String landtype = TextUtil.fastReplace(keyword, "walk", ""); String landtype = TextUtil.fastReplace(keyword, "walk", "");
String valid = landtype;
// substract Snow type
if (landtype.startsWith("Snow ")) { if (landtype.startsWith("Snow ")) {
walkTypes.add(landtype.substring(5) + ".Snow"); landtype = landtype.substring(5);
} else if (CardType.isALandType(landtype)) { valid = landtype + ".Snow";
}
// basic land types are handled before
if (CardType.isALandType(landtype) && !CardType.isABasicLandType(landtype)) {
if (!walkTypes.contains(landtype)) { if (!walkTypes.contains(landtype)) {
walkTypes.add(landtype); walkTypes.add(valid);
} }
} }
} }
@@ -575,10 +580,10 @@ public class CombatUtil {
return false; return false;
} }
final String valid = StringUtils.join(walkTypes, ","); final String[] valid = walkTypes.toArray(new String[0]);
final CardCollectionView defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield); final CardCollectionView defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield);
for (final Card c : defendingLands) { for (final Card c : defendingLands) {
if (c.isValid(valid.split(","), defendingPlayer, attacker, null)) { if (c.isValid(valid, defendingPlayer, attacker, null)) {
return true; return true;
} }
} }