diff --git a/build.gradle b/build.gradle index e51ee094..54fc0576 100644 --- a/build.gradle +++ b/build.gradle @@ -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) { diff --git a/gradle.properties b/gradle.properties index f0e71827..65e3c416 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 \ No newline at end of file +jei_version=10.2.1.283 +rei_version=8.3.590 \ No newline at end of file diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 086b277b..5cd84e82 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -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 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); diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java index cc051e63..a59840aa 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/blast_search_trees/MinecraftMixin.java @@ -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<>()); diff --git a/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java b/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java new file mode 100644 index 00000000..73c7c054 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java @@ -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 { + private final AsyncSearchManager searchManager = new AsyncSearchManager(EntryRegistry.getInstance()::getPreFilteredList, () -> { + return stack -> true; + }, EntryStack::normalize); + + private final boolean filteringByTag; + private String lastSearchText = ""; + private final List listCache = new ArrayList<>(); + + public REIBackedSearchTree(boolean filteringByTag) { + this.filteringByTag = filteringByTag; + } + @Override + public List search(String pSearchText) { + if(true) { + return this.searchREI(pSearchText); + } else { + /* Use the default, dummy implementation */ + return super.search(pSearchText); + } + } + + private List searchREI(String pSearchText) { + if(!pSearchText.equals(lastSearchText)) { + listCache.clear(); + this.searchManager.updateFilter(pSearchText); + List> stacks = this.searchManager.getNow(); + for(EntryStack stack : stacks) { + if(stack.getType() == VanillaEntryTypes.ITEM) { + listCache.add(stack.cheatsAs().getValue()); + } + } + lastSearchText = pSearchText; + } + return listCache; + } +}