Fix search trees, downgrade Forge so REI works in dev

This commit is contained in:
embeddedt 2023-04-23 21:36:47 -04:00
parent d534dacf18
commit 7eaa286a7a
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 31 additions and 8 deletions

View File

@ -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

View File

@ -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 <T> void populateSearchTree(SearchRegistry.Key<T> arg, List<T> list);
@Inject(method = "createSearchTrees", at = @At("HEAD"), cancellable = true)
private void replaceSearchTrees(CallbackInfo ci) {
ci.cancel();
Optional<? extends ModContainer> jeiContainer = ModList.get().getModContainerById("jei");
SearchRegistry.TreeBuilderSupplier<ItemStack> 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<ItemStack> nameKey : CreativeModeTabSearchRegistry.getNameSearchKeys().values()) {
this.searchRegistry.register(nameKey, nameSupplier);
}
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, tagSupplier);
for(SearchRegistry.Key<ItemStack> tagKey : CreativeModeTabSearchRegistry.getTagSearchKeys().values()) {
this.searchRegistry.register(tagKey, tagSupplier);
}
Map<CreativeModeTab, SearchRegistry.Key<ItemStack>> tagSearchKeys = CreativeModeTabSearchRegistry.getTagSearchKeys();
CreativeModeTabSearchRegistry.getNameSearchKeys().forEach((tab, nameSearchKey) -> {
SearchRegistry.Key<ItemStack> tagSearchKey = tagSearchKeys.get(tab);
tab.setSearchTreeBuilder((contents) -> {
this.populateSearchTree(nameSearchKey, contents);
this.populateSearchTree(tagSearchKey, contents);
});
});
this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, list -> new DummySearchTree<>());
}
}