From 7b118a45d864c96ff31d36b1be65837a8e1192d1 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sun, 30 Oct 2011 10:26:00 +0000 Subject: [PATCH] - Added Protection keywords to players. --- src/main/java/forge/Card.java | 5 ++-- src/main/java/forge/CardList.java | 2 +- src/main/java/forge/GameAction.java | 3 +- src/main/java/forge/GameEntity.java | 4 +++ src/main/java/forge/Player.java | 46 ++++++++++++++++++++++++++++- 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 3b5b233f36f..9bace681482 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -7354,7 +7354,7 @@ public class Card extends GameEntity implements Comparable { int restDamage = damageIn; - if (CardFactoryUtil.hasProtectionFrom(source, this)) { + if (hasProtectionFrom(source)) { return 0; } @@ -8008,7 +8008,8 @@ public class Card extends GameEntity implements Comparable { getCharacteristics().setCardColorsOverridden(cardColorsOverridden0); } - public final boolean hasProtectionFrom(Card source) { + @Override + public boolean hasProtectionFrom(Card source) { if (source == null) { return false; } diff --git a/src/main/java/forge/CardList.java b/src/main/java/forge/CardList.java index b783eebcf47..13fa2551a28 100644 --- a/src/main/java/forge/CardList.java +++ b/src/main/java/forge/CardList.java @@ -771,7 +771,7 @@ public class CardList implements Iterable { public final CardList getUnprotectedCards(final Card source) { return this.filter(new CardListFilter() { public boolean addCard(final Card c) { - return !CardFactoryUtil.hasProtectionFrom(source, c); + return !c.hasProtectionFrom(source); } }); } diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 5c8607f35b7..961707c3702 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -905,7 +905,8 @@ public class GameAction { if (tgt.canOnlyTgtOpponent() && !c.getController().getOpponent().isPlayer(pl)) { invalid = true; } else { - // TODO Check Player Protection once it's added. + if(pl.hasProtectionFrom(c)) + invalid = true; } if (invalid) { c.unEnchantEntity(pl); diff --git a/src/main/java/forge/GameEntity.java b/src/main/java/forge/GameEntity.java index 26c2bd6e3bb..7ff7c139d1e 100644 --- a/src/main/java/forge/GameEntity.java +++ b/src/main/java/forge/GameEntity.java @@ -408,6 +408,10 @@ public abstract class GameEntity extends MyObservable { enchantedBy.get(i).unEnchantEntity(this); } } + + public boolean hasProtectionFrom(Card source) { + return false; + } // ////////////////////////////// // diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 4d358f9ba2c..6be98137e84 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -532,6 +532,10 @@ public abstract class Player extends GameEntity { if (AllZoneUtil.isCardInPlay("Leyline of Punishment")) { return damage; } + + if (hasProtectionFrom(source)) { + return 0; + } int restDamage = damage; @@ -924,12 +928,52 @@ public abstract class Player extends GameEntity { */ @Override public final boolean canTarget(final SpellAbility sa) { - if (hasKeyword("Shroud") || (!this.isPlayer(sa.getActivatingPlayer()) && hasKeyword("Hexproof"))) { + if (hasKeyword("Shroud") + || (!this.isPlayer(sa.getActivatingPlayer()) && hasKeyword("Hexproof")) + || hasProtectionFrom(sa.getSourceCard())) { return false; } return true; } + + @Override + public boolean hasProtectionFrom(Card source) { + if (getKeywords() != null) { + final ArrayList list = getKeywords(); + + String kw = ""; + for (int i = 0; i < list.size(); i++) { + kw = list.get(i); + + if (kw.equals("Protection from white") && source.isWhite()) { + return true; + } + if (kw.equals("Protection from blue") && source.isBlue()) { + return true; + } + if (kw.equals("Protection from black") && source.isBlack()) { + return true; + } + if (kw.equals("Protection from red") && source.isRed()) { + return true; + } + if (kw.equals("Protection from green") && source.isGreen()) { + return true; + } + + if (kw.startsWith("Protection:")) { // uses isValid + final String characteristic = kw.split(":")[1]; + final String[] characteristics = characteristic.split(","); + if (source.isValid(characteristics, this, null)) { + return true; + } + } + + } + } + return false; + } /** *