From 2710a02b2a7cb59a8e35784537e3a2662ebeefa4 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:08:44 -0400 Subject: [PATCH 1/3] Detect vanilla connection using custom logic --- .../RecipeBookSettingsMixin.java | 17 ++++---------- .../forge/mixin/core/NetworkHooksMixin.java | 22 +++++++++++++++++++ .../modernfix/forge/packet/NetworkUtils.java | 5 +++++ 3 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java index c6c512e9..430e2185 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/recipe_book_type_desync/RecipeBookSettingsMixin.java @@ -1,15 +1,12 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.recipe_book_type_desync; import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.stats.RecipeBookSettings; import net.minecraft.world.inventory.RecipeBookType; -import net.minecraftforge.fml.network.NetworkHooks; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.embeddedt.modernfix.forge.packet.NetworkUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -41,15 +38,9 @@ public class RecipeBookSettingsMixin { } @Redirect(method = "read(Lnet/minecraft/network/FriendlyByteBuf;)Lnet/minecraft/stats/RecipeBookSettings;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/FriendlyByteBuf;readBoolean()Z")) private static boolean useDefaultBooleanIfVanilla(FriendlyByteBuf buf, @Local(ordinal = 0) RecipeBookType type) { - if(type.ordinal() >= (mfix$maxVanillaOrdinal + 1)) { - ClientPacketListener listener = Minecraft.getInstance().getConnection(); - if(listener != null) { - Connection connection = listener.getConnection(); - if(NetworkHooks.isVanillaConnection(connection)) { - ModernFix.LOGGER.warn("Not reading recipe book data for type '{}' as we are using vanilla connection", type.name()); - return false; // skip actually reading buffer - } - } + if(type.ordinal() >= (mfix$maxVanillaOrdinal + 1) && NetworkUtils.isCurrentlyVanilla) { + ModernFix.LOGGER.warn("Not reading recipe book data for type '{}' as we are using vanilla connection", type.name()); + return false; // skip actually reading buffer } return buf.readBoolean(); } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java new file mode 100644 index 00000000..9d04bc4d --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java @@ -0,0 +1,22 @@ +package org.embeddedt.modernfix.forge.mixin.core; + +import net.minecraft.network.Connection; +import net.minecraftforge.fml.network.NetworkHooks; +import org.embeddedt.modernfix.forge.packet.NetworkUtils; +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(NetworkHooks.class) +public abstract class NetworkHooksMixin { + @Shadow public static boolean isVanillaConnection(Connection manager) { + throw new AssertionError(); + } + + @Inject(method = "handleClientLoginSuccess", at = @At("RETURN")) + private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) { + NetworkUtils.isCurrentlyVanilla = isVanillaConnection(manager); + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java new file mode 100644 index 00000000..ddcd27ff --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/packet/NetworkUtils.java @@ -0,0 +1,5 @@ +package org.embeddedt.modernfix.forge.packet; + +public class NetworkUtils { + public static boolean isCurrentlyVanilla; +} From 9306743001cd39b84d60dfb5cf163f97e625c5f8 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:09:25 -0400 Subject: [PATCH 2/3] Update package for 1.18 --- .../embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java index 9d04bc4d..5e231c66 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java @@ -1,7 +1,7 @@ package org.embeddedt.modernfix.forge.mixin.core; import net.minecraft.network.Connection; -import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.network.NetworkHooks; import org.embeddedt.modernfix.forge.packet.NetworkUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; From 9c02b2c3935f7d50ac9906a07b97734b50bb18bd Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:12:26 -0400 Subject: [PATCH 3/3] Update mixin for 1.18 --- .../embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java index 5e231c66..668870dd 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/NetworkHooksMixin.java @@ -15,7 +15,7 @@ public abstract class NetworkHooksMixin { throw new AssertionError(); } - @Inject(method = "handleClientLoginSuccess", at = @At("RETURN")) + @Inject(method = "handleClientLoginSuccess", at = @At("RETURN"), remap = false) private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) { NetworkUtils.isCurrentlyVanilla = isVanillaConnection(manager); }