Add support for using REI for creative search
This commit is contained in:
parent
63fa31bde1
commit
eed3a80fc1
|
|
@ -62,6 +62,7 @@ repositories {
|
|||
maven { // CTM
|
||||
url "https://maven.tterrag.com/"
|
||||
}
|
||||
maven { url "https://maven.shedaniel.me" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
|
@ -92,6 +93,7 @@ dependencies {
|
|||
modRuntimeOnly("curse.maven:jei-238222:4352925")
|
||||
|
||||
modCompileOnly("curse.maven:jeresources-240630:3831559")
|
||||
modCompileOnly "me.shedaniel:RoughlyEnoughItems-forge:${rei_version}"
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ forge_version=1.18.2-40.2.1
|
|||
lazydfu_version=3544496
|
||||
parchment_version=2022.11.06
|
||||
refined_storage_version=4392829
|
||||
jei_version=10.2.1.283
|
||||
jei_version=10.2.1.283
|
||||
rei_version=8.3.590
|
||||
|
|
@ -46,9 +46,9 @@ public class ModernFixEarlyConfig {
|
|||
this.addMixinRule("perf.faster_texture_stitching", false);
|
||||
/* off by default in 1.18 because it doesn't work as well */
|
||||
this.addMixinRule("perf.faster_singleplayer_load", false);
|
||||
/* Keep this off if JEI isn't installed to prevent breaking vanilla gameplay */
|
||||
/* Keep this off if JEI/REI isn't installed to prevent breaking vanilla gameplay */
|
||||
Optional<ModInfo> jeiMod = FMLLoader.getLoadingModList().getMods().stream().filter(mod -> mod.getModId().equals("jei")).findFirst();
|
||||
this.addMixinRule("perf.blast_search_trees", jeiMod.isPresent() && jeiMod.get().getVersion().getMajorVersion() >= 10);
|
||||
this.addMixinRule("perf.blast_search_trees", (jeiMod.isPresent() && jeiMod.get().getVersion().getMajorVersion() >= 10) || FMLLoader.getLoadingModList().getModFileById("roughlyenoughitems") != null);
|
||||
this.addMixinRule("safety", true);
|
||||
this.addMixinRule("launch.transformer_cache", false);
|
||||
this.addMixinRule("launch.class_search_cache", true);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import net.minecraftforge.fml.ModList;
|
|||
import net.minecraftforge.forgespi.language.IModFileInfo;
|
||||
import org.embeddedt.modernfix.searchtree.DummySearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.JEIBackedSearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.REIBackedSearchTree;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
|
@ -27,6 +28,9 @@ public class MinecraftMixin {
|
|||
if(jeiContainer.isPresent() && jeiContainer.get().getModInfo().getVersion().getMajorVersion() >= 10) {
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new JEIBackedSearchTree(false));
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new JEIBackedSearchTree(true));
|
||||
} else if(ModList.get().isLoaded("roughlyenoughitems")) {
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new REIBackedSearchTree(false));
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new REIBackedSearchTree(true));
|
||||
} else {
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new DummySearchTree<>());
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new DummySearchTree<>());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
package org.embeddedt.modernfix.searchtree;
|
||||
|
||||
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry;
|
||||
import me.shedaniel.rei.api.common.entry.EntryStack;
|
||||
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
|
||||
import me.shedaniel.rei.impl.client.search.AsyncSearchManager;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class REIBackedSearchTree extends DummySearchTree<ItemStack> {
|
||||
private final AsyncSearchManager searchManager = new AsyncSearchManager(EntryRegistry.getInstance()::getPreFilteredList, () -> {
|
||||
return stack -> true;
|
||||
}, EntryStack::normalize);
|
||||
|
||||
private final boolean filteringByTag;
|
||||
private String lastSearchText = "";
|
||||
private final List<ItemStack> listCache = new ArrayList<>();
|
||||
|
||||
public REIBackedSearchTree(boolean filteringByTag) {
|
||||
this.filteringByTag = filteringByTag;
|
||||
}
|
||||
@Override
|
||||
public List<ItemStack> search(String pSearchText) {
|
||||
if(true) {
|
||||
return this.searchREI(pSearchText);
|
||||
} else {
|
||||
/* Use the default, dummy implementation */
|
||||
return super.search(pSearchText);
|
||||
}
|
||||
}
|
||||
|
||||
private List<ItemStack> searchREI(String pSearchText) {
|
||||
if(!pSearchText.equals(lastSearchText)) {
|
||||
listCache.clear();
|
||||
this.searchManager.updateFilter(pSearchText);
|
||||
List<EntryStack<?>> stacks = this.searchManager.getNow();
|
||||
for(EntryStack<?> stack : stacks) {
|
||||
if(stack.getType() == VanillaEntryTypes.ITEM) {
|
||||
listCache.add(stack.cheatsAs().getValue());
|
||||
}
|
||||
}
|
||||
lastSearchText = pSearchText;
|
||||
}
|
||||
return listCache;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user