mirror of
https://github.com/magefree/mage.git
synced 2026-01-26 05:09:16 -08:00
MageSingleton marker interface
This commit is contained in:
parent
60bd1f9585
commit
5b83ffe518
35 changed files with 147 additions and 79 deletions
|
|
@ -116,7 +116,9 @@ public abstract class AbilityImpl<T extends AbilityImpl<T>> implements Ability {
|
|||
|
||||
@Override
|
||||
public void newId() {
|
||||
this.id = UUID.randomUUID();
|
||||
if (!(this instanceof MageSingleton)) {
|
||||
this.id = UUID.randomUUID();
|
||||
}
|
||||
getEffects().newId();
|
||||
}
|
||||
|
||||
|
|
|
|||
19
Mage/src/mage/abilities/MageSingleton.java
Normal file
19
Mage/src/mage/abilities/MageSingleton.java
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
package mage.abilities;
|
||||
|
||||
/**
|
||||
* Marker class for singleton abilities and effects.
|
||||
* Prevents effects and abilities to get new Id across the games on the server.
|
||||
* Can be used only for stateless effects and abilities.
|
||||
*
|
||||
* Intended to be used to avoid bugs and for performance reasons.
|
||||
*
|
||||
* "Must" be used for abilities that use getId() as compare parameter like:
|
||||
* FlyingAbility.getInstance().getId()
|
||||
* in
|
||||
* permanent.getAbilities().containsKey(FlyingAbility.getInstance().getId())
|
||||
*
|
||||
*
|
||||
* @author noxx
|
||||
*/
|
||||
public interface MageSingleton {
|
||||
}
|
||||
|
|
@ -5,19 +5,21 @@
|
|||
|
||||
package mage.abilities.common;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Duration;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author maurer.it_at_gmail.com
|
||||
*/
|
||||
public class CantBlockAbility extends SimpleStaticAbility {
|
||||
public class CantBlockAbility extends SimpleStaticAbility implements MageSingleton {
|
||||
|
||||
private static final CantBlockAbility fINSTANCE = new CantBlockAbility();
|
||||
|
||||
|
|
@ -45,7 +47,7 @@ public class CantBlockAbility extends SimpleStaticAbility {
|
|||
|
||||
}
|
||||
|
||||
class CantBlockEffect extends RestrictionEffect<CantBlockEffect> {
|
||||
class CantBlockEffect extends RestrictionEffect<CantBlockEffect> implements MageSingleton {
|
||||
|
||||
public CantBlockEffect() {
|
||||
super(Duration.WhileOnBattlefield);
|
||||
|
|
|
|||
|
|
@ -27,16 +27,18 @@
|
|||
*/
|
||||
package mage.abilities.common;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
import static mage.Constants.*;
|
||||
import static mage.Constants.AbilityType;
|
||||
import static mage.Constants.Zone;
|
||||
|
||||
/**
|
||||
* @author BetaSteward
|
||||
*/
|
||||
public class DamageAsThoughNotBlockedAbility extends StaticAbility<DamageAsThoughNotBlockedAbility> {
|
||||
public class DamageAsThoughNotBlockedAbility extends StaticAbility<DamageAsThoughNotBlockedAbility> implements MageSingleton {
|
||||
|
||||
private static final DamageAsThoughNotBlockedAbility fINSTANCE = new DamageAsThoughNotBlockedAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ package mage.abilities.effects;
|
|||
import mage.Constants.*;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.DomainValue;
|
||||
|
|
@ -104,7 +105,9 @@ public abstract class ContinuousEffectImpl<T extends ContinuousEffectImpl<T>> ex
|
|||
|
||||
@Override
|
||||
public void newId() {
|
||||
this.id = UUID.randomUUID();
|
||||
if (!(this instanceof MageSingleton)) {
|
||||
this.id = UUID.randomUUID();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ package mage.abilities.effects;
|
|||
|
||||
import mage.Constants.EffectType;
|
||||
import mage.Constants.Outcome;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.Mode;
|
||||
import mage.target.targetpointer.FirstTargetPointer;
|
||||
import mage.target.targetpointer.TargetPointer;
|
||||
|
|
@ -103,7 +104,9 @@ public abstract class EffectImpl<T extends Effect<T>> implements Effect<T> {
|
|||
|
||||
@Override
|
||||
public void newId() {
|
||||
this.id = UUID.randomUUID();
|
||||
if (!(this instanceof MageSingleton)) {
|
||||
this.id = UUID.randomUUID();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -28,18 +28,20 @@
|
|||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.PostResolveEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class ExileSpellEffect extends PostResolveEffect<ExileSpellEffect> {
|
||||
public class ExileSpellEffect extends PostResolveEffect<ExileSpellEffect> implements MageSingleton {
|
||||
|
||||
private static final ExileSpellEffect fINSTANCE = new ExileSpellEffect();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,20 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.PostResolveEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.effects.PostResolveEffect;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class ReturnToHandSpellEffect extends PostResolveEffect<ReturnToHandSpellEffect> {
|
||||
public class ReturnToHandSpellEffect extends PostResolveEffect<ReturnToHandSpellEffect> implements MageSingleton {
|
||||
private static final ReturnToHandSpellEffect fINSTANCE = new ReturnToHandSpellEffect();
|
||||
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
|
|
|
|||
|
|
@ -28,21 +28,22 @@
|
|||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.PostResolveEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import java.util.UUID;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.effects.PostResolveEffect;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nantuko
|
||||
*/
|
||||
public class ShuffleSpellEffect extends PostResolveEffect<ShuffleSpellEffect> {
|
||||
public class ShuffleSpellEffect extends PostResolveEffect<ShuffleSpellEffect> implements MageSingleton {
|
||||
|
||||
private static final ShuffleSpellEffect fINSTANCE = new ShuffleSpellEffect();
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ package mage.abilities.effects.common.continious;
|
|||
import mage.Constants.Duration;
|
||||
import mage.Constants.Outcome;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.game.Game;
|
||||
|
|
@ -41,7 +42,7 @@ import mage.game.permanent.Permanent;
|
|||
*
|
||||
* @author North
|
||||
*/
|
||||
public class CanBlockOnlyFlyingEffect extends ReplacementEffectImpl<CanBlockOnlyFlyingEffect> {
|
||||
public class CanBlockOnlyFlyingEffect extends ReplacementEffectImpl<CanBlockOnlyFlyingEffect> implements MageSingleton {
|
||||
|
||||
public CanBlockOnlyFlyingEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Detriment);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
|
@ -37,7 +38,7 @@ import java.io.ObjectStreamException;
|
|||
*
|
||||
* @author nantuko
|
||||
*/
|
||||
public class ChangelingAbility extends StaticAbility<ChangelingAbility> {
|
||||
public class ChangelingAbility extends StaticAbility<ChangelingAbility> implements MageSingleton {
|
||||
|
||||
private static final ChangelingAbility fINSTANCE = new ChangelingAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class DeathtouchAbility extends StaticAbility<DeathtouchAbility> {
|
||||
public class DeathtouchAbility extends StaticAbility<DeathtouchAbility> implements MageSingleton {
|
||||
|
||||
private static final DeathtouchAbility fINSTANCE = new DeathtouchAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class DefenderAbility extends StaticAbility<DefenderAbility> {
|
||||
public class DefenderAbility extends StaticAbility<DefenderAbility> implements MageSingleton {
|
||||
|
||||
private static final DefenderAbility fINSTANCE = new DefenderAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class DoubleStrikeAbility extends StaticAbility<DoubleStrikeAbility> {
|
||||
public class DoubleStrikeAbility extends StaticAbility<DoubleStrikeAbility> implements MageSingleton {
|
||||
|
||||
private static final DoubleStrikeAbility fINSTANCE = new DoubleStrikeAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,21 +28,22 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
import mage.Constants;
|
||||
import mage.Constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.EvasionAbility;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class FearAbility extends EvasionAbility<FearAbility> {
|
||||
public class FearAbility extends EvasionAbility<FearAbility> implements MageSingleton {
|
||||
|
||||
private static final FearAbility fINSTANCE = new FearAbility();
|
||||
|
||||
|
|
@ -70,7 +71,7 @@ public class FearAbility extends EvasionAbility<FearAbility> {
|
|||
|
||||
}
|
||||
|
||||
class FearEffect extends RestrictionEffect<FearEffect> {
|
||||
class FearEffect extends RestrictionEffect<FearEffect> implements MageSingleton {
|
||||
|
||||
public FearEffect() {
|
||||
super(Duration.WhileOnBattlefield);
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class FirstStrikeAbility extends StaticAbility<FirstStrikeAbility> {
|
||||
public class FirstStrikeAbility extends StaticAbility<FirstStrikeAbility> implements MageSingleton {
|
||||
|
||||
private static final FirstStrikeAbility fINSTANCE = new FirstStrikeAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class FlashAbility extends StaticAbility<FlashAbility> {
|
||||
public class FlashAbility extends StaticAbility<FlashAbility> implements MageSingleton {
|
||||
|
||||
private static final FlashAbility fINSTANCE = new FlashAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ package mage.abilities.keyword;
|
|||
import mage.Constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.EvasionAbility;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
|
@ -41,7 +42,7 @@ import java.io.ObjectStreamException;
|
|||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class FlyingAbility extends EvasionAbility<FlyingAbility> {
|
||||
public class FlyingAbility extends EvasionAbility<FlyingAbility> implements MageSingleton {
|
||||
|
||||
private static final FlyingAbility fINSTANCE = new FlyingAbility();
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ public class FlyingAbility extends EvasionAbility<FlyingAbility> {
|
|||
|
||||
}
|
||||
|
||||
class FlyingEffect extends RestrictionEffect<FlyingEffect> {
|
||||
class FlyingEffect extends RestrictionEffect<FlyingEffect> implements MageSingleton {
|
||||
|
||||
public FlyingEffect() {
|
||||
super(Duration.EndOfGame);
|
||||
|
|
@ -79,11 +80,6 @@ class FlyingEffect extends RestrictionEffect<FlyingEffect> {
|
|||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newId() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||
if (permanent.getAbilities().containsKey(FlyingAbility.getInstance().getId())) {
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class HasteAbility extends StaticAbility<HasteAbility> {
|
||||
public class HasteAbility extends StaticAbility<HasteAbility> implements MageSingleton {
|
||||
|
||||
private static final HasteAbility fINSTANCE = new HasteAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,21 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.CantTargetSourceEffect;
|
||||
import mage.filter.FilterStackObject;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
* Hexproof
|
||||
* (This creature or player can't be the target of spells or abilities your opponents control.)
|
||||
*
|
||||
* @author loki
|
||||
*/
|
||||
public class HexproofAbility extends SimpleStaticAbility {
|
||||
public class HexproofAbility extends SimpleStaticAbility implements MageSingleton {
|
||||
|
||||
private static final HexproofAbility fINSTANCE;
|
||||
private static final FilterStackObject filter;
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class IndestructibleAbility extends StaticAbility<IndestructibleAbility> {
|
||||
public class IndestructibleAbility extends StaticAbility<IndestructibleAbility> implements MageSingleton {
|
||||
|
||||
private static final IndestructibleAbility fINSTANCE = new IndestructibleAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,10 +28,12 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
* 702.87. Infect
|
||||
*
|
||||
|
|
@ -55,7 +57,7 @@ import mage.abilities.StaticAbility;
|
|||
*
|
||||
* @author nantuko
|
||||
*/
|
||||
public class InfectAbility extends StaticAbility<InfectAbility> {
|
||||
public class InfectAbility extends StaticAbility<InfectAbility> implements MageSingleton {
|
||||
|
||||
private static final InfectAbility fINSTANCE = new InfectAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,12 @@ package mage.abilities.keyword;
|
|||
import mage.Constants;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.EvasionAbility;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
public class IntimidateAbility extends EvasionAbility<IntimidateAbility> {
|
||||
public class IntimidateAbility extends EvasionAbility<IntimidateAbility> implements MageSingleton {
|
||||
private static final IntimidateAbility fInstance = new IntimidateAbility();
|
||||
|
||||
public static IntimidateAbility getInstance() {
|
||||
|
|
@ -29,7 +30,7 @@ public class IntimidateAbility extends EvasionAbility<IntimidateAbility> {
|
|||
}
|
||||
}
|
||||
|
||||
class IntimidateEffect extends RestrictionEffect<IntimidateEffect> {
|
||||
class IntimidateEffect extends RestrictionEffect<IntimidateEffect> implements MageSingleton {
|
||||
public IntimidateEffect() {
|
||||
super(Constants.Duration.WhileOnBattlefield);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class LeylineAbility extends StaticAbility<LeylineAbility>{
|
||||
public class LeylineAbility extends StaticAbility<LeylineAbility> implements MageSingleton {
|
||||
|
||||
private static final LeylineAbility fINSTANCE = new LeylineAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class LifelinkAbility extends StaticAbility<LifelinkAbility> {
|
||||
public class LifelinkAbility extends StaticAbility<LifelinkAbility> implements MageSingleton {
|
||||
|
||||
private static final LifelinkAbility fINSTANCE = new LifelinkAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class PhasingAbility extends StaticAbility<PhasingAbility> {
|
||||
public class PhasingAbility extends StaticAbility<PhasingAbility> implements MageSingleton {
|
||||
|
||||
private static final PhasingAbility fINSTANCE = new PhasingAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class ReachAbility extends StaticAbility<ReachAbility> {
|
||||
public class ReachAbility extends StaticAbility<ReachAbility> implements MageSingleton {
|
||||
|
||||
private static final ReachAbility fINSTANCE = new ReachAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class ShroudAbility extends StaticAbility<ShroudAbility> {
|
||||
public class ShroudAbility extends StaticAbility<ShroudAbility> implements MageSingleton {
|
||||
|
||||
private static final ShroudAbility fINSTANCE = new ShroudAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
|
@ -36,7 +37,7 @@ import java.io.ObjectStreamException;
|
|||
/**
|
||||
* @author noxx
|
||||
*/
|
||||
public class SoulbondAbility extends StaticAbility<SoulbondAbility> {
|
||||
public class SoulbondAbility extends StaticAbility<SoulbondAbility> implements MageSingleton {
|
||||
|
||||
private static final SoulbondAbility fINSTANCE = new SoulbondAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mage.abilities.keyword;
|
|||
|
||||
import mage.Constants;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.game.Game;
|
||||
|
|
@ -11,7 +12,7 @@ import mage.game.events.GameEvent;
|
|||
* Split Second
|
||||
* As long as this spell is on the stack, players can't cast other spells or activate abilities that aren't mana abilities.
|
||||
*/
|
||||
public class SplitSecondAbility extends SimpleStaticAbility {
|
||||
public class SplitSecondAbility extends SimpleStaticAbility implements MageSingleton {
|
||||
private static final SplitSecondAbility ability = new SplitSecondAbility();
|
||||
|
||||
public static SplitSecondAbility getInstance() {
|
||||
|
|
@ -33,7 +34,7 @@ public class SplitSecondAbility extends SimpleStaticAbility {
|
|||
}
|
||||
}
|
||||
|
||||
class SplitSecondEffect extends ReplacementEffectImpl<SplitSecondEffect> {
|
||||
class SplitSecondEffect extends ReplacementEffectImpl<SplitSecondEffect> implements MageSingleton {
|
||||
SplitSecondEffect() {
|
||||
super(Constants.Duration.WhileOnStack, Constants.Outcome.Detriment);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class TrampleAbility extends StaticAbility<TrampleAbility> {
|
||||
public class TrampleAbility extends StaticAbility<TrampleAbility> implements MageSingleton {
|
||||
|
||||
private static final TrampleAbility fINSTANCE = new TrampleAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ package mage.abilities.keyword;
|
|||
import mage.Constants.Duration;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.EvasionAbility;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.effects.RestrictionEffect;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
|
@ -40,7 +41,7 @@ import java.io.ObjectStreamException;
|
|||
/**
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class UnblockableAbility extends EvasionAbility<UnblockableAbility> {
|
||||
public class UnblockableAbility extends EvasionAbility<UnblockableAbility> implements MageSingleton {
|
||||
|
||||
private static final UnblockableAbility fINSTANCE = new UnblockableAbility();
|
||||
|
||||
|
|
@ -68,7 +69,7 @@ public class UnblockableAbility extends EvasionAbility<UnblockableAbility> {
|
|||
|
||||
}
|
||||
|
||||
class UnblockableEffect extends RestrictionEffect<UnblockableEffect> {
|
||||
class UnblockableEffect extends RestrictionEffect<UnblockableEffect> implements MageSingleton {
|
||||
|
||||
public UnblockableEffect() {
|
||||
super(Duration.EndOfGame);
|
||||
|
|
@ -78,11 +79,6 @@ class UnblockableEffect extends RestrictionEffect<UnblockableEffect> {
|
|||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newId() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||
if (permanent.getAbilities().containsKey(UnblockableAbility.getInstance().getId())) {
|
||||
|
|
|
|||
|
|
@ -28,15 +28,17 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class VigilanceAbility extends StaticAbility<VigilanceAbility> {
|
||||
public class VigilanceAbility extends StaticAbility<VigilanceAbility> implements MageSingleton {
|
||||
|
||||
private static final VigilanceAbility fINSTANCE = new VigilanceAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
package mage.abilities.keyword;
|
||||
|
||||
import mage.Constants.Zone;
|
||||
import mage.abilities.MageSingleton;
|
||||
import mage.abilities.StaticAbility;
|
||||
|
||||
import java.io.ObjectStreamException;
|
||||
|
|
@ -46,7 +47,7 @@ import java.io.ObjectStreamException;
|
|||
*
|
||||
* @author nantuko
|
||||
*/
|
||||
public class WitherAbility extends StaticAbility<WitherAbility> {
|
||||
public class WitherAbility extends StaticAbility<WitherAbility> implements MageSingleton {
|
||||
|
||||
private static final WitherAbility fINSTANCE = new WitherAbility();
|
||||
|
||||
|
|
|
|||
|
|
@ -310,7 +310,9 @@ public class StackAbility implements StackObject, Ability {
|
|||
|
||||
@Override
|
||||
public void newId() {
|
||||
this.ability.newId();
|
||||
if (!(this instanceof MageSingleton)) {
|
||||
this.ability.newId();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue