From 57d5f08b1d1513bf5f9c90e1bf428366bef1f36e Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 10 May 2024 11:39:58 -0400 Subject: [PATCH] 24w19a --- .../mixinAp/config/MixinConfig.java | 4 +- .../modernfix/chunk/SafeBlockGetter.java | 5 +- .../paper_chunk_patches/ChunkMapMixin.java | 71 -------------- .../blast_search_trees/MinecraftMixin.java | 52 ---------- .../SessionSearchTreesMixin.java | 95 +++++++++++++++++++ .../dynamic_dfu/BlockEntityTypeMixin.java | 19 ---- .../perf/dynamic_dfu/DataFixersMixin.java | 33 ------- .../dynamic_dfu/EntityTypeBuilderMixin.java | 19 ---- .../modernfix/dfu/LazyDataFixer.java | 45 --------- .../platform/ModernFixPlatformHooks.java | 6 -- .../modernfix/searchtree/DummySearchTree.java | 11 +-- .../searchtree/JEIBackedSearchTree.java | 4 +- .../searchtree/REIBackedSearchTree.java | 4 +- .../searchtree/RecipeBookSearchTree.java | 5 - .../SearchTreeProviderRegistry.java | 4 +- .../fabric/ModernFixPlatformHooksImpl.java | 12 --- gradle.properties | 8 +- 17 files changed, 113 insertions(+), 284 deletions(-) delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/MinecraftMixin.java create mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/SessionSearchTreesMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java delete mode 100644 common/src/main/java/org/embeddedt/modernfix/dfu/LazyDataFixer.java diff --git a/annotation-processor/src/main/java/org/fury_phoenix/mixinAp/config/MixinConfig.java b/annotation-processor/src/main/java/org/fury_phoenix/mixinAp/config/MixinConfig.java index 9d1e6c91..9a763b05 100644 --- a/annotation-processor/src/main/java/org/fury_phoenix/mixinAp/config/MixinConfig.java +++ b/annotation-processor/src/main/java/org/fury_phoenix/mixinAp/config/MixinConfig.java @@ -17,7 +17,7 @@ public record MixinConfig( @SerializedName("package") String packageName, String plugin, - String compatabilityLevel, + String compatibilityLevel, @SerializedName("mixins") List commonMixins, @SerializedName("client") @@ -25,7 +25,7 @@ public record MixinConfig( InjectorOptions injectors, OverwriteOptions overwrites ) { public MixinConfig(String packageName, List commonMixins, List clientMixins) { - this(true, "0.8", packageName, "org.embeddedt.modernfix.core.ModernFixMixinPlugin", "JAVA_8", + this(true, "0.8", packageName, "org.embeddedt.modernfix.core.ModernFixMixinPlugin", "JAVA_21", commonMixins, clientMixins, InjectorOptions.DEFAULT, OverwriteOptions.DEFAULT); } public record InjectorOptions(int defaultRequire) { diff --git a/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java b/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java index 1c672057..1af57d65 100644 --- a/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java +++ b/common/src/main/java/org/embeddedt/modernfix/chunk/SafeBlockGetter.java @@ -1,13 +1,14 @@ package org.embeddedt.modernfix.chunk; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.status.ChunkStatus; +import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import org.jetbrains.annotations.Nullable; @@ -32,7 +33,7 @@ public class SafeBlockGetter implements BlockGetter { if(!(access instanceof ChunkAccess)) return null; ChunkAccess chunk = (ChunkAccess)access; - if(!chunk.getStatus().isOrAfter(ChunkStatus.FULL)) + if(chunk instanceof LevelChunk lChunk && lChunk.getFullStatus() == FullChunkStatus.INACCESSIBLE) return null; return chunk; } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java deleted file mode 100644 index 9653bae5..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/paper_chunk_patches/ChunkMapMixin.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.bugfix.paper_chunk_patches; - -import net.minecraft.server.level.*; -import net.minecraft.server.level.progress.ChunkProgressListener; -import net.minecraft.util.thread.BlockableEventLoop; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.status.ChunkStatus; -import net.minecraft.world.level.chunk.status.WorldGenContext; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - - -@Mixin(ChunkMap.class) -public abstract class ChunkMapMixin { - @Shadow @Final private BlockableEventLoop mainThreadExecutor; - - @Shadow @Final private ChunkMap.DistanceManager distanceManager; - - @Shadow protected abstract CompletableFuture protoChunkToFullChunk(ChunkHolder arg, ChunkAccess chunkAccess); - - @Shadow @Final private ChunkProgressListener progressListener; - - @Shadow protected abstract CompletableFuture> scheduleChunkGeneration(ChunkHolder chunkHolder, ChunkStatus chunkStatus); - - @Shadow private WorldGenContext worldGenContext; - - /* https://github.com/PaperMC/Paper/blob/ver/1.17.1/patches/server/0752-Fix-chunks-refusing-to-unload-at-low-TPS.patch */ - @ModifyArg(method = "prepareAccessibleChunk", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"), index = 1) - private Executor useMainThreadExecutor(Executor executor) { - return this.mainThreadExecutor; - } - - /** - * @author embeddedt - * @reason revert 1.17 chunk system changes, significantly reduces time and RAM needed to load chunks - */ - @Inject(method = "schedule", at = @At("HEAD"), cancellable = true) - private void useLegacySchedulingLogic(ChunkHolder holder, ChunkStatus requiredStatus, CallbackInfoReturnable>> cir) { - if(requiredStatus != ChunkStatus.EMPTY && !requiredStatus.hasLoadDependencies()) { - ChunkPos chunkpos = holder.getPos(); - CompletableFuture> future = holder.getOrScheduleFuture(requiredStatus.getParent(), (ChunkMap)(Object)this); - cir.setReturnValue(future.thenComposeAsync((either) -> { - ChunkAccess partialChunk = either.orElse(null); - - if (requiredStatus == ChunkStatus.LIGHT) { - this.distanceManager.addTicket(TicketType.LIGHT, chunkpos, 33 + ChunkStatus.getDistance(ChunkStatus.LIGHT), chunkpos); - } - - // from original method - if (partialChunk != null && partialChunk.getStatus().isOrAfter(requiredStatus)) { - CompletableFuture completablefuture = requiredStatus.load(this.worldGenContext, (partialChunkAccess) -> { - return this.protoChunkToFullChunk(holder, partialChunkAccess); - }, partialChunk); - this.progressListener.onStatusChange(chunkpos, requiredStatus); - return completablefuture.thenApply(ChunkResult::of); - } else { - return this.scheduleChunkGeneration(holder, requiredStatus); - } - }, this.mainThreadExecutor).thenComposeAsync(CompletableFuture::completedFuture, this.mainThreadExecutor)); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/MinecraftMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/MinecraftMixin.java deleted file mode 100644 index 5a9deb53..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/MinecraftMixin.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.blast_search_trees; - -import net.minecraft.client.KeyMapping; -import net.minecraft.client.Minecraft; -import net.minecraft.client.searchtree.SearchRegistry; -import net.minecraft.world.item.ItemStack; -import org.embeddedt.modernfix.ModernFix; -import org.embeddedt.modernfix.annotation.ClientOnlyMixin; -import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; -import org.embeddedt.modernfix.searchtree.RecipeBookSearchTree; -import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry; -import org.lwjgl.glfw.GLFW; -import org.lwjgl.glfw.GLFWErrorCallback; -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.List; - -@Mixin(Minecraft.class) -@ClientOnlyMixin -public abstract class MinecraftMixin { - @Shadow @Final private SearchRegistry searchRegistry; - - @Shadow public abstract void populateSearchTree(SearchRegistry.Key key, List list); - - @Inject(method = "createSearchTrees", at = @At("HEAD"), cancellable = true) - private void replaceSearchTrees(CallbackInfo ci) { - SearchTreeProviderRegistry.Provider provider = SearchTreeProviderRegistry.getSearchTreeProvider(); - if(provider == null) - return; - ModernFix.LOGGER.info("Replacing search trees with '{}' provider", provider.getName()); - SearchRegistry.TreeBuilderSupplier nameSupplier = list -> provider.getSearchTree(false); - SearchRegistry.TreeBuilderSupplier tagSupplier = list -> provider.getSearchTree(true); - this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, nameSupplier); - this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, tagSupplier); - this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, list -> new RecipeBookSearchTree(provider.getSearchTree(false), list)); - ModernFixPlatformHooks.INSTANCE.registerCreativeSearchTrees(this.searchRegistry, nameSupplier, tagSupplier, this::populateSearchTree); - // grab components for all key mappings in order to prevent them from being loaded off-thread later - // this populates the LazyLoadedValues - // we also need to suppress GLFW errors to prevent crashes if a key is missing - GLFWErrorCallback oldCb = GLFW.glfwSetErrorCallback(null); - for(KeyMapping mapping : KeyMapping.ALL.values()) { - mapping.getTranslatedKeyMessage(); - } - GLFW.glfwSetErrorCallback(oldCb); - ci.cancel(); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/SessionSearchTreesMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/SessionSearchTreesMixin.java new file mode 100644 index 00000000..9beb4ac1 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/blast_search_trees/SessionSearchTreesMixin.java @@ -0,0 +1,95 @@ +package org.embeddedt.modernfix.common.mixin.perf.blast_search_trees; + +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.client.ClientRecipeBook; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.gui.screens.recipebook.RecipeCollection; +import net.minecraft.client.multiplayer.SessionSearchTrees; +import net.minecraft.client.searchtree.SearchTree; +import net.minecraft.world.item.ItemStack; +import org.embeddedt.modernfix.ModernFix; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.searchtree.RecipeBookSearchTree; +import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWErrorCallback; +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.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@Mixin(SessionSearchTrees.class) +@ClientOnlyMixin +public abstract class SessionSearchTreesMixin { + @Shadow private CompletableFuture> recipeSearch; + @Shadow private CompletableFuture> creativeByNameSearch; + private SearchTreeProviderRegistry.Provider mfix$provider; + + @Inject(method = "", at = @At("RETURN")) + private void onInit(CallbackInfo ci) { + mfix$provider = SearchTreeProviderRegistry.getSearchTreeProvider(); + if(mfix$provider != null) { + ModernFix.LOGGER.info("Replacing search trees with '{}' provider", mfix$provider.getName()); + } + + // grab components for all key mappings in order to prevent them from being loaded off-thread later + // this populates the LazyLoadedValues + // we also need to suppress GLFW errors to prevent crashes if a key is missing + GLFWErrorCallback oldCb = GLFW.glfwSetErrorCallback(null); + for(KeyMapping mapping : KeyMapping.ALL.values()) { + mapping.getTranslatedKeyMessage(); + } + GLFW.glfwSetErrorCallback(oldCb); + } + + @ModifyArg(method = "updateRecipes", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/SessionSearchTrees;register(Lnet/minecraft/client/multiplayer/SessionSearchTrees$Key;Ljava/lang/Runnable;)V"), index = 1) + private Runnable useModernFixRecipeTree(Runnable r, @Local(ordinal = 0, argsOnly = true) ClientRecipeBook clientRecipeBook) { + if(mfix$provider == null) { + return r; + } else { + return () -> { + List list = clientRecipeBook.getCollections(); + CompletableFuture old = this.recipeSearch; + this.recipeSearch = CompletableFuture.supplyAsync(() -> { + return new RecipeBookSearchTree(mfix$provider.getSearchTree(false), list); + }); + old.cancel(true); + }; + } + } + + @ModifyArg(method = "updateCreativeTooltips", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/SessionSearchTrees;register(Lnet/minecraft/client/multiplayer/SessionSearchTrees$Key;Ljava/lang/Runnable;)V"), index = 1) + private Runnable useSearchModItems(Runnable r) { + if(mfix$provider == null) { + return r; + } else { + return () -> { + CompletableFuture old = this.creativeByNameSearch; + this.creativeByNameSearch = CompletableFuture.supplyAsync(() -> { + return mfix$provider.getSearchTree(false); + }); + old.cancel(true); + }; + } + } + + @ModifyArg(method = "updateCreativeTags", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/SessionSearchTrees;register(Lnet/minecraft/client/multiplayer/SessionSearchTrees$Key;Ljava/lang/Runnable;)V"), index = 1) + private Runnable useSearchModTags(Runnable r) { + if(mfix$provider == null) { + return r; + } else { + return () -> { + CompletableFuture old = this.creativeByNameSearch; + this.creativeByNameSearch = CompletableFuture.supplyAsync(() -> { + return mfix$provider.getSearchTree(true); + }); + old.cancel(true); + }; + } + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java deleted file mode 100644 index 23180408..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_dfu; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.types.Type; -import net.minecraft.world.level.block.entity.BlockEntityType; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -/** - * Prevent fetchChoiceType calls from loading DFU early. Vanilla doesn't need the return values here. - */ -@Mixin(BlockEntityType.class) -public class BlockEntityTypeMixin { - @Redirect(method = "register", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;fetchChoiceType(Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type;")) - private static Type skipSchemaCheck(DSL.TypeReference ref, String s) { - return null; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java deleted file mode 100644 index e3729f57..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixersMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_dfu; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.DataFixer; -import net.minecraft.util.datafix.DataFixers; -import org.embeddedt.modernfix.dfu.LazyDataFixer; -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.CallbackInfoReturnable; - -import java.util.Set; - -@Mixin(DataFixers.class) -public abstract class DataFixersMixin { - @Shadow protected static DataFixer createFixerUpper(Set set) { - throw new AssertionError(); - } - - private static LazyDataFixer lazyDataFixer; - - /** - * Avoid classloading the DFU logic until we actually need it. - */ - @Inject(method = "createFixerUpper", at = @At("HEAD"), cancellable = true) - private static void createLazyFixerUpper(Set set, CallbackInfoReturnable cir) { - if(lazyDataFixer == null) { - lazyDataFixer = new LazyDataFixer(() -> createFixerUpper(set)); - cir.setReturnValue(lazyDataFixer); - } - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java deleted file mode 100644 index 737778f7..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_dfu; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.types.Type; -import net.minecraft.world.entity.EntityType; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -/** - * Prevent fetchChoiceType calls from loading DFU early. Vanilla doesn't need the return values here. - */ -@Mixin(EntityType.Builder.class) -public class EntityTypeBuilderMixin { - @Redirect(method = "build", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;fetchChoiceType(Lcom/mojang/datafixers/DSL$TypeReference;Ljava/lang/String;)Lcom/mojang/datafixers/types/Type;")) - private Type skipSchemaCheck(DSL.TypeReference ref, String s) { - return null; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/dfu/LazyDataFixer.java b/common/src/main/java/org/embeddedt/modernfix/dfu/LazyDataFixer.java deleted file mode 100644 index f40f9777..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/dfu/LazyDataFixer.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.embeddedt.modernfix.dfu; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.serialization.Dynamic; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.util.function.Supplier; - -public class LazyDataFixer implements DataFixer { - private static final Logger LOGGER = LogManager.getLogger("ModernFix"); - private DataFixer backingDataFixer; - private final Supplier dfuSupplier; - - public LazyDataFixer(Supplier dfuSupplier) { - LOGGER.info("Bypassed Mojang DFU"); - this.backingDataFixer = null; - this.dfuSupplier = dfuSupplier; - } - - private DataFixer getDataFixer() { - synchronized (this) { - if(backingDataFixer == null) { - LOGGER.info("Instantiating Mojang DFU"); - DFUBlaster.blastMaps(); - backingDataFixer = dfuSupplier.get(); - } - } - return backingDataFixer; - } - - @Override - public Dynamic update(DSL.TypeReference type, Dynamic input, int version, int newVersion) { - if(version >= newVersion) - return input; - return getDataFixer().update(type, input, version, newVersion); - } - - @Override - public Schema getSchema(int key) { - return getDataFixer().getSchema(key); - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java b/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java index 1f38dff9..b4b8bb1a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java +++ b/common/src/main/java/org/embeddedt/modernfix/platform/ModernFixPlatformHooks.java @@ -2,17 +2,13 @@ package org.embeddedt.modernfix.platform; import com.google.common.collect.Multimap; import com.mojang.brigadier.CommandDispatcher; -import net.minecraft.client.searchtree.SearchRegistry; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; import org.objectweb.asm.tree.ClassNode; import java.nio.file.Path; -import java.util.List; -import java.util.function.BiConsumer; import java.util.function.Consumer; public interface ModernFixPlatformHooks { @@ -48,7 +44,5 @@ public interface ModernFixPlatformHooks { void onLaunchComplete(); - void registerCreativeSearchTrees(SearchRegistry registry, SearchRegistry.TreeBuilderSupplier nameSupplier, SearchRegistry.TreeBuilderSupplier tagSupplier, BiConsumer, List> populator); - String getPlatformName(); } diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/DummySearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/DummySearchTree.java index a430faaf..49af04de 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/DummySearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/DummySearchTree.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.searchtree; -import net.minecraft.client.searchtree.RefreshableSearchTree; +import net.minecraft.client.searchtree.SearchTree; import net.minecraft.world.item.ItemStack; import java.util.Collections; @@ -9,16 +9,11 @@ import java.util.List; /** * Dummy search tree that stores nothing and returns nothing on searches. */ -public class DummySearchTree implements RefreshableSearchTree { +public class DummySearchTree implements SearchTree { public DummySearchTree() { super(); } - @Override - public void refresh() { - - } - @Override public List search(String pSearchText) { return Collections.emptyList(); @@ -27,7 +22,7 @@ public class DummySearchTree implements RefreshableSearchTree { static final SearchTreeProviderRegistry.Provider PROVIDER = new SearchTreeProviderRegistry.Provider() { @Override - public RefreshableSearchTree getSearchTree(boolean tag) { + public SearchTree getSearchTree(boolean tag) { return new DummySearchTree<>(); } diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java index 1c7ecd41..6c92df93 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java @@ -5,7 +5,7 @@ import mezz.jei.api.ingredients.ITypedIngredient; import mezz.jei.gui.ingredients.IngredientFilter; import mezz.jei.gui.ingredients.IngredientFilterApi; import mezz.jei.library.runtime.JeiRuntime; -import net.minecraft.client.searchtree.RefreshableSearchTree; +import net.minecraft.client.searchtree.SearchTree; import net.minecraft.world.item.ItemStack; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; @@ -92,7 +92,7 @@ public class JEIBackedSearchTree extends DummySearchTree { public static final SearchTreeProviderRegistry.Provider PROVIDER = new SearchTreeProviderRegistry.Provider() { @Override - public RefreshableSearchTree getSearchTree(boolean tag) { + public SearchTree getSearchTree(boolean tag) { return new JEIBackedSearchTree(tag); } diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java index 2d9a6e43..63db675a 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/REIBackedSearchTree.java @@ -7,7 +7,7 @@ import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.impl.client.search.AsyncSearchManager; import me.shedaniel.rei.impl.common.entry.type.EntryRegistryImpl; import me.shedaniel.rei.impl.common.util.HashedEntryStackWrapper; -import net.minecraft.client.searchtree.RefreshableSearchTree; +import net.minecraft.client.searchtree.SearchTree; import net.minecraft.world.item.ItemStack; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.platform.ModernFixPlatformHooks; @@ -133,7 +133,7 @@ public class REIBackedSearchTree extends DummySearchTree { public static final SearchTreeProviderRegistry.Provider PROVIDER = new SearchTreeProviderRegistry.Provider() { @Override - public RefreshableSearchTree getSearchTree(boolean tag) { + public SearchTree getSearchTree(boolean tag) { return new REIBackedSearchTree(tag); } diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/RecipeBookSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/RecipeBookSearchTree.java index 7fde1cc8..0bf239c4 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/RecipeBookSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/RecipeBookSearchTree.java @@ -37,11 +37,6 @@ public class RecipeBookSearchTree extends DummySearchTree { return collections; } - @Override - public void refresh() { - this.collectionsByItem = null; - } - @Override public List search(String pSearchText) { // Avoid constructing the recipe collection map until the first real search diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/SearchTreeProviderRegistry.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/SearchTreeProviderRegistry.java index 81df5502..f27c3855 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/SearchTreeProviderRegistry.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/SearchTreeProviderRegistry.java @@ -1,6 +1,6 @@ package org.embeddedt.modernfix.searchtree; -import net.minecraft.client.searchtree.RefreshableSearchTree; +import net.minecraft.client.searchtree.SearchTree; import net.minecraft.world.item.ItemStack; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; import org.embeddedt.modernfix.core.config.Option; @@ -29,7 +29,7 @@ public class SearchTreeProviderRegistry { } public interface Provider { - RefreshableSearchTree getSearchTree(boolean tag); + SearchTree getSearchTree(boolean tag); boolean canUse(); String getName(); } diff --git a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java index 8b4d0a09..80547ed2 100644 --- a/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java +++ b/fabric/src/main/java/org/embeddedt/modernfix/platform/fabric/ModernFixPlatformHooksImpl.java @@ -9,13 +9,10 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.CustomValue; import net.fabricmc.loader.api.metadata.ModMetadata; -import net.minecraft.client.searchtree.SearchRegistry; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.ItemStack; import org.embeddedt.modernfix.ModernFixFabric; import org.embeddedt.modernfix.api.constants.IntegrationConstants; import org.embeddedt.modernfix.core.ModernFixMixinPlugin; @@ -25,9 +22,7 @@ import org.embeddedt.modernfix.util.CommonModUtil; import org.objectweb.asm.tree.ClassNode; import java.nio.file.Path; -import java.util.List; import java.util.Map; -import java.util.function.BiConsumer; import java.util.function.Consumer; public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { @@ -109,13 +104,6 @@ public class ModernFixPlatformHooksImpl implements ModernFixPlatformHooks { return modOptions; } - public void registerCreativeSearchTrees(SearchRegistry registry, SearchRegistry.TreeBuilderSupplier nameSupplier, SearchRegistry.TreeBuilderSupplier tagSupplier, BiConsumer, List> populator) { - CreativeModeTabs.searchTab().setSearchTreeBuilder((list) -> { - populator.accept(SearchRegistry.CREATIVE_NAMES, list); - populator.accept(SearchRegistry.CREATIVE_TAGS, list); - }); - } - public void onLaunchComplete() { if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.spark_profile_launch.OnFabric")) { CommonModUtil.runWithoutCrash(() -> SparkLaunchProfiler.stop("launch"), "Failed to stop profiler"); diff --git a/gradle.properties b/gradle.properties index 896f5639..0f44d986 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,8 +5,8 @@ junit_version=5.10.0-M1 mixinextras_version=0.3.2 mod_id=modernfix -minecraft_version=1.20.6 -enabled_platforms=fabric,neoforge +minecraft_version=24w19a +enabled_platforms=fabric forge_version=20.6.42-beta # parchment_version=2023.07.09 refined_storage_version=4392788 @@ -15,9 +15,9 @@ rei_version=13.0.678 ctm_version=1.20.1-1.1.8+4 kubejs_version=1902.6.0-build.142 rhino_version=1902.2.2-build.268 -supported_minecraft_versions=1.20.6 +supported_minecraft_versions=24w19a -fabric_loader_version=0.15.9 +fabric_loader_version=0.15.11 fabric_api_version=0.97.8+1.20.6 continuity_version=3.0.0-beta.4+1.20.2