Move search tree replacement to common, support both modloaders
This commit is contained in:
parent
04c89a26ed
commit
32c1baf887
|
|
@ -0,0 +1,30 @@
|
|||
package org.embeddedt.modernfix.common.mixin.perf.blast_search_trees;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.searchtree.SearchRegistry;
|
||||
import org.embeddedt.modernfix.ModernFix;
|
||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||
import org.embeddedt.modernfix.searchtree.DummySearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(Minecraft.class)
|
||||
@ClientOnlyMixin
|
||||
public class MinecraftMixin {
|
||||
@Shadow @Final private SearchRegistry searchRegistry;
|
||||
|
||||
@Inject(method = "createSearchTrees", at = @At("HEAD"), cancellable = true)
|
||||
private void replaceSearchTrees(CallbackInfo ci) {
|
||||
SearchTreeProviderRegistry.Provider provider = SearchTreeProviderRegistry.getSearchTreeProvider();
|
||||
ModernFix.LOGGER.info("Replacing search trees with '{}' provider", provider.getName());
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, provider.getSearchTree(false));
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, provider.getSearchTree(true));
|
||||
this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, new DummySearchTree<>());
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package org.embeddedt.modernfix.searchtree;
|
|||
|
||||
import net.minecraft.client.searchtree.MutableSearchTree;
|
||||
import net.minecraft.client.searchtree.ReloadableIdSearchTree;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
|
@ -34,4 +35,22 @@ public class DummySearchTree<T> extends ReloadableIdSearchTree<T> implements Mut
|
|||
public List<T> search(String pSearchText) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
static final SearchTreeProviderRegistry.Provider PROVIDER = new SearchTreeProviderRegistry.Provider() {
|
||||
|
||||
@Override
|
||||
public ReloadableIdSearchTree<ItemStack> getSearchTree(boolean tag) {
|
||||
return new DummySearchTree<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Dummy";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package org.embeddedt.modernfix.searchtree;
|
||||
|
||||
import net.minecraft.client.searchtree.ReloadableIdSearchTree;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SearchTreeProviderRegistry {
|
||||
private static final List<Provider> searchTreeProviders = new ArrayList<>();
|
||||
|
||||
public static synchronized Provider getSearchTreeProvider() {
|
||||
for(Provider p : searchTreeProviders) {
|
||||
if(p.canUse())
|
||||
return p;
|
||||
}
|
||||
return DummySearchTree.PROVIDER;
|
||||
}
|
||||
|
||||
public static synchronized void register(Provider p) {
|
||||
if(p.canUse())
|
||||
searchTreeProviders.add(p);
|
||||
}
|
||||
|
||||
public interface Provider {
|
||||
ReloadableIdSearchTree<ItemStack> getSearchTree(boolean tag);
|
||||
boolean canUse();
|
||||
String getName();
|
||||
}
|
||||
}
|
||||
|
|
@ -22,7 +22,9 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||
import org.embeddedt.modernfix.ModernFixClient;
|
||||
import org.embeddedt.modernfix.forge.searchtree.JEIBackedSearchTree;
|
||||
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
|
||||
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||
|
||||
public class ModernFixClientForge {
|
||||
private static ModernFixClient commonMod;
|
||||
|
|
@ -34,6 +36,7 @@ public class ModernFixClientForge {
|
|||
ConfigGuiHandler.ConfigGuiFactory.class,
|
||||
() -> new ConfigGuiHandler.ConfigGuiFactory((mc, screen) -> new ModernFixConfigScreen(screen))
|
||||
);
|
||||
SearchTreeProviderRegistry.register(JEIBackedSearchTree.PROVIDER);
|
||||
}
|
||||
|
||||
private KeyMapping configKey;
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
package org.embeddedt.modernfix.forge.mixin.perf.blast_search_trees;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.searchtree.SearchRegistry;
|
||||
import net.minecraftforge.fml.ModContainer;
|
||||
import net.minecraftforge.fml.ModList;
|
||||
import org.embeddedt.modernfix.ModernFix;
|
||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||
import org.embeddedt.modernfix.searchtree.DummySearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.REIBackedSearchTree;
|
||||
import org.embeddedt.modernfix.forge.searchtree.JEIBackedSearchTree;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
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.Optional;
|
||||
|
||||
@Mixin(Minecraft.class)
|
||||
@ClientOnlyMixin
|
||||
public class MinecraftMixin {
|
||||
@Shadow @Final private SearchRegistry searchRegistry;
|
||||
|
||||
@Inject(method = "createSearchTrees", at = @At("HEAD"), cancellable = true)
|
||||
private void replaceSearchTrees(CallbackInfo ci) {
|
||||
Optional<? extends ModContainer> jeiContainer = ModList.get().getModContainerById("jei");
|
||||
if(ModList.get().isLoaded("roughlyenoughitems")) {
|
||||
ModernFix.LOGGER.info("Replaced creative search logic with REI");
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new REIBackedSearchTree(false));
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new REIBackedSearchTree(true));
|
||||
} else if(jeiContainer.isPresent()) {
|
||||
/* ugly hack since getMajorVersion() returns 0 */
|
||||
if(jeiContainer.get().getModInfo().getVersion().toString().startsWith("9.")) {
|
||||
ModernFix.LOGGER.warn("Not disabling creative search as JEI 9 is in use");
|
||||
return;
|
||||
}
|
||||
ModernFix.LOGGER.info("Replaced creative search logic with JEI");
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new JEIBackedSearchTree(false));
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new JEIBackedSearchTree(true));
|
||||
} else {
|
||||
ModernFix.LOGGER.info("Completely removed creative search logic");
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, new DummySearchTree<>());
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, new DummySearchTree<>());
|
||||
}
|
||||
this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, new DummySearchTree<>());
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
|
@ -5,10 +5,13 @@ 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.client.searchtree.ReloadableIdSearchTree;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.embeddedt.modernfix.ModernFix;
|
||||
import org.embeddedt.modernfix.forge.mixin.perf.blast_search_trees.IngredientFilterInvoker;
|
||||
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
|
||||
import org.embeddedt.modernfix.searchtree.DummySearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -65,4 +68,21 @@ public class JEIBackedSearchTree extends DummySearchTree<ItemStack> {
|
|||
}
|
||||
return listCache;
|
||||
}
|
||||
|
||||
public static final SearchTreeProviderRegistry.Provider PROVIDER = new SearchTreeProviderRegistry.Provider() {
|
||||
@Override
|
||||
public ReloadableIdSearchTree<ItemStack> getSearchTree(boolean tag) {
|
||||
return new JEIBackedSearchTree(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse() {
|
||||
return ModernFixPlatformHooks.modPresent("jei");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "JEI";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user