Java源码示例:net.minecraft.network.NetHandlerPlayServer

示例1
/**
 * Puts the player into local coordinates and makes a record of where they used to be.
 */
default void doPreProcessing(INetHandlerPlayServer server, boolean callingFromSponge) {
    if (isPacketOnMainThread(server, callingFromSponge)) {
        // System.out.println("Pre packet process");
        NetHandlerPlayServer serverHandler = (NetHandlerPlayServer) server;
        EntityPlayerMP player = serverHandler.player;
        PhysicsWrapperEntity wrapper = getPacketParent(serverHandler);
        if (wrapper != null
            && wrapper.getPhysicsObject().getShipTransformationManager() != null) {
            ISubspaceProvider worldProvider = (ISubspaceProvider) player.getServerWorld();
            ISubspace worldSubspace = worldProvider.getSubspace();
            worldSubspace.snapshotSubspacedEntity((ISubspacedEntity) player);
            wrapper.getPhysicsObject().getShipTransformationManager()
                .getCurrentTickTransform().transform(player,
                TransformType.GLOBAL_TO_SUBSPACE);
        }

    }
}
 
示例2
/**
 * Restores the player from local coordinates to where they used to be.
 */
default void doPostProcessing(INetHandlerPlayServer server, boolean callingFromSponge) {
    if (isPacketOnMainThread(server, callingFromSponge)) {
        NetHandlerPlayServer serverHandler = (NetHandlerPlayServer) server;
        EntityPlayerMP player = serverHandler.player;
        PhysicsWrapperEntity wrapper = getPacketParent(serverHandler);
        // I don't care what happened to that ship in the time between, we must restore
        // the player to their proper coordinates.
        ISubspaceProvider worldProvider = (ISubspaceProvider) player.getServerWorld();
        ISubspace worldSubspace = worldProvider.getSubspace();
        ISubspacedEntity subspacedEntity = (ISubspacedEntity) player;
        ISubspacedEntityRecord record = worldSubspace
            .getRecordForSubspacedEntity(subspacedEntity);
        // System.out.println(player.getPosition());
        if (subspacedEntity.currentSubspaceType() == CoordinateSpaceType.SUBSPACE_COORDINATES) {
            subspacedEntity.restoreSubspacedEntityStateToRecord(record);
            player.setPosition(player.posX, player.posY, player.posZ);
        }
        // System.out.println(player.getPosition());
        // We need this because Sponge Mixins prevent this from properly working. This
        // won't be necessary on client however.
    }
}
 
示例3
@Override
public void doPostProcessing(INetHandlerPlayServer server, boolean callingFromSponge) {
    if (isPacketOnMainThread(server, callingFromSponge)) {
        // ===== Dangerous code here =====
        if (cachedPlayerGameType != null) {
            getPacketPlayer(server).interactionManager.gameType = cachedPlayerGameType;
        }
        PhysicsWrapperEntity parent = getPacketParent((NetHandlerPlayServer) server);
        if (parent != null) {
            parent.getPhysicsObject().getSubspace()
                .forceSubspaceRecord((ISubspacedEntity) getPacketPlayer(server), null);
        }
        IDraggable draggable = (IDraggable) getPacketPlayer(server);
        draggable.setForcedRelativeSubspace(null);
    }
}
 
示例4
@Override
protected void channelRead0(ChannelHandlerContext ctx, PacketAbstract packet) throws Exception {
	INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();

	switch (FMLCommonHandler.instance().getEffectiveSide()) {
		case CLIENT:
			FMLClientHandler.instance().getClient().addScheduledTask(() -> packet.handleClientSide(NovaMinecraft.proxy.getClientPlayer()));
			break;
		case SERVER:
			FMLCommonHandler.instance().getMinecraftServerInstance().addScheduledTask(() -> packet.handleServerSide(((NetHandlerPlayServer) netHandler).player));
			break;
		default:
			break;
	}

}
 
示例5
@Override
protected void channelRead0(ChannelHandlerContext ctx, PacketAbstract packet) throws Exception {
	INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();

	switch (FMLCommonHandler.instance().getEffectiveSide()) {
		case CLIENT:
			FMLClientHandler.instance().getClient().addScheduledTask(() -> packet.handleClientSide(NovaMinecraft.proxy.getClientPlayer()));
			break;
		case SERVER:
			FMLCommonHandler.instance().getMinecraftServerInstance().addScheduledTask(() -> packet.handleServerSide(((NetHandlerPlayServer) netHandler).playerEntity));
			break;
		default:
			break;
	}

}
 
