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.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public interface ResourceLocationSearchTree { static ResourceLocationSearchTree empty() { return new ResourceLocationSearchTree() { @Override public List searchNamespace(String p_235218_) { return List.of(); } @Override public List searchPath(String p_235220_) { return List.of(); } }; } static ResourceLocationSearchTree create(List p_235213_, Function> p_235214_) { if (p_235213_.isEmpty()) { return empty(); } else { final SuffixArray suffixarray = new SuffixArray<>(); final SuffixArray suffixarray1 = new SuffixArray<>(); for (T t : p_235213_) { p_235214_.apply(t).forEach(p_235210_ -> { suffixarray.add(t, p_235210_.getNamespace().toLowerCase(Locale.ROOT)); suffixarray1.add(t, p_235210_.getPath().toLowerCase(Locale.ROOT)); }); } suffixarray.generate(); suffixarray1.generate(); return new ResourceLocationSearchTree() { @Override public List searchNamespace(String p_235227_) { return suffixarray.search(p_235227_); } @Override public List searchPath(String p_235229_) { return suffixarray1.search(p_235229_); } }; } } List searchNamespace(String p_235211_); List searchPath(String p_235215_); }