use of mage.MageObjectReference in project mage by magefree.
the class SerpentsSoulJarWatcher method checkPermission.
static boolean checkPermission(UUID playerId, Ability source, Game game) {
if (!playerId.equals(source.getControllerId())) {
return false;
}
MageObjectReference mor = new MageObjectReference(source);
SerpentsSoulJarWatcher watcher = game.getState().getWatcher(SerpentsSoulJarWatcher.class);
return watcher.morMap.containsKey(mor) && watcher.morMap.get(mor).getOrDefault(playerId, 0) > 0;
}
use of mage.MageObjectReference in project mage by magefree.
the class TitaniasSongEffect method apply.
@Override
public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
switch(layer) {
case TypeChangingEffects_4:
if (sublayer == SubLayer.NA) {
affectedObjectList.clear();
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) {
if (permanent != null) {
affectedObjectList.add(new MageObjectReference(permanent, game));
permanent.addCardType(game, CardType.CREATURE);
}
}
}
break;
case AbilityAddingRemovingEffects_6:
for (Iterator<MageObjectReference> it = affectedObjectList.iterator(); it.hasNext(); ) {
Permanent permanent = it.next().getPermanent(game);
if (permanent != null) {
permanent.removeAllAbilities(source.getSourceId(), game);
}
}
break;
case PTChangingEffects_7:
if (sublayer == SubLayer.SetPT_7b) {
for (Iterator<MageObjectReference> it = affectedObjectList.iterator(); it.hasNext(); ) {
Permanent permanent = it.next().getPermanent(game);
if (permanent != null) {
int manaCost = permanent.getManaValue();
permanent.getPower().setValue(manaCost);
permanent.getToughness().setValue(manaCost);
}
}
}
}
return true;
}
use of mage.MageObjectReference in project mage by magefree.
the class UginTheIneffableLookAtFaceDownEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
MageObject sourceObject = source.getSourceObject(game);
if (player == null || sourceObject == null) {
return false;
}
Card card = player.getLibrary().getFromTop(game);
if (card == null) {
return false;
}
// exile and look
UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter());
if (player.moveCardsToExile(card, source, game, false, exileZoneId, sourceObject.getIdName() + " (" + player.getName() + ")")) {
card.turnFaceDown(source, game, source.getControllerId());
player.lookAtCards(player.getName() + " - " + card.getIdName() + " - " + CardUtil.sdf.format(System.currentTimeMillis()), card, game);
}
// create token
Set<MageObjectReference> tokenObjs = new HashSet<>();
CreateTokenEffect effect = new CreateTokenEffect(new UginTheIneffableToken());
effect.apply(game, source);
// with return ability
for (UUID addedTokenId : effect.getLastAddedTokenIds()) {
// display referenced exiled face-down card on token
SimpleStaticAbility sa = new SimpleStaticAbility(Zone.BATTLEFIELD, new InfoEffect("Referenced object: " + card.getId().toString().substring(0, 3)));
GainAbilityTargetEffect gainAbilityEffect = new GainAbilityTargetEffect(sa, Duration.WhileOnBattlefield);
gainAbilityEffect.setTargetPointer(new FixedTarget(addedTokenId));
game.addEffect(gainAbilityEffect, source);
// look at face-down card in exile
UginTheIneffableLookAtFaceDownEffect lookAtEffect = new UginTheIneffableLookAtFaceDownEffect();
lookAtEffect.setTargetPointer(new FixedTarget(card.getId(), game));
game.addEffect(lookAtEffect, source);
tokenObjs.add(new MageObjectReference(addedTokenId, game));
game.addDelayedTriggeredAbility(new UginTheIneffableDelayedTriggeredAbility(tokenObjs, new MageObjectReference(card, game)), source);
}
return true;
}
use of mage.MageObjectReference in project mage by magefree.
the class WallOfDustRestrictionEffect method init.
@Override
public void init(Ability source, Game game) {
super.init(source, game);
Permanent perm = game.getPermanent(getTargetPointer().getFirst(game, source));
if (perm != null) {
targetPermanentReference = new MageObjectReference(perm, game);
setStartingControllerAndTurnNum(game, perm.getControllerId(), game.getActivePlayerId());
} else {
discard();
}
}
use of mage.MageObjectReference in project mage by magefree.
the class AttacksFirstTimeTriggeredAbility method checkTrigger.
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (!event.getSourceId().equals(this.getSourceId())) {
return false;
}
AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class);
if (watcher == null) {
return false;
}
Permanent sourcePerm = game.getPermanentOrLKIBattlefield(event.getSourceId());
if (sourcePerm == null) {
return false;
}
for (MageObjectReference mor : watcher.getAttackedThisTurnCreaturesCounts().keySet()) {
if (mor.refersTo(sourcePerm, game) && watcher.getAttackedThisTurnCreaturesCounts().get(mor) > 1) {
return false;
}
}
return true;
}
Aggregations