示例6
@Override
protected void channelRead0(ChannelHandlerContext ctx, PacketAbstract packet) throws Exception {
	INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();

	switch (FMLCommonHandler.instance().getEffectiveSide()) {
		case CLIENT:
			packet.handleClientSide(NovaMinecraft.proxy.getClientPlayer());
			break;
		case SERVER:
			packet.handleServerSide(((NetHandlerPlayServer) netHandler).playerEntity);
			break;
		default:
			break;
	}

}
 
示例7
@Override
protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List<Object> out) throws Exception {
    ByteBuf payload = msg.payload();
    byte discriminator = payload.readByte();
    Class<? extends AbstractPacket> clazz = this.packets.get(discriminator);

    AbstractPacket pkt = clazz.newInstance();
    pkt.decodeInto(ctx, payload.slice());

    switch (FMLCommonHandler.instance().getEffectiveSide()) {
        case CLIENT:
            pkt.handleClientSide(this.getClientPlayer());
            break;
        case SERVER:
            INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
            pkt.handleServerSide(((NetHandlerPlayServer) netHandler).playerEntity);
            break;
        default:
        	break;
    }

    out.add(pkt);
}
 
示例8
@SubscribeEvent
@SuppressWarnings("unchecked")
public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event) {
    Packet packet = proxy2packet(event.getPacket());
    if (serverExecutors.containsKey(packet.getClass())) {
        PacketExecutor<Packet, NetHandlerPlayServer> executor = (PacketExecutor<Packet, NetHandlerPlayServer>) serverExecutors.get(packet.getClass());
        NetHandlerPlayServer handler = (NetHandlerPlayServer) event.getHandler();
        IThreadListener threadListener = FMLCommonHandler.instance().getWorldThread(handler);
        if(threadListener.isCallingFromMinecraftThread()) {
            executor.execute(packet, handler);
        } else {
            threadListener.addScheduledTask(() -> executor.execute(packet, handler));
        }
    }
}
 
示例9
@Override
public void setScoreboard(Scoreboard scoreboard) {
    Validate.notNull(scoreboard, "Scoreboard cannot be null");
    NetHandlerPlayServer connection = getHandle().connection;
    if (connection == null) {
        return;
    }
    if (connection.isDisconnected()) {
    }

    this.server.getScoreboardManager().setPlayerBoard(this, scoreboard);
}
 
示例10
default boolean isPacketOnMainThread(INetHandlerPlayServer server, boolean callingFromSponge) {
    if (!MixinLoadManager.isSpongeEnabled() || callingFromSponge) {
        NetHandlerPlayServer serverHandler = (NetHandlerPlayServer) server;
        EntityPlayerMP player = serverHandler.player;
        return player.getServerWorld().isCallingFromMinecraftThread();
    } else {
        return false;
    }
}
 
示例11
@Override
public void doPreProcessing(INetHandlerPlayServer server, boolean callingFromSponge) {
    if (isPacketOnMainThread(server, callingFromSponge)) {
        PhysicsWrapperEntity parent = getPacketParent((NetHandlerPlayServer) server);
        if (parent != null) {
            ISubspace parentSubspace = parent.getPhysicsObject().getSubspace();
            ISubspacedEntityRecord entityRecord = parentSubspace
                .getRecordForSubspacedEntity((ISubspacedEntity) getPacketPlayer(server));
            VectorImmutable positionGlobal = entityRecord.getPositionInGlobalCoordinates();
            VectorImmutable lookVectorGlobal = entityRecord
                .getLookDirectionInGlobalCoordinates();

            float pitch = (float) VSMath.getPitchFromVectorImmutable(lookVectorGlobal);
            float yaw = (float) VSMath.getYawFromVectorImmutable(lookVectorGlobal, pitch);

            // ===== Set the proper position values for the player packet ====
            thisPacket.moving = true;
            thisPacket.onGround = true;
            thisPacket.x = positionGlobal.getX();
            thisPacket.y = positionGlobal.getY();
            thisPacket.z = positionGlobal.getZ();

            // ===== Set the proper rotation values for the player packet =====
            thisPacket.rotating = true;
            thisPacket.yaw = yaw;
            thisPacket.pitch = pitch;

            // ===== Dangerous code here =====
            cachedPlayerGameType = getPacketPlayer(server).interactionManager.gameType;
            getPacketPlayer(server).interactionManager.gameType = GameType.CREATIVE;
        }
    }
}
 
示例12
@Override
public PhysicsWrapperEntity getPacketParent(NetHandlerPlayServer server) {
    World world = server.player.getEntityWorld();
    Optional<PhysicsObject> physicsObject = ValkyrienUtils
        .getPhysicsObject(world, thisPacketTryUse.getPosition());
    if (physicsObject.isPresent()) {
        return physicsObject.get()
            .getWrapperEntity();
    } else {
        return null;
    }
}
 
示例13
@Override
public PhysicsWrapperEntity getPacketParent(NetHandlerPlayServer server) {
    World world = server.player.getEntityWorld();
    Optional<PhysicsObject> physicsObject = ValkyrienUtils
        .getPhysicsObject(world, thisAsPacketSign.getPosition());
    return physicsObject.map(PhysicsObject::getWrapperEntity).orElse(null);
}
 
示例14
@Override
public PhysicsWrapperEntity getPacketParent(NetHandlerPlayServer server) {
    World world = server.player.getEntityWorld();
    Optional<PhysicsObject> physicsObject = ValkyrienUtils
        .getPhysicsObject(world, thisPacketTryUse.getPos());
    if (physicsObject.isPresent()) {
        return physicsObject.get()
            .getWrapperEntity();
    } else {
        return null;
    }
}
 
示例15
@Inject(method = "onProcessPacket", at = @At(value = "HEAD"))
private static void preOnProcessPacket(Packet packetIn, INetHandler netHandler,
    CallbackInfo info) {
    if (packetIn instanceof ITransformablePacket) {
        ITransformablePacket transformPacket = (ITransformablePacket) packetIn;
        transformPacket.doPreProcessing((NetHandlerPlayServer) netHandler, true);
    }
}
 
示例16
@Inject(method = "onProcessPacket", at = @At(value = "RETURN"))
private static void postOnProcessPacket(Packet packetIn, INetHandler netHandler,
    CallbackInfo info) {
    if (packetIn instanceof ITransformablePacket) {
        ITransformablePacket transformPacket = (ITransformablePacket) packetIn;
        transformPacket.doPostProcessing((NetHandlerPlayServer) netHandler, true);
    }
}
 
示例17
@SubscribeEvent
public void onServerPacket( FMLNetworkEvent.ServerCustomPacketEvent event )
{
    try
    {
        QCraftPacket packet = new QCraftPacket();
        packet.fromBytes( event.packet.payload() );
        QCraft.handleServerPacket( packet, ((NetHandlerPlayServer)event.handler).playerEntity );
    }
    catch( Exception e )
    {
        // Something failed, ignore it
        e.printStackTrace();
    }
}
 
示例18
@Override
public void handle(final INetHandler netHandler, final String channel, final PacketCustom packet) {
    if (netHandler instanceof NetHandlerPlayServer) {
        MinecraftServer mc = MinecraftServer.getServer();
        if (!mc.isCallingFromMinecraftThread())
            mc.addScheduledTask(new Runnable() {
                public void run() {
                    handle(netHandler, channel, packet);
                }
            });
        else
            handler.handlePacket(packet, ((NetHandlerPlayServer) netHandler).playerEntity, (INetHandlerPlayServer) netHandler);
    } else
        System.err.println("Invalid INetHandler for PacketCustom on channel: " + channel);
}
 
示例19
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
    if (evt instanceof NetworkHandshakeEstablished) {
        INetHandler netHandler = ((NetworkDispatcher) ctx.channel().attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).get()).getNetHandler();
        if (netHandler instanceof NetHandlerPlayServer)
            handler.handshakeRecieved((NetHandlerPlayServer) netHandler);
    } else
        ctx.fireUserEventTriggered(evt);
}
 
示例20
private void initializeFakePlayer(){
    String playerUUID = null;
    String playerName = "Drone";
    fakePlayer = new DroneFakePlayer((WorldServer)worldObj, new GameProfile(playerUUID != null ? UUID.fromString(playerUUID) : null, playerName), new FakePlayerItemInWorldManager(worldObj, fakePlayer, this), this);
    fakePlayer.playerNetServerHandler = new NetHandlerPlayServer(MinecraftServer.getServer(), new NetworkManager(false), fakePlayer);
    fakePlayer.inventory = new InventoryPlayer(fakePlayer){
        private ItemStack oldStack;

        @Override
        public int getSizeInventory(){
            return getDroneSlots();
        }

        @Override
        public void setInventorySlotContents(int slot, ItemStack stack){
            super.setInventorySlotContents(slot, stack);
            if(slot == 0) {
                if(oldStack != null) {
                    getFakePlayer().getAttributeMap().removeAttributeModifiers(oldStack.getAttributeModifiers());
                }

                if(stack != null) {
                    getFakePlayer().getAttributeMap().applyAttributeModifiers(stack.getAttributeModifiers());
                }
                oldStack = stack;
            }
        }
    };
}
 
示例21
@Override
public EntityPlayer getPlayerFromHandler(INetHandler handler) {
	if (handler instanceof NetHandlerPlayServer) return ((NetHandlerPlayServer)handler).player;

	if (handler instanceof NetHandlerPlayClient) return getThePlayer();

	return null;
}
 
示例22
public static <T extends Packet> void registerServerExecutor(Class<T> packet, PacketExecutor<T, NetHandlerPlayServer> executor) {
    serverExecutors.put(packet, executor);
}
 
示例23
@Override
public PhysicsWrapperEntity getPacketParent(NetHandlerPlayServer server) {
    EntityPlayerMP player = server.player;
    IDraggable draggable = (IDraggable) player;
    return draggable.getForcedSubspaceBelowFeet();
}
 
示例24
private EntityPlayerMP getPacketPlayer(INetHandlerPlayServer server) {
    return ((NetHandlerPlayServer) server).player;
}
 
示例25
@SubscribeEvent
public void onPacketData(ServerCustomPacketEvent event) {
	FMLProxyPacket pkt = event.packet;

	onPacketData(event.manager, pkt, ((NetHandlerPlayServer) event.handler).playerEntity);
}
 
示例26
@Override
protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List<Object> out) throws Exception
{
	ByteBuf payload = msg.payload();
	byte discriminator = payload.readByte();
	Class<? extends ASMessage> clazz = packets.get(discriminator);
	if (clazz == null)
	{
		throw new NullPointerException("No packet registered for discriminator: " + discriminator);
	}
	
	EntityPlayer player = null;
	Side side = FMLCommonHandler.instance().getEffectiveSide();
	switch (side)
	{
	case CLIENT:
		player = getClientPlayer();
		break;
	case SERVER:
		INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
		player = ((NetHandlerPlayServer) netHandler).playerEntity;
		break;
	default:
	}
	
	ASMessage pkt = clazz.newInstance();
	try
	{
		pkt.decodeInto(ctx, payload.slice(), player);
	} catch (IOException e)
	{
		e.printStackTrace();
		throw e;
	}
	
	switch (side)
	{
	case CLIENT:
		pkt.handleClientSide(player);
		break;
	case SERVER:
		pkt.handleServerSide(player);
		break;
	default:
	}
	
	out.add(pkt);
}
 
示例27
private void initializeFakePlayer(){
    fakePlayer = new DroneFakePlayer((WorldServer)worldObj, new GameProfile(playerUUID != null ? UUID.fromString(playerUUID) : null, playerName), new FakePlayerItemInWorldManager(worldObj, fakePlayer, this), this);
    fakePlayer.playerNetServerHandler = new NetHandlerPlayServer(MinecraftServer.getServer(), new NetworkManager(false), fakePlayer);
    fakePlayer.inventory = new InventoryFakePlayer(fakePlayer);
}
 
示例28
@Override
public EntityPlayer getPlayerFromHandler(INetHandler handler) {
	if (handler instanceof NetHandlerPlayServer) return ((NetHandlerPlayServer)handler).player;

	return null;
}
 
示例29
PhysicsWrapperEntity getPacketParent(NetHandlerPlayServer server); 
示例30
public void handshakeRecieved(NetHandlerPlayServer netHandler);