From 8ea1742135a3199620871d4b29fba44245a5d75a Mon Sep 17 00:00:00 2001 From: Toad-Dev <748280+toad-dev@users.noreply.github.com> Date: Mon, 7 Feb 2022 23:16:41 -0800 Subject: [PATCH] Give FakeNetworkManager a nonnull channel. Another mod was using mixins to access this private field without any null checking. I got the idea to use an EmbeddedChannel from Carpet, which was having the same issue with this mod. Fixes #53. --- .../fabric/mixin/ConnectionAccess.java | 18 ++++++++++++++++++ .../shared/util/FakeNetHandler.java | 3 +++ src/main/resources/computercraft.mixins.json | 1 + 3 files changed, 22 insertions(+) create mode 100644 src/main/java/dan200/computercraft/fabric/mixin/ConnectionAccess.java diff --git a/src/main/java/dan200/computercraft/fabric/mixin/ConnectionAccess.java b/src/main/java/dan200/computercraft/fabric/mixin/ConnectionAccess.java new file mode 100644 index 000000000..6521317cb --- /dev/null +++ b/src/main/java/dan200/computercraft/fabric/mixin/ConnectionAccess.java @@ -0,0 +1,18 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.fabric.mixin; + +import io.netty.channel.Channel; +import net.minecraft.network.Connection; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin( Connection.class ) +public interface ConnectionAccess +{ + @Accessor + void setChannel( Channel channel ); +} diff --git a/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java index 1920f7f0e..9a8480852 100644 --- a/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java +++ b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java @@ -6,7 +6,9 @@ package dan200.computercraft.shared.util; import dan200.computercraft.api.turtle.FakePlayer; +import dan200.computercraft.fabric.mixin.ConnectionAccess; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.embedded.EmbeddedChannel; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import net.minecraft.network.Connection; @@ -283,6 +285,7 @@ public class FakeNetHandler extends ServerGamePacketListenerImpl FakeNetworkManager() { super( PacketFlow.CLIENTBOUND ); + ((ConnectionAccess)this).setChannel( new EmbeddedChannel() ); } @Override diff --git a/src/main/resources/computercraft.mixins.json b/src/main/resources/computercraft.mixins.json index b00acb4ef..f92f23b39 100644 --- a/src/main/resources/computercraft.mixins.json +++ b/src/main/resources/computercraft.mixins.json @@ -3,6 +3,7 @@ "package": "dan200.computercraft.fabric.mixin", "compatibilityLevel": "JAVA_16", "mixins": [ + "ConnectionAccess", "LevelResourceAccess", "MinecraftServerAccess",