diff --git a/gradle.properties b/gradle.properties index d0012562..8673fccd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ loom.platform=forge mod_id=modernfix minecraft_version=1.19.4 -forge_version=1.19.4-45.0.43 +forge_version=1.19.4-45.0.22 parchment_version=2023.03.12 refined_storage_version=4392788 jei_version=13.1.0.2 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 3eef9234..d633d7ba 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 @@ -2,6 +2,9 @@ package org.embeddedt.modernfix.mixin.perf.blast_search_trees; import net.minecraft.client.Minecraft; import net.minecraft.client.searchtree.SearchRegistry; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.client.CreativeModeTabSearchRegistry; import net.minecraftforge.fml.ModContainer; import net.minecraftforge.fml.ModList; import net.minecraftforge.forgespi.language.IModFileInfo; @@ -16,29 +19,49 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.List; +import java.util.Map; import java.util.Optional; @Mixin(Minecraft.class) -public class MinecraftMixin { +public abstract class MinecraftMixin { @Shadow @Final private SearchRegistry searchRegistry; + @Shadow public abstract void populateSearchTree(SearchRegistry.Key arg, List list); + @Inject(method = "createSearchTrees", at = @At("HEAD"), cancellable = true) private void replaceSearchTrees(CallbackInfo ci) { ci.cancel(); Optional jeiContainer = ModList.get().getModContainerById("jei"); + SearchRegistry.TreeBuilderSupplier nameSupplier, tagSupplier; if(ModList.get().isLoaded("roughlyenoughitems")) { ModernFix.LOGGER.info("Replaced creative search logic with REI"); - this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, list -> new REIBackedSearchTree(false)); - this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, list -> new REIBackedSearchTree(true)); + nameSupplier = list -> new REIBackedSearchTree(false); + tagSupplier = list -> new REIBackedSearchTree(true); } else if(jeiContainer.isPresent()) { ModernFix.LOGGER.info("Replaced creative search logic with JEI"); - this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, list -> new JEIBackedSearchTree(false)); - this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, list -> new JEIBackedSearchTree(true)); + nameSupplier = list -> new JEIBackedSearchTree(false); + tagSupplier = list -> new JEIBackedSearchTree(true); } else { ModernFix.LOGGER.info("Replaced creative search logic with dummy implementation"); - this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, list -> new DummySearchTree<>()); - this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, list -> new DummySearchTree<>()); + nameSupplier = tagSupplier = list -> new DummySearchTree<>(); } + this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, nameSupplier); + for(SearchRegistry.Key nameKey : CreativeModeTabSearchRegistry.getNameSearchKeys().values()) { + this.searchRegistry.register(nameKey, nameSupplier); + } + this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, tagSupplier); + for(SearchRegistry.Key tagKey : CreativeModeTabSearchRegistry.getTagSearchKeys().values()) { + this.searchRegistry.register(tagKey, tagSupplier); + } + Map> tagSearchKeys = CreativeModeTabSearchRegistry.getTagSearchKeys(); + CreativeModeTabSearchRegistry.getNameSearchKeys().forEach((tab, nameSearchKey) -> { + SearchRegistry.Key tagSearchKey = tagSearchKeys.get(tab); + tab.setSearchTreeBuilder((contents) -> { + this.populateSearchTree(nameSearchKey, contents); + this.populateSearchTree(tagSearchKey, contents); + }); + }); this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, list -> new DummySearchTree<>()); } }