Refactoring methods which add counters to track which player adds the counters (ready for review) (#7448)

* added parameter for player adding counters to players

* added parameter for player adding counters to cards/permanents

* updated methods to use new parameter

* fixed a few initial errors

* refactored instances of cards that add counters by a player other than the controller

* fixed some instances of incorrect arguments

* refactored abilities that trigger off of a particular player adding counters

* a few more cards that were missed

* [KHM] Implemented Vorinclex, Monstrous Raider

* added test for Vorinclex, Monstrous Raider

* fixed a test failure
This commit is contained in:
Evan Kranzler 2021-01-26 19:06:13 -05:00 committed by GitHub
parent 4db79ae3c1
commit a535cb5adc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
320 changed files with 701 additions and 481 deletions

View file

@ -2112,7 +2112,7 @@ public abstract class PlayerImpl implements Player, Serializable {
sourceControllerId = ((Permanent) attacker).getControllerId();
}
if (sourceAbilities != null && sourceAbilities.containsKey(InfectAbility.getInstance().getId())) {
addCounters(CounterType.POISON.createInstance(actualDamage), source, game);
addCounters(CounterType.POISON.createInstance(actualDamage), sourceControllerId, source, game);
} else {
GameEvent damageToLifeLossEvent = new GameEvent(GameEvent.EventType.DAMAGE_CAUSES_LIFE_LOSS,
playerId, source, playerId, actualDamage, combatDamage);
@ -2151,10 +2151,12 @@ public abstract class PlayerImpl implements Player, Serializable {
}
@Override
public boolean addCounters(Counter counter, Ability source, Game game) {
public boolean addCounters(Counter counter, UUID playerAddingCounters, Ability source, Game game) {
boolean returnCode = true;
GameEvent addingAllEvent = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTERS, playerId, source,
playerId, counter.getName(), counter.getCount());
GameEvent addingAllEvent = GameEvent.getEvent(
GameEvent.EventType.ADD_COUNTERS, playerId, source,
playerAddingCounters, counter.getName(), counter.getCount()
);
if (!game.replaceEvent(addingAllEvent)) {
int amount = addingAllEvent.getAmount();
int finalAmount = amount;
@ -2162,13 +2164,17 @@ public abstract class PlayerImpl implements Player, Serializable {
for (int i = 0; i < amount; i++) {
Counter eventCounter = counter.copy();
eventCounter.remove(eventCounter.getCount() - 1);
GameEvent addingOneEvent = GameEvent.getEvent(GameEvent.EventType.ADD_COUNTER, playerId, source,
playerId, counter.getName(), 1);
GameEvent addingOneEvent = GameEvent.getEvent(
GameEvent.EventType.ADD_COUNTER, playerId, source,
playerAddingCounters, counter.getName(), 1
);
addingOneEvent.setFlag(isEffectFlag);
if (!game.replaceEvent(addingOneEvent)) {
getCounters().addCounter(eventCounter);
GameEvent addedOneEvent = GameEvent.getEvent(GameEvent.EventType.COUNTER_ADDED, playerId, source,
playerId, counter.getName(), 1);
GameEvent addedOneEvent = GameEvent.getEvent(
GameEvent.EventType.COUNTER_ADDED, playerId, source,
playerAddingCounters, counter.getName(), 1
);
addedOneEvent.setFlag(addingOneEvent.getFlag());
game.fireEvent(addedOneEvent);
} else {
@ -2177,8 +2183,10 @@ public abstract class PlayerImpl implements Player, Serializable {
}
}
if (finalAmount > 0) {
GameEvent addedAllEvent = GameEvent.getEvent(GameEvent.EventType.COUNTERS_ADDED, playerId, source,
playerId, counter.getName(), amount);
GameEvent addedAllEvent = GameEvent.getEvent(
GameEvent.EventType.COUNTERS_ADDED, playerId, source,
playerAddingCounters, counter.getName(), amount
);
addedAllEvent.setFlag(addingAllEvent.getFlag());
game.fireEvent(addedAllEvent);
}