foul-magics/Mage/src/main/java/mage/abilities/effects/common/CantBeRegeneratedSourceEffect.java
Oleg Agafonov a9152e886f refactor: improved ContinuousRuleModifying effects:
* removed unused apply methods;
* added miss overrides of checksEventType (related to wrong event usage, see 5f2edde20c).
2023-09-22 21:32:55 +04:00

71 lines
2.1 KiB
Java

package mage.abilities.effects.common;
import java.util.Objects;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
/**
* @author jeffwadsworth
*/
public class CantBeRegeneratedSourceEffect extends ContinuousRuleModifyingEffectImpl {
public CantBeRegeneratedSourceEffect(Duration duration) {
super(duration, Outcome.Benefit, false, false);
this.staticText = buildStaticText();
}
protected CantBeRegeneratedSourceEffect(final CantBeRegeneratedSourceEffect effect) {
super(effect);
}
@Override
public CantBeRegeneratedSourceEffect copy() {
return new CantBeRegeneratedSourceEffect(this);
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.REGENERATE;
}
@Override
public void init(Ability source, Game game) {
super.init(source, game);
if (duration.isOnlyValidIfNoZoneChange()) {
// If source permanent is no longer onto battlefield discard the effect
if (source.getSourcePermanentIfItStillExists(game) == null) {
discard();
}
}
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
return Objects.equals(source.getSourceId(), event.getTargetId());
}
private String buildStaticText() {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
StringBuilder sb = new StringBuilder();
sb.append("{this} can't be regenerated");
if (!duration.toString().isEmpty()) {
if (duration == Duration.EndOfTurn) {
sb.append(" this turn");
} else {
sb.append(' ').append(duration.toString());
}
}
return sb.toString();
}
}