mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
added new class for "this or another" triggered abilities
This commit is contained in:
parent
6c69939c0d
commit
a379a06485
32 changed files with 389 additions and 672 deletions
|
|
@ -53,7 +53,7 @@ public class ConstellationAbility extends TriggeredAbilityImpl {
|
|||
return false;
|
||||
}
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
return permanent != null && permanent.isEnchantment();
|
||||
return permanent != null && ((thisOr && permanent.getId().equals(getSourceId())) || permanent.isEnchantment());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.abilities.common;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.SetTargetPointer;
|
||||
|
|
@ -12,8 +11,9 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
|
@ -22,6 +22,7 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
|
|||
protected String rule;
|
||||
protected boolean controlledText;
|
||||
protected SetTargetPointer setTargetPointer;
|
||||
protected final boolean thisOrAnother;
|
||||
|
||||
/**
|
||||
* zone = BATTLEFIELD optional = false
|
||||
|
|
@ -54,11 +55,16 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
|
|||
}
|
||||
|
||||
public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, String rule, boolean controlledText) {
|
||||
this(zone, effect, filter, optional, setTargetPointer, rule, controlledText, false);
|
||||
}
|
||||
|
||||
protected EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, String rule, boolean controlledText, boolean thisOrAnother) {
|
||||
super(zone, effect, optional);
|
||||
this.filter = filter;
|
||||
this.rule = rule;
|
||||
this.controlledText = controlledText;
|
||||
this.setTargetPointer = setTargetPointer;
|
||||
this.thisOrAnother = thisOrAnother;
|
||||
}
|
||||
|
||||
public EntersBattlefieldAllTriggeredAbility(final EntersBattlefieldAllTriggeredAbility ability) {
|
||||
|
|
@ -67,6 +73,7 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
|
|||
this.rule = ability.rule;
|
||||
this.controlledText = ability.controlledText;
|
||||
this.setTargetPointer = ability.setTargetPointer;
|
||||
this.thisOrAnother = ability.thisOrAnother;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -105,7 +112,11 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
|
|||
if (rule != null && !rule.isEmpty()) {
|
||||
return rule;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder("Whenever ").append(filter.getMessage());
|
||||
StringBuilder sb = new StringBuilder("Whenever ");
|
||||
if (thisOrAnother) {
|
||||
sb.append("{this} or another ");
|
||||
}
|
||||
sb.append(filter.getMessage());
|
||||
sb.append(" enters the battlefield");
|
||||
if (controlledText) {
|
||||
sb.append(" under your control, ");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class EntersBattlefieldThisOrAnotherTriggeredAbility extends EntersBattlefieldAllTriggeredAbility {
|
||||
|
||||
private final boolean onlyControlled;
|
||||
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter) {
|
||||
this(effect, filter, false, false);
|
||||
}
|
||||
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, boolean onlyControlled) {
|
||||
this(effect, filter, optional, SetTargetPointer.NONE, onlyControlled);
|
||||
}
|
||||
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) {
|
||||
this(Zone.BATTLEFIELD, effect, filter, optional, setTargetPointer, onlyControlled);
|
||||
}
|
||||
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) {
|
||||
super(zone, effect, filter, optional, setTargetPointer, null, onlyControlled, true);
|
||||
this.onlyControlled = onlyControlled;
|
||||
}
|
||||
|
||||
private EntersBattlefieldThisOrAnotherTriggeredAbility(final EntersBattlefieldThisOrAnotherTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.onlyControlled = ability.onlyControlled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (!super.checkTrigger(event, game)) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
if (permanent.getId().equals(getSourceId())) {
|
||||
return true;
|
||||
}
|
||||
if (onlyControlled && !permanent.isControlledBy(this.getControllerId())) {
|
||||
return false;
|
||||
}
|
||||
return filter.match(permanent, getSourceId(), getControllerId(), game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility copy() {
|
||||
return new EntersBattlefieldThisOrAnotherTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -615,13 +615,7 @@ public final class StaticFilters {
|
|||
FILTER_PERMANENT_AURA.setLockedFilter(true);
|
||||
}
|
||||
|
||||
public static final FilterPermanent FILTER_PERMANENT_EQUIPMENT = new FilterPermanent();
|
||||
|
||||
static {
|
||||
FILTER_PERMANENT_EQUIPMENT.add(CardType.ARTIFACT.getPredicate());
|
||||
FILTER_PERMANENT_EQUIPMENT.add(SubType.EQUIPMENT.getPredicate());
|
||||
FILTER_PERMANENT_EQUIPMENT.setLockedFilter(true);
|
||||
}
|
||||
public static final FilterPermanent FILTER_PERMANENT_EQUIPMENT = new FilterEquipmentPermanent();
|
||||
|
||||
public static final FilterPermanent FILTER_PERMANENT_FORTIFICATION = new FilterPermanent();
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import mage.filter.FilterPermanent;
|
|||
public class FilterEquipmentPermanent extends FilterPermanent {
|
||||
|
||||
public FilterEquipmentPermanent() {
|
||||
this("equipment");
|
||||
this("Equipment");
|
||||
}
|
||||
|
||||
public FilterEquipmentPermanent(String name) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue