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.MutableSearchTree;
|
||||||
import net.minecraft.client.searchtree.ReloadableIdSearchTree;
|
import net.minecraft.client.searchtree.ReloadableIdSearchTree;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -34,4 +35,22 @@ public class DummySearchTree<T> extends ReloadableIdSearchTree<T> implements Mut
|
||||||
public List<T> search(String pSearchText) {
|
public List<T> search(String pSearchText) {
|
||||||
return Collections.emptyList();
|
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.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||||
import org.embeddedt.modernfix.ModernFixClient;
|
import org.embeddedt.modernfix.ModernFixClient;
|
||||||
|
import org.embeddedt.modernfix.forge.searchtree.JEIBackedSearchTree;
|
||||||
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
|
import org.embeddedt.modernfix.screen.ModernFixConfigScreen;
|
||||||
|
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||||
|
|
||||||
public class ModernFixClientForge {
|
public class ModernFixClientForge {
|
||||||
private static ModernFixClient commonMod;
|
private static ModernFixClient commonMod;
|
||||||
|
|
@ -34,6 +36,7 @@ public class ModernFixClientForge {
|
||||||
ConfigGuiHandler.ConfigGuiFactory.class,
|
ConfigGuiHandler.ConfigGuiFactory.class,
|
||||||
() -> new ConfigGuiHandler.ConfigGuiFactory((mc, screen) -> new ModernFixConfigScreen(screen))
|
() -> new ConfigGuiHandler.ConfigGuiFactory((mc, screen) -> new ModernFixConfigScreen(screen))
|
||||||
);
|
);
|
||||||
|
SearchTreeProviderRegistry.register(JEIBackedSearchTree.PROVIDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
private KeyMapping configKey;
|
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.IngredientFilter;
|
||||||
import mezz.jei.common.ingredients.IngredientFilterApi;
|
import mezz.jei.common.ingredients.IngredientFilterApi;
|
||||||
import mezz.jei.common.runtime.JeiRuntime;
|
import mezz.jei.common.runtime.JeiRuntime;
|
||||||
|
import net.minecraft.client.searchtree.ReloadableIdSearchTree;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
import org.embeddedt.modernfix.forge.mixin.perf.blast_search_trees.IngredientFilterInvoker;
|
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.DummySearchTree;
|
||||||
|
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -65,4 +68,21 @@ public class JEIBackedSearchTree extends DummySearchTree<ItemStack> {
|
||||||
}
|
}
|
||||||
return listCache;
|
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