forked from External/mage
* minor refactor EntersBattlefieldEffect * more minor refactoring * text fix * fix more text * more text adjustments * more text discrepancy fixes * continue the text fixes * followup fixes and more fixes
87 lines
2.8 KiB
Java
87 lines
2.8 KiB
Java
package mage.abilities.effects;
|
|
|
|
import mage.abilities.Ability;
|
|
import mage.abilities.Mode;
|
|
import mage.abilities.condition.Condition;
|
|
import mage.constants.Duration;
|
|
import mage.game.Game;
|
|
import mage.game.events.GameEvent;
|
|
|
|
/**
|
|
* Based on {@link EntersBattlefieldEffect}.
|
|
* This allows rule wording such as "as {this} becomes attached to a creature..."
|
|
* For this, there should not be a trigger, as in the case of the wording "when..."
|
|
* As per rule 614.1c, this should be a replacement effect.
|
|
* See [[Sanctuary Blade]].
|
|
*
|
|
* @author DominionSpy
|
|
*/
|
|
public class BecomesAttachedToCreatureSourceEffect extends ReplacementEffectImpl {
|
|
|
|
private final Effects baseEffects;
|
|
private final String text;
|
|
private final Condition condition;
|
|
|
|
public BecomesAttachedToCreatureSourceEffect(Effect baseEffect) {
|
|
this(baseEffect, "");
|
|
}
|
|
|
|
public BecomesAttachedToCreatureSourceEffect(Effect baseEffect, String text) {
|
|
this(baseEffect, null, text);
|
|
}
|
|
|
|
public BecomesAttachedToCreatureSourceEffect(Effect baseEffect, Condition condition, String text) {
|
|
super(Duration.WhileOnBattlefield, baseEffect.getOutcome(), false);
|
|
this.baseEffects = new Effects();
|
|
this.baseEffects.add(baseEffect);
|
|
this.text = text;
|
|
this.condition = condition;
|
|
}
|
|
|
|
protected BecomesAttachedToCreatureSourceEffect(final BecomesAttachedToCreatureSourceEffect effect) {
|
|
super(effect);
|
|
this.baseEffects = effect.baseEffects.copy();
|
|
this.text = effect.text;
|
|
this.condition = effect.condition;
|
|
}
|
|
|
|
@Override
|
|
public BecomesAttachedToCreatureSourceEffect copy() {
|
|
return new BecomesAttachedToCreatureSourceEffect(this);
|
|
}
|
|
|
|
public void addEffect(Effect effect) {
|
|
baseEffects.add(effect);
|
|
}
|
|
|
|
@Override
|
|
public boolean checksEventType(GameEvent event, Game game) {
|
|
return GameEvent.EventType.ATTACH == event.getType();
|
|
}
|
|
|
|
@Override
|
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
|
if (event.getSourceId().equals(source.getSourceId())) {
|
|
return condition == null || condition.apply(game, source);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
|
for (Effect effect : baseEffects) {
|
|
if (effect instanceof ContinuousEffect) {
|
|
game.addEffect((ContinuousEffect) effect, source);
|
|
} else {
|
|
effect.setValue("appliedEffects", event.getAppliedEffects());
|
|
effect.apply(game, source);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public String getText(Mode mode) {
|
|
return (text == null || text.isEmpty()) ? baseEffects.getText(mode) : text;
|
|
}
|
|
}
|