public static <Source, Target> Aura<Source, Target> merge( Collection<Aura<? super Source, ? super Target>> auras) { List<Aura<? super Source, ? super Target>> aurasCopy = new ArrayList<>(auras); ExceptionHelper.checkNotNullElements(aurasCopy, "auras"); int count = aurasCopy.size(); if (count == 0) { return (world, source, target) -> UndoableUnregisterRef.UNREGISTERED_REF; } if (count == 1) { // Even if it is not, it shouldn't matter because the returned aura // will accept anything a "<Source, Target>" would. @SuppressWarnings("unchecked") Aura<Source, Target> result = (Aura<Source, Target>) aurasCopy.get(0); return result; } return (world, source, target) -> { UndoableUnregisterRefBuilder result = new UndoableUnregisterRefBuilder(aurasCopy.size()); for (Aura<? super Source, ? super Target> aura : aurasCopy) { result.addRef(aura.applyAura(world, source, target)); } return result; }; }
public static <Entity> EntityFilter<Entity> merge( Collection<? extends EntityFilter<Entity>> filters) { List<EntityFilter<Entity>> filtersCopy = new ArrayList<>(filters); ExceptionHelper.checkNotNullElements(filtersCopy, "filters"); int count = filtersCopy.size(); if (count == 0) { return EntityFilters.empty(); } if (count == 1) { return filtersCopy.get(0); } return (World world, Stream<? extends Entity> entities) -> { Stream<? extends Entity> currentTargets = entities; for (EntityFilter<Entity> filter : filtersCopy) { currentTargets = filter.select(world, currentTargets); } return currentTargets; }; }
public static <Self, T> AuraFilter<? super Self, ? super T> merge( Collection<? extends AuraFilter<? super Self, ? super T>> filters) { int filterCount = filters.size(); if (filterCount == 0) { return AuraFilter.ANY; } if (filterCount == 1) { return filters.iterator().next(); } List<AuraFilter<? super Self, ? super T>> filtersCopy = new ArrayList<>(filters); ExceptionHelper.checkNotNullElements(filtersCopy, "filters"); return (World world, Self owner, T eventSource) -> { for (AuraFilter<? super Self, ? super T> filter : filtersCopy) { if (!filter.isApplicable(world, owner, eventSource)) { return false; } } return true; }; }
public ProjectInfo(Collection<Entry> entries) { this.entries = Collections.unmodifiableList(new ArrayList<>(entries)); ExceptionHelper.checkNotNullElements(this.entries, "entries"); }