Fix crash in creative search

This commit is contained in:
embeddedt 2023-02-24 20:56:36 -05:00
parent 11de406065
commit 341631a8e1
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 26 additions and 1 deletions

View File

@ -3,11 +3,15 @@ package org.embeddedt.modernfix.searchtree;
import mezz.jei.api.ingredients.ITypedIngredient;
import mezz.jei.common.Internal;
import mezz.jei.common.ingredients.IngredientFilter;
import mezz.jei.common.ingredients.IngredientFilterApi;
import mezz.jei.common.runtime.JeiRuntime;
import net.minecraft.world.item.ItemStack;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.mixin.perf.blast_search_trees.IngredientFilterInvoker;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@ -19,6 +23,8 @@ public class JEIBackedSearchTree extends DummySearchTree<ItemStack> {
private String lastSearchText = "";
private final List<ItemStack> listCache = new ArrayList<>();
private static Field filterField = null;
public JEIBackedSearchTree(boolean filteringByTag) {
this.filteringByTag = filteringByTag;
}
@ -26,7 +32,19 @@ public class JEIBackedSearchTree extends DummySearchTree<ItemStack> {
public List<ItemStack> search(String pSearchText) {
Optional<JeiRuntime> runtime = Internal.getRuntime();
if(runtime.isPresent()) {
return this.searchJEI((IngredientFilter)runtime.get().getIngredientFilter(), pSearchText);
IngredientFilterApi iFilterApi = (IngredientFilterApi)runtime.get().getIngredientFilter();
IngredientFilter filter;
try {
if(filterField == null) {
filterField = IngredientFilterApi.class.getDeclaredField("ingredientFilter");
filterField.setAccessible(true);
}
filter = (IngredientFilter)filterField.get(iFilterApi);
} catch(ReflectiveOperationException e) {
ModernFix.LOGGER.error(e);
return Collections.emptyList();
}
return this.searchJEI(filter, pSearchText);
} else {
/* Use the default, dummy implementation */
return super.search(pSearchText);

View File

@ -56,3 +56,10 @@ mandatory = true
versionRange = "[1.18.2,1.19)"
ordering = "NONE"
side = "BOTH"
[[dependencies.modernfix]]
modId = "jei"
mandatory = false
# This version range declares a minimum of the current minecraft version up to but not including the next major version
versionRange = "[10,)"
ordering = "BEFORE"
side = "CLIENT"