60 lines
1.6 KiB
Java
60 lines
1.6 KiB
Java
package net.minecraft.client.searchtree;
|
|
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Stream;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public interface ResourceLocationSearchTree<T> {
|
|
static <T> ResourceLocationSearchTree<T> empty() {
|
|
return new ResourceLocationSearchTree<T>() {
|
|
@Override
|
|
public List<T> searchNamespace(String query) {
|
|
return List.of();
|
|
}
|
|
|
|
@Override
|
|
public List<T> searchPath(String query) {
|
|
return List.of();
|
|
}
|
|
};
|
|
}
|
|
|
|
static <T> ResourceLocationSearchTree<T> create(List<T> contents, Function<T, Stream<ResourceLocation>> idGetter) {
|
|
if (contents.isEmpty()) {
|
|
return empty();
|
|
} else {
|
|
final SuffixArray<T> suffixArray = new SuffixArray<>();
|
|
final SuffixArray<T> suffixArray2 = new SuffixArray<>();
|
|
|
|
for (T object : contents) {
|
|
((Stream)idGetter.apply(object)).forEach(resourceLocation -> {
|
|
suffixArray.add(object, resourceLocation.getNamespace().toLowerCase(Locale.ROOT));
|
|
suffixArray2.add(object, resourceLocation.getPath().toLowerCase(Locale.ROOT));
|
|
});
|
|
}
|
|
|
|
suffixArray.generate();
|
|
suffixArray2.generate();
|
|
return new ResourceLocationSearchTree<T>() {
|
|
@Override
|
|
public List<T> searchNamespace(String query) {
|
|
return suffixArray.search(query);
|
|
}
|
|
|
|
@Override
|
|
public List<T> searchPath(String query) {
|
|
return suffixArray2.search(query);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
List<T> searchNamespace(String query);
|
|
|
|
List<T> searchPath(String query);
|
|
}
|