From d00b70c494336fd9c82152e81478110918d2e684 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sun, 25 Sep 2011 12:48:08 +0000 Subject: [PATCH] - Added a new static ability "PreventDamage". - Converted Personal Sanctuary to it. --- .gitattributes | 1 + res/cardsfolder/p/personal_sanctuary.txt | 2 +- src/main/java/forge/Card.java | 7 ++++ src/main/java/forge/Player.java | 5 +++ .../card/staticAbility/StaticAbility.java | 16 +++++++++ .../StaticAbility_PreventDamage.java | 35 +++++++++++++++++++ 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java diff --git a/.gitattributes b/.gitattributes index c0f201b2975..58b584cba54 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9991,6 +9991,7 @@ src/main/java/forge/card/spellability/Target_Selection.java svneol=native#text/p src/main/java/forge/card/spellability/package-info.java svneol=native#text/plain src/main/java/forge/card/staticAbility/StaticAbility.java svneol=native#text/plain src/main/java/forge/card/staticAbility/StaticAbility_Continuous.java svneol=native#text/plain +src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java -text src/main/java/forge/card/staticAbility/package-info.java svneol=native#text/plain src/main/java/forge/card/trigger/Trigger.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerHandler.java svneol=native#text/plain diff --git a/res/cardsfolder/p/personal_sanctuary.txt b/res/cardsfolder/p/personal_sanctuary.txt index 899aae52dbb..17b7366dfd4 100644 --- a/res/cardsfolder/p/personal_sanctuary.txt +++ b/res/cardsfolder/p/personal_sanctuary.txt @@ -2,7 +2,7 @@ Name:Personal Sanctuary ManaCost:2 W Types:Enchantment Text:no text -S:Mode$ Continuous | Affected$ You | AddKeyword$ Prevent all damage that would be dealt to you | PlayerTurn$ True | Description$ During your turn, prevent all damage that would be dealt to you. +S:Mode$ PreventDamage | Target$ You | PlayerTurn$ True | Description$ During your turn, prevent all damage that would be dealt to you. SVar:Rarity:Rare SVar:Picture:http://www.wizards.com/global/images/magic/general/personal_sanctuary.jpg SetInfo:M12|Rare|http://magiccards.info/scans/en/m12/30.jpg diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 159527b2912..c786bd142e8 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -5698,10 +5698,17 @@ public class Card extends GameEntity implements Comparable { return 0; } } + + //stPreventDamage CardList allp = AllZoneUtil.getCardsIn(Zone.Battlefield); for (Card ca : allp) { + ArrayList staticAbilities = ca.getStaticAbilities(); + for (StaticAbility stAb : staticAbilities) { + restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage); + } + if (ca.hasStartOfKeyword("stPreventDamage")) { //syntax stPreventDamage:[Who is protected(You/Player/ValidCards)]:[ValidSource]:[Amount/All] int keywordPosition = ca.getKeywordPosition("stPreventDamage"); diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 95b25aa3697..82059f892a7 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -6,6 +6,7 @@ import forge.card.cardFactory.CardFactoryUtil; import forge.card.mana.ManaPool; import forge.card.spellability.Ability; import forge.card.spellability.SpellAbility; +import forge.card.staticAbility.StaticAbility; import javax.swing.*; import java.util.*; @@ -411,6 +412,10 @@ public abstract class Player extends GameEntity { //stPreventDamage CardList allp = AllZoneUtil.getCardsIn(Zone.Battlefield); for (Card ca : allp) { + ArrayList staticAbilities = ca.getStaticAbilities(); + for (StaticAbility stAb : staticAbilities) { + restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage); + } if (ca.hasStartOfKeyword("stPreventDamage")) { //syntax stPreventDamage:[Who is protected(You/Player/ValidCards)]:[ValidSource]:[Amount/All] int KeywordPosition = ca.getKeywordPosition("stPreventDamage"); diff --git a/src/main/java/forge/card/staticAbility/StaticAbility.java b/src/main/java/forge/card/staticAbility/StaticAbility.java index 4da697790a5..3a4868a9e51 100644 --- a/src/main/java/forge/card/staticAbility/StaticAbility.java +++ b/src/main/java/forge/card/staticAbility/StaticAbility.java @@ -152,6 +152,22 @@ public class StaticAbility { StaticAbility_Continuous.applyContinuousAbility(this); } + //apply the ability if it has the right mode + public int applyAbility(String mode, Card source, GameEntity target, int in) { + + //don't apply the ability if it hasn't got the right mode + if (!mapParams.get("Mode").equals(mode)) + return in; + + if (isSuppressed() || !checkConditions()) + return in; + + if (mode.equals("PreventDamage")) + return StaticAbility_PreventDamage.applyPreventDamageAbility(this, source, target, in); + + return in; + } + public boolean checkConditions() { Player controller = hostCard.getController(); diff --git a/src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java b/src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java new file mode 100644 index 00000000000..49edd5907a2 --- /dev/null +++ b/src/main/java/forge/card/staticAbility/StaticAbility_PreventDamage.java @@ -0,0 +1,35 @@ +package forge.card.staticAbility; + +import java.util.HashMap; + +import forge.Card; +import forge.GameEntity; + +public class StaticAbility_PreventDamage { + + /** + * + * TODO Write javadoc for this method. + * @param stAb a StaticAbility + */ + public static int applyPreventDamageAbility(final StaticAbility stAb, Card source, GameEntity target, int damage) { + HashMap params = stAb.getMapParams(); + Card hostCard = stAb.getHostCard(); + int restDamage = damage; + + if(params.containsKey("Source") && !source.isValid(params.get("Source"), hostCard.getController(), hostCard)) { + return restDamage; + } + + if(params.containsKey("Target") && !target.isValid(params.get("Target"), hostCard.getController(), hostCard)) { + return restDamage; + } + + if(!params.containsKey("Amount") || params.get("Amount").equals("All")) { + return 0; + } + + return restDamage; + } + +}