Beispiel #1
0
        public async Task JoinGame(IUser user)
        {
            var sink = await user.GetClientPacketSink();

            var generator = new ClientPlayPacketGenerator(sink);
            var settings  = await GrainFactory.GetGrain <IServerSettings>(0).GetSettings();

            _users[user] = new UserContext
            {
                Generator = generator
            };

            await user.JoinGame();

            var player = await user.GetPlayer();

            await generator.JoinGame(
                await player.GetEntityId(),
                await user.GetGameMode(),
                Dimension.Overworld,
                Difficulty.Easy,
                (byte)settings.MaxPlayers,
                await player.GetViewDistance(),
                LevelTypes.Default,
                false);

            await user.NotifyLoggedIn();

            await SendWholePlayersList(user);
        }
        protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator)
        {
            MobType type = AttachedObject.GetComponent <MobTypeComponent>().MobType;

            return(generator.SpawnMob(AttachedObject.EntityId, AttachedObject.UUID, (byte)type, AttachedObject.Position, AttachedObject.Pitch, AttachedObject.Yaw, new EntityMetadata.Entity {
            }));
        }
        protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator)
        {
            var metadata = new EntityMetadata.Player
            {
                Health = AttachedObject.GetValue(HealthComponent.HealthProperty)
            };

            return(generator.SpawnPlayer(AttachedObject.EntityId, AttachedObject.UUID, AttachedObject.Position, AttachedObject.Pitch, AttachedObject.HeadYaw, metadata));
        }
        protected override Task SendLookPacket(ClientPlayPacketGenerator generator)
        {
            uint eid      = AttachedObject.GetComponent <EntityIdComponent>().EntityId;
            byte yaw      = (byte)(AttachedObject.GetComponent <EntityLookComponent>().Yaw / 360 * 255);
            byte pitch    = (byte)(AttachedObject.GetComponent <EntityLookComponent>().Pitch / 360 * 255);
            bool onGround = AttachedObject.GetComponent <EntityOnGroundComponent>().IsOnGround;

            generator.EntityLook(eid, yaw, pitch, onGround);
            return(Task.CompletedTask);
        }
Beispiel #5
0
        protected override Task SendLookPacket(ClientPlayPacketGenerator generator)
        {
            uint  eid      = AttachedObject.GetComponent <EntityIdComponent>().EntityId;
            float yaw      = AttachedObject.GetComponent <EntityLookComponent>().Yaw;
            float pitch    = AttachedObject.GetComponent <EntityLookComponent>().Pitch;
            bool  onGround = AttachedObject.GetComponent <EntityOnGroundComponent>().IsOnGround;

            // TODO player look
            // generator.;
            return(Task.CompletedTask);
        }
        protected Task SendMovePacket(ClientPlayPacketGenerator generator)
        {
            uint           eid      = AttachedObject.GetValue(EntityIdComponent.EntityIdProperty);
            EntityWorldPos pos      = AttachedObject.GetValue(EntityWorldPositionComponent.EntityWorldPositionProperty);
            short          x        = (short)(pos.X * 32 * 128);
            short          y        = (short)(pos.Y * 32 * 128);
            short          z        = (short)(pos.Z * 32 * 128);
            bool           onGround = AttachedObject.GetValue(EntityOnGroundComponent.IsOnGroundProperty);

            return(generator.EntityRelativeMove(eid, x, y, z, onGround));
        }
        private async Task OnNextAsync(SendChunkJob job, StreamSequenceToken token)
        {
            var chunkColumn = GrainFactory.GetGrain <IChunkColumn>(job.World.MakeAddressByPartitionKey(job.ChunkPosition));

            var generator = new ClientPlayPacketGenerator(new BroadcastPacketSink(job.Clients, _packetPackager));
            await generator.ChunkData(Dimension.Overworld, job.ChunkPosition.X, job.ChunkPosition.Z, await chunkColumn.GetState());

            foreach (var loader in job.Loaders)
            {
                loader.OnChunkSent(job.ChunkPosition).Ignore();
            }
        }
Beispiel #8
0
        public async Task JoinGame(IUser user)
        {
            var sink = await user.GetClientPacketSink();

            var generator = new ClientPlayPacketGenerator(sink);

            _users[user] = new UserContext
            {
                Generator = generator
            };

            await user.JoinGame();

            await generator.JoinGame(
                await (await user.GetPlayer()).GetEntityId(),
                new GameMode { ModeClass = GameMode.Class.Survival },
                Dimension.Overworld,
                Difficulty.Easy,
                10,
                LevelTypes.Default,
                false);

            await user.NotifyLoggedIn();
        }
Beispiel #9
0
 public async Task BindToUser(IUser user)
 {
     _generator = new ClientPlayPacketGenerator(await user.GetClientPacketSink());
     _user      = user;
     _health    = MaxHealth;
 }
Beispiel #10
0
 public Task SetClientPacketSink(IClientboundPacketSink sink)
 {
     _sink      = sink;
     _generator = new ClientPlayPacketGenerator(sink);
     return(Task.CompletedTask);
 }
 protected abstract Task SendSpawnPacket(ClientPlayPacketGenerator generator);
 protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator)
 {
     return(generator.SpawnObject(AttachedObject.EntityId, AttachedObject.UUID, 2, AttachedObject.Position, AttachedObject.Pitch, AttachedObject.Yaw, 0));
 }
Beispiel #13
0
 protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator)
 {
     return(Task.CompletedTask);
 }
Beispiel #14
0
 protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator)
 {
     // for items, the int value is ignored, but should be set to 1 to indicate that velocity is present.
     return(generator.SpawnObject(AttachedObject.EntityId, AttachedObject.UUID, 2, AttachedObject.Position, AttachedObject.Pitch, AttachedObject.Yaw, 1));
 }