package net.minecraft.server;
import com.google.common.base.Functions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
public class ResourcePackRepository<T extends ResourcePackLoader> implements AutoCloseable {
private final Set<ResourcePackSource> a = Sets.newHashSet();
private final Map<String, T> b = Maps.newLinkedHashMap();
private final List<T> c = Lists.newLinkedList();
private final ResourcePackLoader.b<T> d;
public ResourcePackRepository(ResourcePackLoader.b<T> resourcepackloader_b) {
this.d = resourcepackloader_b;
}
public void a() {
this.close();
Set<String> set = (Set) this.c.stream().map(ResourcePackLoader::e).collect(Collectors.toCollection(LinkedHashSet::new));
this.b.clear();
this.c.clear();
Iterator iterator = this.a.iterator();
while (iterator.hasNext()) {
ResourcePackSource resourcepacksource = (ResourcePackSource) iterator.next();
resourcepacksource.a(this.b, this.d);
}
this.e();
List list = this.c;
Stream stream = set.stream();
Map map = this.b;
this.b.getClass();
list.addAll((Collection) stream.map(map::get).filter(Objects::nonNull).collect(Collectors.toCollection(LinkedHashSet::new)));
iterator = this.b.values().iterator();
while (iterator.hasNext()) {
T t0 = (ResourcePackLoader) iterator.next();
if (t0.f() && !this.c.contains(t0)) {
t0.h().a(this.c, t0, Functions.identity(), false);
}
}
}
private void e() {
List<Entry<String, T>> list = Lists.newArrayList(this.b.entrySet());
this.b.clear();
list.stream().sorted(Entry.comparingByKey()).forEachOrdered((entry) -> {
ResourcePackLoader resourcepackloader = (ResourcePackLoader) this.b.put(entry.getKey(), entry.getValue());
});
}
public void a(Collection<T> collection) {
this.c.clear();
this.c.addAll(collection);
Iterator iterator = this.b.values().iterator();
while (iterator.hasNext()) {
T t0 = (ResourcePackLoader) iterator.next();
if (t0.f() && !this.c.contains(t0)) {
t0.h().a(this.c, t0, Functions.identity(), false);
}
}
}
public Collection<T> b() {
return this.b.values();
}
public Collection<T> c() {
Collection<T> collection = Lists.newArrayList(this.b.values());
collection.removeAll(this.c);
return collection;
}
public Collection<T> d() {
return this.c;
}
@Nullable
public T a(String s) {
return (ResourcePackLoader) this.b.get(s);
}
public void a(ResourcePackSource resourcepacksource) {
this.a.add(resourcepacksource);
}
public void close() {
this.b.values().forEach(ResourcePackLoader::close);
}
}