foul-magics/Mage/src/main/java/mage/abilities/effects/common/AttachEffect.java
Susucre f75b1c9f0a
Code cleanup: protect all copy constructors (#10750)
* apply regex to change public copy constructors to protected
* cleanup code using now protected constructors
* fix manaBuilder weird casting of Mana into ConditionalMana
2023-08-04 19:34:58 -04:00

66 lines
2 KiB
Java

package mage.abilities.effects.common;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetCard;
import mage.util.CardUtil;
import java.util.UUID;
/**
* @author BetaSteward_at_googlemail.com
*/
public class AttachEffect extends OneShotEffect {
public AttachEffect(Outcome outcome) {
super(outcome);
}
public AttachEffect(Outcome outcome, String rule) {
super(outcome);
staticText = rule;
}
protected AttachEffect(final AttachEffect effect) {
super(effect);
}
@Override
public AttachEffect copy() {
return new AttachEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
if (sourcePermanent == null) {
return false;
}
// if it activating on the stack then allow +1 zcc
int zcc = game.getState().getZoneChangeCounter(sourcePermanent.getId());
if (zcc != CardUtil.getActualSourceObjectZoneChangeCounter(game, source)
&& zcc != CardUtil.getActualSourceObjectZoneChangeCounter(game, source) + 1) {
return false;
}
UUID targetId = getTargetPointer().getFirst(game, source);
Permanent permanent = game.getPermanent(targetId);
if (permanent != null) {
return permanent.addAttachment(source.getSourceId(), source, game);
}
Player player = game.getPlayer(targetId);
if (player != null) {
return player.addAttachment(source.getSourceId(), source, game);
}
if (source.getTargets().isEmpty() || !(source.getTargets().get(0) instanceof TargetCard)) {
return false;
}
Card card = game.getCard(targetId);
return card != null && card.addAttachment(source.getSourceId(), source, game);
}
}