Replaced more replacement effects by ContinuousRuleModifyingEffects or RestrictionEffects.

This commit is contained in:
LevelX2 2014-08-02 11:21:28 +02:00
parent b195b81316
commit df3b6afc8d
38 changed files with 285 additions and 434 deletions

View file

@ -78,6 +78,11 @@ public abstract class ContinuousRuleModifiyingEffectImpl extends ContinuousEffec
this.messageToGameLog = effect.messageToGameLog;
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public String getInfoMessage(Ability source, GameEvent event, Game game) {
if (infoMessage == null) {

View file

@ -28,25 +28,26 @@
package mage.abilities.effects.common.combat;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.RestrictionEffect;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
/**
*
* @author LevelX2
*/
public class CantAttackUnlessDefenderControllsPermanent extends ReplacementEffectImpl {
public class CantAttackUnlessDefenderControllsPermanent extends RestrictionEffect {
private final FilterPermanent filter;
public CantAttackUnlessDefenderControllsPermanent(FilterPermanent filter) {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
super(Duration.WhileOnBattlefield);
this.filter = filter;
staticText = new StringBuilder("{this} can't attack unless defending player controls ").append(filter.getMessage()).toString();
}
@ -56,28 +57,37 @@ public class CantAttackUnlessDefenderControllsPermanent extends ReplacementEffec
this.filter = effect.filter;
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
return permanent.getId().equals(source.getSourceId());
}
@Override
public boolean canAttack(Game game) {
return false;
}
@Override
public boolean canAttack(UUID defenderId, Ability source, Game game) {
UUID defendingPlayerId = null;
Player player = game.getPlayer(defenderId);
if (player == null) {
Permanent permanent = game.getPermanent(defenderId);
if (permanent != null) {
defendingPlayerId = permanent.getControllerId();
}
} else {
defendingPlayerId = defenderId;
}
if (defendingPlayerId != null && game.getBattlefield().countAll(filter, defendingPlayerId, game) == 0) {
return true;
}
return true;
}
@Override
public CantAttackUnlessDefenderControllsPermanent copy() {
return new CantAttackUnlessDefenderControllsPermanent(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
return true;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event.getType() == GameEvent.EventType.DECLARE_ATTACKER && source.getSourceId().equals(event.getSourceId())) {
if (game.getBattlefield().countAll(filter, event.getTargetId(), game) == 0) {
return true;
}
}
return false;
}
}

View file

@ -27,23 +27,20 @@
*/
package mage.abilities.effects.common.combat;
import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.RestrictionEffect;
import mage.constants.Duration;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
/**
*
* @author LevelX2
*/
public class CantBlockAttackActivateAttachedEffect extends ReplacementEffectImpl {
public class CantBlockAttackActivateAttachedEffect extends RestrictionEffect {
public CantBlockAttackActivateAttachedEffect() {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
super(Duration.WhileOnBattlefield);
staticText = "Enchanted creature can't attack or block, and its activated abilities can't be activated";
}
@ -52,30 +49,34 @@ public class CantBlockAttackActivateAttachedEffect extends ReplacementEffectImpl
}
@Override
public CantBlockAttackActivateAttachedEffect copy() {
return new CantBlockAttackActivateAttachedEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
return true;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event.getType() == GameEvent.EventType.DECLARE_ATTACKER || event.getType() == GameEvent.EventType.DECLARE_BLOCKER || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) {
Permanent enchantment = game.getPermanent(source.getSourceId());
if (enchantment != null && enchantment.getAttachedTo() != null) {
if (event.getSourceId().equals(enchantment.getAttachedTo())) {
return true;
}
public boolean applies(Permanent permanent, Ability source, Game game) {
Permanent enchantment = game.getPermanent(source.getSourceId());
if (enchantment != null && enchantment.getAttachedTo() != null) {
if (permanent.getId().equals(enchantment.getAttachedTo())) {
return true;
}
}
return false;
}
@Override
public boolean canAttack(Game game) {
return false;
}
@Override
public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game) {
return false;
}
@Override
public boolean canUseActivatedAbilities(Permanent permanent, Ability source, Game game) {
return false;
}
@Override
public CantBlockAttackActivateAttachedEffect copy() {
return new CantBlockAttackActivateAttachedEffect(this);
}
}

View file

@ -28,18 +28,15 @@
package mage.abilities.effects.common.continious;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.ContinuousRuleModifiyingEffectImpl;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.TargetController;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.watchers.common.CastSpellLastTurnWatcher;
/**