forked from External/mage
110 lines
3.8 KiB
Java
110 lines
3.8 KiB
Java
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
package mage.abilities.keyword;
|
|
|
|
import mage.abilities.Ability;
|
|
import mage.abilities.TriggeredAbilityImpl;
|
|
import mage.abilities.effects.OneShotEffect;
|
|
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
|
import mage.constants.Outcome;
|
|
import mage.constants.Zone;
|
|
import mage.counters.CounterType;
|
|
import mage.game.Game;
|
|
import mage.game.events.DamagedPlayerEvent;
|
|
import mage.game.events.GameEvent;
|
|
import mage.game.permanent.Permanent;
|
|
import mage.util.CardUtil;
|
|
|
|
/**
|
|
*
|
|
* @author LevelX2
|
|
*/
|
|
public class RenownAbility extends TriggeredAbilityImpl {
|
|
|
|
private int renownValue;
|
|
|
|
public RenownAbility(int renownValue) {
|
|
super(Zone.BATTLEFIELD, new BecomesRenownedSourceEffect(renownValue), false);
|
|
this.renownValue = renownValue;
|
|
}
|
|
|
|
public RenownAbility(final RenownAbility ability) {
|
|
super(ability);
|
|
this.renownValue = ability.renownValue;
|
|
}
|
|
|
|
@Override
|
|
public RenownAbility copy() {
|
|
return new RenownAbility(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean checkEventType(GameEvent event, Game game) {
|
|
return event.getType() == GameEvent.EventType.DAMAGED_PLAYER;
|
|
}
|
|
|
|
@Override
|
|
public boolean checkInterveningIfClause(Game game) {
|
|
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(getSourceId());
|
|
return sourcePermanent != null && !sourcePermanent.isRenowned();
|
|
}
|
|
|
|
@Override
|
|
public boolean checkTrigger(GameEvent event, Game game) {
|
|
return event.getSourceId().equals(getSourceId())
|
|
&& ((DamagedPlayerEvent) event).isCombatDamage();
|
|
}
|
|
|
|
public int getRenownValue() {
|
|
return renownValue;
|
|
}
|
|
}
|
|
|
|
class BecomesRenownedSourceEffect extends OneShotEffect {
|
|
|
|
public BecomesRenownedSourceEffect(int renownValue) {
|
|
super(Outcome.BoostCreature);
|
|
this.staticText = setText(renownValue);
|
|
}
|
|
|
|
public BecomesRenownedSourceEffect(final BecomesRenownedSourceEffect effect) {
|
|
super(effect);
|
|
}
|
|
|
|
@Override
|
|
public BecomesRenownedSourceEffect copy() {
|
|
return new BecomesRenownedSourceEffect(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean apply(Game game, Ability source) {
|
|
Permanent permanent = game.getPermanent(source.getSourceId());
|
|
if (permanent != null && source instanceof RenownAbility) {
|
|
game.informPlayers(permanent.getLogName() + " is now renowned");
|
|
int renownValue = ((RenownAbility) source).getRenownValue();
|
|
// handle renown = X
|
|
if (renownValue == Integer.MAX_VALUE) {
|
|
renownValue = source.getManaCostsToPay().getX();
|
|
}
|
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance(renownValue), true).apply(game, source);
|
|
permanent.setRenowned(true);
|
|
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.BECOMES_RENOWNED, source.getSourceId(), source.getSourceId(), source.getControllerId(), renownValue));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private String setText(int renownValue) {
|
|
// Renown 1 (When this creature deals combat damage to a player, if it isn't renowned, put a +1/+1 counter on it and it becomes renowned.)
|
|
StringBuilder sb = new StringBuilder("Renown ");
|
|
sb.append(renownValue == Integer.MAX_VALUE ? "X" : renownValue)
|
|
.append(" <i>(When this creature deals combat damage to a player, if it isn't renowned, put ")
|
|
.append(renownValue == Integer.MAX_VALUE ? "X" : CardUtil.numberToText(renownValue, "a"))
|
|
.append(" +1/+1 counter on it and it becomes renowned.)</i>");
|
|
return sb.toString();
|
|
}
|
|
|
|
}
|