From 4d18234714b7bb61e20aef48c37f2ee2351b7b23 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Mon, 23 Dec 2019 17:17:32 +0000 Subject: [PATCH] Use a fake network handler too It appears that WB opens containers manually, and thus all of our stubs network stubs are entirely ignored. Thus the only solution here is to stub out the whole network handler code. Thankfully this is simple enough - we do the same for Plethora and 1.14. Fixes #328 --- .../shared/turtle/core/TurtlePlayer.java | 3 + .../shared/util/FakeNetHandler.java | 234 ++++++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java index 6bd90717e..50284741e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import dan200.computercraft.api.turtle.ITurtleAccess; +import dan200.computercraft.shared.util.FakeNetHandler; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.entity.Entity; @@ -46,11 +47,13 @@ public class TurtlePlayer extends FakePlayer public TurtlePlayer( World world ) { super( (WorldServer) world, DEFAULT_PROFILE ); + connection = new FakeNetHandler( this ); } private TurtlePlayer( ITurtleAccess turtle ) { super( (WorldServer) turtle.getWorld(), getProfile( turtle.getOwningPlayer() ) ); + connection = new FakeNetHandler( this ); setState( turtle ); } diff --git a/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java new file mode 100644 index 000000000..a99e53e09 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java @@ -0,0 +1,234 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared.util; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import net.minecraft.network.*; +import net.minecraft.network.play.client.*; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.common.util.FakePlayer; + +import javax.annotation.Nonnull; +import javax.crypto.SecretKey; + +public class FakeNetHandler extends NetHandlerPlayServer +{ + public static class FakeNetworkManager extends NetworkManager + { + private INetHandler handler; + + public FakeNetworkManager() + { + super( EnumPacketDirection.CLIENTBOUND ); + } + + @Override + public void channelActive( ChannelHandlerContext context ) + { + } + + @Override + public void setConnectionState( @Nonnull EnumConnectionState state ) + { + } + + @Override + public void channelInactive( ChannelHandlerContext context ) + { + } + + @Override + public void exceptionCaught( ChannelHandlerContext context, @Nonnull Throwable e ) + { + } + + @Override + public void setNetHandler( INetHandler handler ) + { + this.handler = handler; + } + + @Override + public void processReceivedPackets() + { + } + + @Override + public void closeChannel( @Nonnull ITextComponent channel ) + { + } + + @Override + public boolean isLocalChannel() + { + return false; + } + + + @Override + public void enableEncryption( SecretKey key ) + { + } + + @Override + public boolean isChannelOpen() + { + return false; + } + + @Nonnull + @Override + public INetHandler getNetHandler() + { + return handler; + } + + @Nonnull + @Override + public ITextComponent getExitMessage() + { + return null; + } + + @Override + public void disableAutoRead() + { + } + + @Nonnull + @Override + public Channel channel() + { + return null; + } + } + + + public FakeNetHandler( FakePlayer player ) + { + this( player.server, player ); + } + + public FakeNetHandler( MinecraftServer server, FakePlayer player ) + { + super( server, new FakeNetworkManager(), player ); + } + + @Override + public void processInput( CPacketInput packet ) + { + } + + @Override + public void processPlayer( CPacketPlayer packet ) + { + } + + @Override + public void setPlayerLocation( double x, double y, double z, float yaw, float pitch ) + { + } + + @Override + public void processPlayerDigging( CPacketPlayerDigging packet ) + { + } + + @Override + public void onDisconnect( @Nonnull ITextComponent chat ) + { + } + + @Override + @SuppressWarnings( "rawtypes" ) + public void sendPacket( @Nonnull final Packet packet ) + { + + } + + @Override + public void processHeldItemChange( CPacketHeldItemChange packet ) + { + } + + @Override + public void processChatMessage( @Nonnull CPacketChatMessage packet ) + { + } + + @Override + public void processEntityAction( CPacketEntityAction packet ) + { + } + + @Override + public void processUseEntity( CPacketUseEntity packet ) + { + } + + @Override + public void processClientStatus( CPacketClientStatus packet ) + { + } + + @Override + public void processCloseWindow( @Nonnull CPacketCloseWindow packet ) + { + } + + @Override + public void processClickWindow( CPacketClickWindow packet ) + { + } + + @Override + public void processEnchantItem( CPacketEnchantItem packet ) + { + } + + @Override + public void processCreativeInventoryAction( @Nonnull CPacketCreativeInventoryAction packet ) + { + } + + @Override + public void processConfirmTransaction( @Nonnull CPacketConfirmTransaction packet ) + { + } + + @Override + public void processUpdateSign( CPacketUpdateSign packet ) + { + } + + @Override + public void processKeepAlive( @Nonnull CPacketKeepAlive packet ) + { + } + + @Override + public void processPlayerAbilities( CPacketPlayerAbilities packet ) + { + } + + @Override + public void processTabComplete( CPacketTabComplete packet ) + { + } + + @Override + public void processClientSettings( @Nonnull CPacketClientSettings packet ) + { + } + + @Override + public void processCustomPayload( CPacketCustomPayload packetIn ) + { + } +}