public static void collectAndFireTriggers(final HashSet<PlayerID> players,final Match<TriggerAttachment> triggerMatch,final IDelegateBridge aBridge,final String beforeOrAfter,final String stepName){
  final HashSet<TriggerAttachment> toFirePossible=collectForAllTriggersMatching(players,triggerMatch,aBridge);
  if (toFirePossible.isEmpty()) {
    return;
  }
  final HashMap<ICondition,Boolean> testedConditions=collectTestsForAllTriggers(toFirePossible,aBridge);
  final List<TriggerAttachment> toFireTestedAndSatisfied=Match.getMatches(toFirePossible,AbstractTriggerAttachment.isSatisfiedMatch(testedConditions));
  if (toFireTestedAndSatisfied.isEmpty()) {
    return;
  }
  TriggerAttachment.fireTriggers(new HashSet<>(toFireTestedAndSatisfied),testedConditions,aBridge,beforeOrAfter,stepName,true,true,true,true);
}

public static void collectAndFireTriggers ( final HashSet < PlayerID > players , final Match < TriggerAttachment > triggerMatch , final IDelegateBridge aBridge , final String beforeOrAfter , final String stepName ) { final HashSet < TriggerAttachment > toFirePossible = collectForAllTriggersMatching ( players , triggerMatch , aBridge ) ; if ( toFirePossible . isEmpty ( ) ) { return ; } final HashMap < ICondition , Boolean > testedConditions = collectTestsForAllTriggers ( toFirePossible , aBridge ) ; final List < TriggerAttachment > toFireTestedAndSatisfied = Match . getMatches ( toFirePossible , AbstractTriggerAttachment . isSatisfiedMatch ( testedConditions ) ) ; if ( toFireTestedAndSatisfied . isEmpty ( ) ) { return ; } TriggerAttachment . fireTriggers ( new HashSet < > ( toFireTestedAndSatisfied ) , testedConditions , aBridge , beforeOrAfter , stepName , true , true , true , true ) ; }
this will collect all triggers for the desired players , based on a match provided , and then it will gather all the conditions necessary , then test all the conditions , and then it will fire all the conditions which are satisfied .
