Ejemplo n.º 1
0
        public void SendChunksForKnownPosition(bool force = false)
        {
            int centerX = (int)Coordinates.X >> 4;
            int centerZ = (int)Coordinates.Z >> 4;

            if (!force && IsSpawned && _currentChunkPosition == new Vector2(centerX, centerZ)) return;

            _currentChunkPosition.X = centerX;
            _currentChunkPosition.Z = centerZ;

            new Thread(() =>
            {
                int counted = 0;

                foreach (
                    var chunk in
                        PluginGlobals.Level[0].GenerateChunks(new ChunkCoordinates((int) Coordinates.X, (int) Coordinates.Z),
                            force ? new Dictionary<Tuple<int, int>, ChunkColumn>() : _chunksUsed))
                {
                    PcChunkColumn pcchunk = new PcChunkColumn {X = chunk.x, Z = chunk.z};
                    pcchunk.Pe2Pc(chunk);

                    new ChunkData(Wrapper, new MsgBuffer(Wrapper)) {Chunk = pcchunk}.Write();
                    //new ChunkData().Write(Wrapper, new MSGBuffer(Wrapper), new object[]{ chunk.GetBytes() });

                    Thread.Yield();

                    if (counted >= 5 && !IsSpawned)
                    {

                        new PlayerPositionAndLook(Wrapper).Write();

                        IsSpawned = true;
                        PluginGlobals.PcPlayers.Add(this);

                        foreach (var targetPlayer in PluginGlobals.Level[0].Players)
                        {
                            targetPlayer.SendPackage( new McpeAddPlayer
                                {
                                    clientId = 0,
                                    username = Username,
                                    entityId = PluginGlobals.PcidOffset + EntityId,
                                    x = (float)Coordinates.X,
                                    y = (float)Coordinates.Y,
                                    z = (float)Coordinates.Z,
                                    yaw = (byte)Yaw,
                                    pitch = (byte)Pitch,
                                    metadata = new byte[0]
                                });

                            PluginGlobals.Level[0].RelayBroadcast(new McpeAddEntity
                            {
                                entityType = -1,
                                entityId = PluginGlobals.PcidOffset + EntityId,
                                x = (float)Coordinates.X,
                                y = (float)Coordinates.Y,
                                z = (float)Coordinates.Z,
                            });
                        }

                            foreach (var player2 in PluginGlobals.GetPlayers())
                            {
                                new PlayerListItem(Wrapper)
                                {
                                    Action = 0,
                                    Username = player2.Username,
                                    Gamemode = player2.Gamemode,
                                    UUID = player2.Uuid
                                }.Write();

                                if (player2 != this)
                                {
                                    new SpawnPlayer(Wrapper)
                                    {
                                        Player = player2
                                    }.Write();
                                }
                            }

                        SendMovePlayer();

                        PluginGlobals.Level[0].BroadcastTextMessage(Username  + " joined the game!");
                    }
                    counted++;
                }
            }).Start();
        }
Ejemplo n.º 2
0
        public static void SendChunk(ChunkCoordinates position)
        {
            ChunkColumn targetchunk = Level[0]._worldProvider.GenerateChunkColumn(position);
            PcChunkColumn converted = new PcChunkColumn {X = position.X, Z = position.Z};
            converted.Pe2Pc(targetchunk);

            foreach (var player in PcPlayers)
            {
                //new BlockChange(player.Wrapper, new MSGBuffer(player.Wrapper)) {BlockID = data.block, MetaData = data.meta, Location = new Vector3(data.x, data.y, data.z)}.Write();
                new ChunkData(player.Wrapper) { Chunk = converted, Quee = false}.Write();
            }
        }