diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixTypesMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixTypesMixin.java index 5a6ab91a..581e7376 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixTypesMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/DataFixTypesMixin.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(DataFixTypes.class) public class DataFixTypesMixin { - @Inject(method = "update(Lcom/mojang/datafixers/DataFixer;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;", at = @At(value = "INVOKE", target = "Lcom/mojang/datafixers/DataFixer;update(Lcom/mojang/datafixers/DSL$TypeReference;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;")) + @Inject(method = "update(Lcom/mojang/datafixers/DataFixer;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;", at = @At(value = "INVOKE", target = "Lcom/mojang/datafixers/DataFixer;update(Lcom/mojang/datafixers/DSL$TypeReference;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;"), remap = false) private void kickOnUpdate(DataFixer fixer, Dynamic input, int version, int newVersion, CallbackInfoReturnable> cir) { if (version < newVersion) { DFUBlaster.kick(); diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelDiscoveryMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelDiscoveryMixin.java index 36c38aa3..bd1b829f 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelDiscoveryMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelDiscoveryMixin.java @@ -15,7 +15,7 @@ public class ModelDiscoveryMixin { * @reason We will show the warning ourselves later when loading the model dynamically, this is just spam since * the models don't exist during early loading */ - @Redirect(method = "method_68027", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + @Redirect(method = { "method_68027", "lambda$new$0" }, at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V"), remap = false) private void disableMissingModelWarning(Logger instance, String s, Object o) { } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelManagerMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelManagerMixin.java index 838b8e55..0d8c5859 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelManagerMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/ModelManagerMixin.java @@ -13,9 +13,11 @@ import net.minecraft.client.resources.model.AtlasSet; import net.minecraft.client.resources.model.BlockStateModelLoader; import net.minecraft.client.resources.model.ClientItemInfoLoader; import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.core.DefaultedRegistry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.apache.commons.lang3.ArrayUtils; @@ -33,7 +35,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.lang.ref.WeakReference; +import java.util.Iterator; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -128,4 +132,24 @@ public class ModelManagerMixin implements DynamicModelProvider.ModelManagerExten public DynamicModelProvider mfix$getModelProvider() { return this.mfix$modelProvider; } + + /** + * @author DerCommander323 + * @reason stop NeoForge from iterating over registered items to warn about missing models, as it always fails + * with dynamic resources enabled + */ + @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/DefaultedRegistry;iterator()Ljava/util/Iterator;")) + private static Iterator iterateItemRegistry(DefaultedRegistry registry) { + return new Iterator<>() { + @Override + public boolean hasNext() { + return false; + } + + @Override + public Item next() { + throw new NoSuchElementException("Tried to iterate over empty item registry iterator"); + } + }; + } } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/lazy_search_tree_registry/SessionSearchTreesMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/lazy_search_tree_registry/SessionSearchTreesMixin.java index 1eb93c3d..9985314b 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/lazy_search_tree_registry/SessionSearchTreesMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/lazy_search_tree_registry/SessionSearchTreesMixin.java @@ -22,7 +22,7 @@ public class SessionSearchTreesMixin { @Shadow private CompletableFuture> recipeSearch; private Supplier> mfix$deferredSearchTreeSupplier; - @ModifyArg(method = { "method_60367", "lambda$updateRecipes$8" }, at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;")) + @ModifyArg(method = { "method_64911(Lnet/minecraft/client/ClientRecipeBook;Lnet/minecraft/world/level/Level;)V", "lambda$updateRecipes$9(Lnet/minecraft/client/ClientRecipeBook;Lnet/minecraft/world/level/Level;)V" }, at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;")) private Supplier> mfix$deferProcessing(Supplier> supplier) { this.mfix$deferredSearchTreeSupplier = supplier; return SearchTree::empty;