mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
[SOI] Added Brain In A Jar and Biarbridge Patrol.
This commit is contained in:
parent
0a8ae65f15
commit
6429f4a4f2
5 changed files with 389 additions and 4 deletions
|
|
@ -75,7 +75,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
|
|||
case YOU:
|
||||
boolean yours = event.getPlayerId().equals(this.controllerId);
|
||||
if (yours) {
|
||||
if (getTargets().size() == 0) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
@ -84,7 +84,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return yours;
|
||||
case OPPONENT:
|
||||
if (game.getPlayer(this.controllerId).hasOpponent(event.getPlayerId(), game)) {
|
||||
if (getTargets().size() == 0) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
|
|||
break;
|
||||
case ANY:
|
||||
case NEXT:
|
||||
if (getTargets().size() == 0) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
@ -105,7 +105,7 @@ public class BeginningOfEndStepTriggeredAbility extends TriggeredAbilityImpl {
|
|||
if (attachment != null && attachment.getAttachedTo() != null) {
|
||||
Permanent attachedTo = game.getPermanent(attachment.getAttachedTo());
|
||||
if (attachedTo != null && attachedTo.getControllerId().equals(event.getPlayerId())) {
|
||||
if (getTargets().size() == 0) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* 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.common;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.turn.Step;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class DealsDamageToOneOrMoreCreaturesTriggeredAbility extends DealsDamageToACreatureTriggeredAbility {
|
||||
|
||||
public DealsDamageToOneOrMoreCreaturesTriggeredAbility(Effect effect, boolean combatOnly, boolean optional, boolean setTargetPointer) {
|
||||
super(effect, combatOnly, optional, setTargetPointer);
|
||||
}
|
||||
|
||||
public DealsDamageToOneOrMoreCreaturesTriggeredAbility(DealsDamageToOneOrMoreCreaturesTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (super.checkTrigger(event, game)) {
|
||||
// check that combat damage does only once trigger also if multiple creatures were damaged because they block or were blocked by source
|
||||
if (game.getTurn().getStepType().equals(PhaseStep.COMBAT_DAMAGE) || game.getTurn().getStepType().equals(PhaseStep.FIRST_COMBAT_DAMAGE)) {
|
||||
Step step = (Step) game.getState().getValue("damageStep" + getOriginalId());
|
||||
if (!game.getStep().equals(step)) {
|
||||
// this ability did not trigger during this damage step
|
||||
game.getState().setValue("damageStep" + getOriginalId(), game.getStep());
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
game.getState().setValue("damageStep" + getOriginalId(), null);
|
||||
}
|
||||
// TODO: check that if the source did non combat damage to multiple targets at the same time, it may only trigger one time
|
||||
// I don't know currently how this can happen for a source creature that this has not already build in
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DealsDamageToOneOrMoreCreaturesTriggeredAbility copy() {
|
||||
return new DealsDamageToOneOrMoreCreaturesTriggeredAbility(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.watchers.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.constants.WatcherScope;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.watchers.Watcher;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class PermanentsSacrificedWatcher extends Watcher {
|
||||
|
||||
private final HashMap<UUID, List<Permanent>> sacrificedPermanents = new HashMap<>();
|
||||
|
||||
public PermanentsSacrificedWatcher() {
|
||||
super(PermanentsSacrificedWatcher.class.getName(), WatcherScope.GAME);
|
||||
}
|
||||
|
||||
public PermanentsSacrificedWatcher(final PermanentsSacrificedWatcher watcher) {
|
||||
super(watcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PermanentsSacrificedWatcher copy() {
|
||||
return new PermanentsSacrificedWatcher(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.SACRIFICED_PERMANENT) {
|
||||
Permanent perm = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (perm != null) {
|
||||
List<Permanent> permanents;
|
||||
if (!sacrificedPermanents.containsKey(perm.getControllerId())) {
|
||||
permanents = new ArrayList<>();
|
||||
sacrificedPermanents.put(perm.getControllerId(), permanents);
|
||||
} else {
|
||||
permanents = sacrificedPermanents.get(perm.getControllerId());
|
||||
}
|
||||
permanents.add(perm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
sacrificedPermanents.clear();
|
||||
}
|
||||
|
||||
public List<Permanent> getThisTurnSacrificedPermanents(UUID playerId) {
|
||||
return sacrificedPermanents.get(playerId);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue