mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-06-26 07:03:22 +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:
parent
ee4e42e730
commit
bedac71e3d
|
@ -9,12 +9,20 @@
|
||||||
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 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 @@ private static GameProfile getProfile( @Nullable GameProfile profile )
|
||||||
|
|
||||||
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 Vec3d getPositionVector()
|
||||||
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 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user