mirror of
https://github.com/magefree/mage.git
synced 2025-12-26 21:42:07 -08:00
[MKM] Implement Kaya, Spirits' Justice and new zone change batch event (#11753)
--------- Co-authored-by: Matthew Wilson <matthew_w@vaadin.com>
This commit is contained in:
parent
4ce2e7debe
commit
9bad12e6cd
6 changed files with 406 additions and 0 deletions
|
|
@ -952,9 +952,11 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
|
||||
Map<ZoneChangeData, List<GameEvent>> eventsByKey = new HashMap<>();
|
||||
List<GameEvent> groupEvents = new LinkedList<>();
|
||||
ZoneChangeBatchEvent batchEvent = new ZoneChangeBatchEvent();
|
||||
for (GameEvent event : events) {
|
||||
if (event instanceof ZoneChangeEvent) {
|
||||
ZoneChangeEvent castEvent = (ZoneChangeEvent) event;
|
||||
batchEvent.addEvent(castEvent);
|
||||
ZoneChangeData key = new ZoneChangeData(
|
||||
castEvent.getSource(),
|
||||
castEvent.getSourceId(),
|
||||
|
|
@ -999,6 +1001,9 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
groupEvents.add(event);
|
||||
}
|
||||
}
|
||||
if (!batchEvent.getEvents().isEmpty()) {
|
||||
groupEvents.add(batchEvent);
|
||||
}
|
||||
return groupEvents;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ public class GameEvent implements Serializable {
|
|||
*/
|
||||
ZONE_CHANGE,
|
||||
ZONE_CHANGE_GROUP,
|
||||
ZONE_CHANGE_BATCH,
|
||||
DRAW_CARDS, // event calls for multi draws only (if player draws 2+ cards at once)
|
||||
DRAW_CARD, DREW_CARD,
|
||||
EXPLORE, EXPLORED, // targetId is exploring permanent, playerId is its controller
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
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;
|
||||
|
||||
public class ZoneChangeBatchEvent extends GameEvent implements BatchGameEvent<ZoneChangeEvent> {
|
||||
|
||||
private final Set<ZoneChangeEvent> events = new HashSet<>();
|
||||
|
||||
public ZoneChangeBatchEvent() {
|
||||
super(EventType.ZONE_CHANGE_BATCH, null, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<ZoneChangeEvent> getEvents() {
|
||||
return events;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> getTargets() {
|
||||
return events
|
||||
.stream()
|
||||
.map(GameEvent::getTargetId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAmount() {
|
||||
return events
|
||||
.stream()
|
||||
.mapToInt(GameEvent::getAmount)
|
||||
.sum();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated // events can store a diff value, so search it from events list instead
|
||||
public UUID getTargetId() {
|
||||
throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list or use CardUtil.getEventTargets(event)");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated // events can store a diff value, so search it from events list instead
|
||||
public UUID getSourceId() {
|
||||
throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list.");
|
||||
}
|
||||
|
||||
public void addEvent(ZoneChangeEvent event) {
|
||||
this.events.add(event);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue