示例#1
0
        public void ChangeDimension(Player player)
        {
            McpeChangeDimension change = McpeChangeDimension.CreateObject();

            change.dimension = 1;
            change.unknown   = false;
            player.SendPackage(change);
        }
        public virtual void HandleMcpeChangeDimension(McpeChangeDimension message)
        {
            Thread.Sleep(3000);
            McpePlayerAction action = McpePlayerAction.CreateObject();

            action.runtimeEntityId = Client.EntityId;
            action.actionId        = (int)PlayerAction.DimensionChangeAck;
            Client.SendPacket(action);
        }
示例#3
0
        public override void HandleMcpeChangeDimension(McpeChangeDimension message)
        {
            base.HandleMcpeChangeDimension(message);
            if (BaseClient.WorldProvider is BedrockWorldProvider provider)
            {
                LoadingWorldState loadingWorldState = new LoadingWorldState();
                AlexInstance.GameStateManager.SetActiveState(loadingWorldState, true);
                loadingWorldState.UpdateProgress(LoadingState.LoadingChunks, 0);


                foreach (var loadedChunk in provider.LoadedChunks)
                {
                    provider.UnloadChunk(loadedChunk);
                }

                ThreadPool.QueueUserWorkItem(async o =>
                {
                    double radiusSquared = Math.Pow(Client.ChunkRadius, 2);
                    var target           = radiusSquared * 3;

                    int percentage = 0;
                    bool ready     = false;

                    do
                    {
                        percentage = (int)(provider.LoadedChunks.Count() / target) * 100;

                        loadingWorldState.UpdateProgress(LoadingState.LoadingChunks,
                                                         percentage);

                        if (!ready)
                        {
                            if (_changeDimensionResetEvent.WaitOne(0))
                            {
                                ready = true;
                            }
                        }
                        else
                        {
                            await Task.Delay(50);
                        }
                    } while (!ready || percentage < 99);

                    AlexInstance.GameStateManager.Back();
                });
            }
        }
示例#4
0
 public override void HandleMcpeChangeDimension(McpeChangeDimension message)
 {
 }