From c1182944f3222e7563b17038b818e6b3fe54695e Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 8 Aug 2023 18:17:01 -0400 Subject: [PATCH] Redirect fetchChoiceType directly in vanilla code instead of fully disabling it Should address #204 --- .../dynamic_dfu/BlockEntityTypeMixin.java | 19 +++++++++++++++++++ .../dynamic_dfu/EntityTypeBuilderMixin.java | 19 +++++++++++++++++++ .../dynamic_dfu/SharedConstantsMixin.java | 15 --------------- 3 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java create 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/common/mixin/perf/dynamic_dfu/SharedConstantsMixin.java 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 new file mode 100644 index 00000000..23180408 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/BlockEntityTypeMixin.java @@ -0,0 +1,19 @@ +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/EntityTypeBuilderMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java new file mode 100644 index 00000000..737778f7 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/EntityTypeBuilderMixin.java @@ -0,0 +1,19 @@ +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/common/mixin/perf/dynamic_dfu/SharedConstantsMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/SharedConstantsMixin.java deleted file mode 100644 index ece6aaf5..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_dfu/SharedConstantsMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_dfu; - -import net.minecraft.SharedConstants; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(SharedConstants.class) -public class SharedConstantsMixin { - @Inject(method = "", at = @At("RETURN")) - private static void skipSchemaCheck(CallbackInfo ci) { - SharedConstants.CHECK_DATA_FIXER_SCHEMA = false; - } -}