ModernFix-fix/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java
embeddedt cfbe21d72f
Remap to full Mojmap (including classnames)
Mod does not yet run in dev
2023-02-14 21:59:30 -05:00

49 lines
1.8 KiB
Java

package org.embeddedt.modernfix.searchtree;
import mezz.jei.Internal;
import mezz.jei.ingredients.IIngredientListElementInfo;
import mezz.jei.ingredients.IngredientFilter;
import mezz.jei.runtime.JeiRuntime;
import net.minecraft.world.item.ItemStack;
import org.embeddedt.modernfix.mixin.perf.blast_search_trees.IngredientFilterInvoker;
import java.util.ArrayList;
import java.util.List;
/**
* Uses JEI to handle search tree lookups.
*/
public class JEIBackedSearchTree extends DummySearchTree<ItemStack> {
private final boolean filteringByTag;
private String lastSearchText = "";
private final List<ItemStack> listCache = new ArrayList<>();
public JEIBackedSearchTree(boolean filteringByTag) {
this.filteringByTag = filteringByTag;
}
@Override
public List<ItemStack> search(String pSearchText) {
JeiRuntime runtime = Internal.getRuntime();
if(runtime != null) {
return this.searchJEI(Internal.getIngredientFilter(), pSearchText);
} else {
/* Use the default, dummy implementation */
return super.search(pSearchText);
}
}
private List<ItemStack> searchJEI(IngredientFilter filter, String pSearchText) {
if(!pSearchText.equals(lastSearchText)) {
listCache.clear();
List<IIngredientListElementInfo<?>> ingredients = ((IngredientFilterInvoker)filter).invokeGetIngredientListUncached(filteringByTag ? ("$" + pSearchText) : pSearchText);
for(IIngredientListElementInfo<?> ingredient : ingredients) {
if(ingredient.getElement().getIngredient() instanceof ItemStack) {
listCache.add((ItemStack)ingredient.getElement().getIngredient());
}
}
lastSearchText = pSearchText;
}
return listCache;
}
}