mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 20:11:59 -08:00
Merge fix
This commit is contained in:
parent
316e0dc1f3
commit
ba3b0e4cb7
2 changed files with 28 additions and 46 deletions
|
|
@ -5,19 +5,23 @@ import mage.abilities.effects.Effect;
|
|||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.DamagedBatchForPlayersEvent;
|
||||
import mage.game.events.DamagedEvent;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* A triggered ability for whenever one or more creatures deal combat damage to
|
||||
* you. Has an optional component for setting the target pointer to the opponent
|
||||
* whose creatures dealt combat damage to you.
|
||||
*
|
||||
*
|
||||
* @author alexander-novo
|
||||
*/
|
||||
public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
// Whether or not the ability should set a target targetting the opponent who
|
||||
// Whether the ability should set a target targetting the opponent who
|
||||
// controls the creatures who dealt damage to you
|
||||
private final boolean setTarget;
|
||||
|
||||
|
|
@ -47,7 +51,7 @@ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl
|
|||
* @param optional Whether or not the ability is optional
|
||||
*/
|
||||
public CombatDamageDealtToYouTriggeredAbility(Zone zone, Effect effect, boolean setTarget,
|
||||
boolean optional) {
|
||||
boolean optional) {
|
||||
super(zone, effect, optional);
|
||||
|
||||
this.setTarget = setTarget;
|
||||
|
|
@ -68,19 +72,29 @@ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl
|
|||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
DamagedBatchForPlayersEvent damageEvent = (DamagedBatchForPlayersEvent) event;
|
||||
boolean check = damageEvent.getEvents()
|
||||
.stream()
|
||||
.anyMatch(c -> c.isCombatDamage() && c.getPlayerId() == this.controllerId);
|
||||
DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event;
|
||||
|
||||
if (check) {
|
||||
if (this.setTarget) {
|
||||
this.getEffects().setTargetPointer(
|
||||
new FixedTarget(game.getPermanent(damageEvent.getSourceId()).getControllerId()));
|
||||
boolean isDamaged = false;
|
||||
UUID damageSourceControllerID = null;
|
||||
for (DamagedEvent damagedEvent : dEvent.getEvents()) {
|
||||
if (damagedEvent.isCombatDamage() && damagedEvent.getPlayerId() == this.controllerId) {
|
||||
isDamaged = true;
|
||||
// TODO: current code support only one controller
|
||||
// (it's can be potentially bugged in team mode with multiple attack players)
|
||||
Permanent damageSource = game.getPermanent(damagedEvent.getSourceId());
|
||||
if (damageSource != null) {
|
||||
damageSourceControllerID = damageSource.getControllerId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isDamaged) {
|
||||
if (this.setTarget && damageSourceControllerID != null) {
|
||||
this.getEffects().setTargetPointer(new FixedTarget(damageSourceControllerID));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
package mage.game.events;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
|
|
@ -31,46 +29,16 @@ public abstract class DamagedBatchEvent extends GameEvent {
|
|||
.sum();
|
||||
}
|
||||
|
||||
public Set<UUID> getTargetIds() {
|
||||
return events
|
||||
.stream()
|
||||
.map(GameEvent::getTargetId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated // events can store a diff value, so search it from events list instead
|
||||
public UUID getTargetId() {
|
||||
// TODO: replace it by getTargetIds or seearch in getEvents, enable exception
|
||||
//throw new IllegalStateException("Wrong code usage. Must search batch value from a list");
|
||||
return events
|
||||
.stream()
|
||||
.map(GameEvent::getTargetId)
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
public Set<UUID> getSourceIds() {
|
||||
return events
|
||||
.stream()
|
||||
.map(GameEvent::getSourceId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list.");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated // events can store a diff value, so search it from events list instead
|
||||
public UUID getSourceId() {
|
||||
// TODO: replace it by getSourceIds or seearch in getEvents, enable exception
|
||||
//throw new IllegalStateException("Wrong code usage. Must search batch value from a list");
|
||||
return events
|
||||
.stream()
|
||||
.map(GameEvent::getSourceId)
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list.");
|
||||
}
|
||||
|
||||
public void addEvent(DamagedEvent event) {
|
||||
|
|
@ -90,7 +58,7 @@ public abstract class DamagedBatchEvent extends GameEvent {
|
|||
event = new DamagedBatchForPermanentsEvent();
|
||||
event.addEvent(damagedEvent);
|
||||
} else {
|
||||
event = null;
|
||||
throw new IllegalArgumentException("Wrong code usage. Unknown damage event for a new batch: " + damagedEvent.getClass().getName());
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue