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); }
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(); } }
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(); }
public async Task BindToUser(IUser user) { _generator = new ClientPlayPacketGenerator(await user.GetClientPacketSink()); _user = user; _health = MaxHealth; }
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)); }
protected override Task SendSpawnPacket(ClientPlayPacketGenerator generator) { return(Task.CompletedTask); }
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)); }