mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-30 21:23:00 +00:00 
			
		
		
		
	Add a fake network handler to the TurtleFakePlayer
This should fix several issues (see #304, etc...). I'll try to get round to PRing this into Forge at some point, though on the other hand this is /super/ ugly.
This commit is contained in:
		| @@ -9,12 +9,20 @@ package dan200.computercraft.shared.turtle.core; | |||||||
| import com.mojang.authlib.GameProfile; | import com.mojang.authlib.GameProfile; | ||||||
| import dan200.computercraft.ComputerCraft; | import dan200.computercraft.ComputerCraft; | ||||||
| import dan200.computercraft.api.turtle.ITurtleAccess; | import dan200.computercraft.api.turtle.ITurtleAccess; | ||||||
|  | import dan200.computercraft.shared.util.FakeNetHandler; | ||||||
| import dan200.computercraft.shared.util.InventoryUtil; | import dan200.computercraft.shared.util.InventoryUtil; | ||||||
| import dan200.computercraft.shared.util.WorldUtil; | import dan200.computercraft.shared.util.WorldUtil; | ||||||
|  | import net.minecraft.entity.Entity; | ||||||
| import net.minecraft.entity.EntityClassification; | import net.minecraft.entity.EntityClassification; | ||||||
| import net.minecraft.entity.EntityType; | import net.minecraft.entity.EntityType; | ||||||
|  | import net.minecraft.entity.passive.horse.AbstractHorseEntity; | ||||||
|  | import net.minecraft.inventory.IInventory; | ||||||
|  | import net.minecraft.inventory.container.INamedContainerProvider; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
|  | import net.minecraft.potion.EffectInstance; | ||||||
|  | import net.minecraft.tileentity.SignTileEntity; | ||||||
| import net.minecraft.util.Direction; | import net.minecraft.util.Direction; | ||||||
|  | import net.minecraft.util.Hand; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| import net.minecraft.util.math.Vec3d; | import net.minecraft.util.math.Vec3d; | ||||||
| import net.minecraft.world.server.ServerWorld; | import net.minecraft.world.server.ServerWorld; | ||||||
| @@ -22,6 +30,7 @@ import net.minecraftforge.common.util.FakePlayer; | |||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  | import java.util.OptionalInt; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
|  |  | ||||||
| public final class TurtlePlayer extends FakePlayer | public final class TurtlePlayer extends FakePlayer | ||||||
| @@ -40,6 +49,7 @@ public final class TurtlePlayer extends FakePlayer | |||||||
|     private TurtlePlayer( ITurtleAccess turtle ) |     private TurtlePlayer( ITurtleAccess turtle ) | ||||||
|     { |     { | ||||||
|         super( (ServerWorld) turtle.getWorld(), getProfile( turtle.getOwningPlayer() ) ); |         super( (ServerWorld) turtle.getWorld(), getProfile( turtle.getOwningPlayer() ) ); | ||||||
|  |         this.connection = new FakeNetHandler( this ); | ||||||
|         setState( turtle ); |         setState( turtle ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -50,6 +60,13 @@ public final class TurtlePlayer extends FakePlayer | |||||||
|  |  | ||||||
|     private void setState( ITurtleAccess turtle ) |     private void setState( ITurtleAccess turtle ) | ||||||
|     { |     { | ||||||
|  |         if( openContainer != null ) | ||||||
|  |         { | ||||||
|  |             ComputerCraft.log.warn( "Turtle has open container ({})", openContainer ); | ||||||
|  |             openContainer.onContainerClosed( this ); | ||||||
|  |             openContainer = null; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         BlockPos position = turtle.getPosition(); |         BlockPos position = turtle.getPosition(); | ||||||
|         posX = position.getX() + 0.5; |         posX = position.getX() + 0.5; | ||||||
|         posY = position.getY() + 0.5; |         posY = position.getY() + 0.5; | ||||||
| @@ -126,6 +143,73 @@ public final class TurtlePlayer extends FakePlayer | |||||||
|         return new Vec3d( posX, posY, posZ ); |         return new Vec3d( posX, posY, posZ ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // TODO: Work out what needs stubbing again. |     //region Code which depends on the connection | ||||||
|     //  Or just replace the network. |     @Nonnull | ||||||
|  |     @Override | ||||||
|  |     public OptionalInt openContainer( @Nullable INamedContainerProvider prover ) | ||||||
|  |     { | ||||||
|  |         return OptionalInt.empty(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void sendEnterCombat() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void sendEndCombat() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean startRiding( @Nonnull Entity entityIn, boolean force ) | ||||||
|  |     { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void stopRiding() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void openSignEditor( SignTileEntity signTile ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void openHorseInventory( AbstractHorseEntity horse, IInventory inventory ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void openBook( ItemStack stack, @Nonnull Hand hand ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void closeScreen() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void updateHeldItem() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onNewPotionEffect( EffectInstance id ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onChangedPotionEffect( EffectInstance id, boolean apply ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onFinishedPotionEffect( EffectInstance effect ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |     //endregion | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,360 @@ | |||||||
|  | /* | ||||||
|  |  * 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.ChannelHandlerContext; | ||||||
|  | import io.netty.util.concurrent.Future; | ||||||
|  | import io.netty.util.concurrent.GenericFutureListener; | ||||||
|  | import net.minecraft.network.*; | ||||||
|  | import net.minecraft.network.play.ServerPlayNetHandler; | ||||||
|  | import net.minecraft.network.play.client.*; | ||||||
|  | import net.minecraft.util.text.ITextComponent; | ||||||
|  | import net.minecraftforge.common.util.FakePlayer; | ||||||
|  |  | ||||||
|  | import javax.annotation.Nonnull; | ||||||
|  | import javax.annotation.Nullable; | ||||||
|  | import javax.crypto.SecretKey; | ||||||
|  |  | ||||||
|  | public class FakeNetHandler extends ServerPlayNetHandler | ||||||
|  | { | ||||||
|  |     public FakeNetHandler( @Nonnull FakePlayer player ) | ||||||
|  |     { | ||||||
|  |         super( player.getServerWorld().getServer(), new FakeNetworkManager(), player ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void tick() | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void disconnect( @Nonnull ITextComponent reason ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onDisconnect( ITextComponent reason ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void sendPacket( @Nonnull IPacket<?> packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void sendPacket( @Nonnull IPacket<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> whenSent ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processInput( CInputPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processVehicleMove( CMoveVehiclePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processConfirmTeleport( CConfirmTeleportPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void handleRecipeBookUpdate( CRecipeInfoPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void handleSeenAdvancements( CSeenAdvancementsPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processTabComplete( CTabCompletePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUpdateCommandBlock( @Nonnull CUpdateCommandBlockPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUpdateCommandMinecart( @Nonnull CUpdateMinecartCommandBlockPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processPickItem( CPickItemPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processRenameItem( @Nonnull CRenameItemPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUpdateBeacon( @Nonnull CUpdateBeaconPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUpdateStructureBlock( @Nonnull CUpdateStructureBlockPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void func_217262_a( @Nonnull CUpdateJigsawBlockPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processSelectTrade( CSelectTradePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processEditBook( CEditBookPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processNBTQueryEntity( @Nonnull CQueryEntityNBTPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processNBTQueryBlockEntity( @Nonnull CQueryTileEntityNBTPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processPlayer( CPlayerPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processPlayerDigging( CPlayerDiggingPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processTryUseItemOnBlock( CPlayerTryUseItemOnBlockPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processTryUseItem( CPlayerTryUseItemPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void handleSpectate( @Nonnull CSpectatePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void handleResourcePackStatus( CResourcePackStatusPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processSteerBoat( @Nonnull CSteerBoatPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processHeldItemChange( CHeldItemChangePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processChatMessage( @Nonnull CChatMessagePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void handleAnimation( CAnimateHandPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processEntityAction( CEntityActionPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUseEntity( CUseEntityPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processClientStatus( CClientStatusPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processCloseWindow( @Nonnull CCloseWindowPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processClickWindow( CClickWindowPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processPlaceRecipe( @Nonnull CPlaceRecipePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processEnchantItem( CEnchantItemPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processCreativeInventoryAction( @Nonnull CCreativeInventoryActionPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processConfirmTransaction( CConfirmTransactionPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processUpdateSign( CUpdateSignPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processKeepAlive( @Nonnull CKeepAlivePacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processPlayerAbilities( CPlayerAbilitiesPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processClientSettings( @Nonnull CClientSettingsPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void processCustomPayload( CCustomPayloadPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void func_217263_a( @Nonnull CSetDifficultyPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void func_217261_a( @Nonnull CLockDifficultyPacket packet ) | ||||||
|  |     { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static class FakeNetworkManager extends NetworkManager | ||||||
|  |     { | ||||||
|  |         private INetHandler handler; | ||||||
|  |         private ITextComponent closeReason; | ||||||
|  |  | ||||||
|  |         FakeNetworkManager() | ||||||
|  |         { | ||||||
|  |             super( PacketDirection.CLIENTBOUND ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void channelActive( ChannelHandlerContext context ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void setConnectionState( @Nonnull ProtocolType state ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void channelInactive( ChannelHandlerContext context ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void exceptionCaught( ChannelHandlerContext context, @Nonnull Throwable err ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         protected void channelRead0( ChannelHandlerContext context, @Nonnull IPacket<?> packet ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void setNetHandler( INetHandler handler ) | ||||||
|  |         { | ||||||
|  |             this.handler = handler; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void sendPacket( @Nonnull IPacket<?> packet ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void sendPacket( @Nonnull IPacket<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> whenSent ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void tick() | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void closeChannel( @Nonnull ITextComponent message ) | ||||||
|  |         { | ||||||
|  |             this.closeReason = message; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void enableEncryption( SecretKey key ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Nonnull | ||||||
|  |         @Override | ||||||
|  |         public INetHandler getNetHandler() | ||||||
|  |         { | ||||||
|  |             return handler; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Nullable | ||||||
|  |         @Override | ||||||
|  |         public ITextComponent getExitMessage() | ||||||
|  |         { | ||||||
|  |             return closeReason; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void disableAutoRead() | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         @Override | ||||||
|  |         public void setCompressionThreshold( int threshold ) | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev