foul-magics/Mage/src/main/java/mage/abilities/effects/common/RegenerateAttachedEffect.java
2018-06-02 17:59:49 +02:00

81 lines
2.4 KiB
Java

package mage.abilities.effects.common;
import java.util.Locale;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.constants.AttachmentType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
/**
* @author jeff
*/
public class RegenerateAttachedEffect extends ReplacementEffectImpl {
protected AttachmentType attachmentType;
public RegenerateAttachedEffect(AttachmentType attachmentType) {
super(Duration.EndOfTurn, Outcome.Regenerate);
this.attachmentType = attachmentType;
this.setText();
}
public RegenerateAttachedEffect(final RegenerateAttachedEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
//20110204 - 701.11
Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent == null) {
return false;
}
Permanent equipped = game.getPermanent(permanent.getAttachedTo());
if (equipped != null && equipped.regenerate(this.getId(), game)) {
this.used = true;
return true;
}
return false;
}
@Override
public RegenerateAttachedEffect copy() {
return new RegenerateAttachedEffect(this);
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
return apply(game, source);
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DESTROY_PERMANENT;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
//20110204 - 701.11c - event.getAmount() is used to signal if regeneration is allowed
Permanent equipment = game.getPermanent(source.getSourceId());
if (equipment != null) {
Permanent equipped = game.getPermanent(equipment.getAttachedTo());
if (equipped != null) {
UUID equippedID = equipped.getId();
if (event.getAmount() == 0 && event.getTargetId().equals(equippedID) && !this.used) {
return true;
}
}
}
return false;
}
private void setText() {
staticText = "Regenerate " + attachmentType.verb().toLowerCase(Locale.ENGLISH) + " creature";
}
}