mirror of
https://github.com/magefree/mage.git
synced 2026-01-09 20:32:06 -08:00
remove all copy constructors and copy methods for all watchers
This commit is contained in:
parent
e8303d551d
commit
702a1f2498
160 changed files with 94 additions and 1445 deletions
|
|
@ -149,16 +149,6 @@ class ExertedThisTurnWatcher extends Watcher {
|
|||
exertedThisTurnCreatures = new HashSet<>();
|
||||
}
|
||||
|
||||
public ExertedThisTurnWatcher(final ExertedThisTurnWatcher watcher) {
|
||||
super(watcher);
|
||||
exertedThisTurnCreatures = new HashSet<>(watcher.exertedThisTurnCreatures);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Watcher copy() {
|
||||
return new ExertedThisTurnWatcher(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == GameEvent.EventType.BECOMES_EXERTED) {
|
||||
|
|
|
|||
|
|
@ -45,15 +45,10 @@ class MeleeWatcher extends Watcher {
|
|||
|
||||
private Map<UUID, Set<UUID>> playersAttacked = new HashMap<>(0);
|
||||
|
||||
MeleeWatcher() {
|
||||
public MeleeWatcher() {
|
||||
super(WatcherScope.GAME);
|
||||
}
|
||||
|
||||
MeleeWatcher(final MeleeWatcher watcher) {
|
||||
super(watcher);
|
||||
this.playersAttacked.putAll(watcher.playersAttacked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == EventType.BEGIN_COMBAT_STEP_PRE) {
|
||||
|
|
@ -72,11 +67,6 @@ class MeleeWatcher extends Watcher {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MeleeWatcher copy() {
|
||||
return new MeleeWatcher(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MeleeDynamicValue implements DynamicValue {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
package mage.watchers;
|
||||
|
||||
import mage.Mana;
|
||||
import mage.constants.WatcherScope;
|
||||
import mage.game.Game;
|
||||
import mage.game.turn.Step;
|
||||
import mage.game.events.GameEvent;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -12,6 +10,7 @@ import java.io.Serializable;
|
|||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
|
|
@ -85,35 +84,48 @@ public abstract class Watcher implements Serializable {
|
|||
|
||||
public <T extends Watcher> T copy() {
|
||||
try {
|
||||
List<?> constructors = Arrays.asList(this.getClass().getConstructors());
|
||||
//use getDeclaredConstructors to allow for package-private constructors (i.e. omit public)
|
||||
List<?> constructors = Arrays.asList(this.getClass().getDeclaredConstructors());
|
||||
if (constructors.size() > 1) {
|
||||
logger.error(getClass().getSimpleName() + " has multiple constructors");
|
||||
return null;
|
||||
}
|
||||
|
||||
Constructor<? extends Watcher> constructor = (Constructor<? extends Watcher>) constructors.get(0);
|
||||
if (constructor.getParameterCount() > 0) {
|
||||
logger.error(getClass().getSimpleName() + " constructor has arguments, should be 0 and inject the parameters by setters");
|
||||
return null;
|
||||
}
|
||||
|
||||
constructor.setAccessible(true);
|
||||
T watcher = (T) constructor.newInstance();
|
||||
Object[] args = new Object[constructor.getParameterCount()];
|
||||
for (int index = 0; index < constructor.getParameterTypes().length; index++) {
|
||||
Class<?> parameterType = constructor.getParameterTypes()[index];
|
||||
if(parameterType.isPrimitive()){
|
||||
if(parameterType.getSimpleName().equalsIgnoreCase("boolean")){
|
||||
args[index]=false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
args[index] = null;
|
||||
}
|
||||
|
||||
}
|
||||
T watcher = (T) constructor.newInstance(args);
|
||||
List<Field> allFields = new ArrayList<>();
|
||||
allFields.addAll(Arrays.asList(getClass().getDeclaredFields()));
|
||||
allFields.addAll(Arrays.asList(getClass().getSuperclass().getDeclaredFields()));
|
||||
for (Field field : allFields) {
|
||||
field.setAccessible(true);
|
||||
if (field.getType() == Set.class) {
|
||||
((Set) field.get(watcher)).clear();
|
||||
((Set) field.get(watcher)).addAll((Set) field.get(this));
|
||||
} else if (field.getType() == Map.class) {
|
||||
((Map) field.get(watcher)).clear();
|
||||
((Map) field.get(watcher)).putAll((Map) field.get(this));
|
||||
} else if (field.getType() == List.class) {
|
||||
((List) field.get(watcher)).clear();
|
||||
((List) field.get(watcher)).addAll((List) field.get(this));
|
||||
} else {
|
||||
if (field.getType() != Logger.class) {
|
||||
if (!Modifier.isStatic(field.getModifiers())) {
|
||||
|
||||
field.setAccessible(true);
|
||||
if (field.getType() == Set.class) {
|
||||
((Set) field.get(watcher)).clear();
|
||||
((Set) field.get(watcher)).addAll((Set) field.get(this));
|
||||
} else if (field.getType() == Map.class) {
|
||||
((Map) field.get(watcher)).clear();
|
||||
((Map) field.get(watcher)).putAll((Map) field.get(this));
|
||||
} else if (field.getType() == List.class) {
|
||||
((List) field.get(watcher)).clear();
|
||||
((List) field.get(watcher)).addAll((List) field.get(this));
|
||||
|
||||
} else {
|
||||
field.set(watcher, field.get(this));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,18 +30,6 @@ public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
|
|||
super(WatcherScope.GAME);
|
||||
}
|
||||
|
||||
public CardsCycledOrDiscardedThisTurnWatcher(final CardsCycledOrDiscardedThisTurnWatcher watcher) {
|
||||
super(watcher);
|
||||
for (Entry<UUID, Cards> entry : watcher.cycledOrDiscardedCardsThisTurn.entrySet()) {
|
||||
cycledOrDiscardedCardsThisTurn.put(entry.getKey(), entry.getValue().copy());
|
||||
}
|
||||
for (Entry<UUID, Set<MageObjectReference>> entry : watcher.numberOfCycledOrDiscardedCardsThisTurn.entrySet()) {
|
||||
Set<MageObjectReference> cycledOrDiscardedCards = new HashSet<>();
|
||||
cycledOrDiscardedCards.addAll(entry.getValue());
|
||||
numberOfCycledOrDiscardedCardsThisTurn.put(entry.getKey(), cycledOrDiscardedCards);
|
||||
}
|
||||
numberOfCycledOrDiscardedCardsThisTurn.putAll(watcher.numberOfCycledOrDiscardedCardsThisTurn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
|
|
@ -81,8 +69,4 @@ public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher {
|
|||
numberOfCycledOrDiscardedCardsThisTurn.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CardsCycledOrDiscardedThisTurnWatcher copy() {
|
||||
return new CardsCycledOrDiscardedThisTurnWatcher(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,17 +33,6 @@ public class CommanderInfoWatcher extends Watcher {
|
|||
this.checkCommanderDamage = checkCommanderDamage;
|
||||
}
|
||||
|
||||
public CommanderInfoWatcher(final CommanderInfoWatcher watcher) {
|
||||
super(watcher);
|
||||
this.damageToPlayer.putAll(watcher.damageToPlayer);
|
||||
this.checkCommanderDamage = watcher.checkCommanderDamage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommanderInfoWatcher copy() {
|
||||
return new CommanderInfoWatcher(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (checkCommanderDamage && event.getType() == EventType.DAMAGED_PLAYER && event instanceof DamagedPlayerEvent) {
|
||||
|
|
|
|||
|
|
@ -23,26 +23,11 @@ public class DamagedByWatcher extends Watcher {
|
|||
|
||||
private final boolean watchPlaneswalkers;
|
||||
|
||||
public DamagedByWatcher() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public DamagedByWatcher(boolean watchPlaneswalkers) {
|
||||
super(WatcherScope.CARD);
|
||||
this.watchPlaneswalkers = watchPlaneswalkers;
|
||||
}
|
||||
|
||||
public DamagedByWatcher(final DamagedByWatcher watcher) {
|
||||
super(watcher);
|
||||
this.damagedBySource.addAll(watcher.damagedBySource);
|
||||
this.watchPlaneswalkers = watcher.watchPlaneswalkers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DamagedByWatcher copy() {
|
||||
return new DamagedByWatcher(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
boolean eventHasAppropriateType = (event.getType() == EventType.DAMAGED_CREATURE) ||
|
||||
|
|
|
|||
|
|
@ -22,16 +22,6 @@ public class FirstTimeStepWatcher extends Watcher {
|
|||
this.eventType = eventType;
|
||||
}
|
||||
|
||||
public FirstTimeStepWatcher(final FirstTimeStepWatcher watcher) {
|
||||
super(watcher);
|
||||
this.eventType = watcher.eventType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FirstTimeStepWatcher copy() {
|
||||
return new FirstTimeStepWatcher(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void watch(GameEvent event, Game game) {
|
||||
if (event.getType() == eventType) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue