MineFrog.Player.HandleSetBlockPacket C# (CSharp) Method

HandleSetBlockPacket() private method

private HandleSetBlockPacket ( object incoming ) : void
incoming object
return void
        private void HandleSetBlockPacket(object incoming)
        {
            var data = (byte[]) incoming;

            ushort x = NTHO(data, 0);
            ushort y = NTHO(data, 2);
            ushort z = NTHO(data, 4);
            bool isPlacing = data[6] == 0x01;
            byte incomingType = data[7];

            if (Level.NotInBounds(x, y, z)) return;

            int blockPos = Level.PosToInt(x, y, z);

            if (blockPos >= Level.BlockData.Length || blockPos < 0)
            {
                Server.Log(blockPos + " was OUT OF BOUNDS!", LogTypesEnum.Error);
                return;
            }

            byte oldBlock = Level.BlockData[blockPos];

            if (EnableHistoryMode)
            {
                SendBlockChange(x, y, z, oldBlock);
                var hD = Server.HistoryController.GetData(Level.Name, blockPos);
                var playername = "Unknown";
                var oldName = "Unknown";
                var currentName = "Unknown";

                if (Block.Blocks.ContainsKey(oldBlock)) currentName = Block.Blocks[oldBlock].Name;
                if (Block.Blocks.ContainsKey(hD.Type)) oldName = Block.Blocks[hD.Type].Name;
                if (hD.UID != int.MaxValue) playername = PDB.Find(hD.UID).Username;

                SendMessage("CurrentType: " + currentName);
                SendMessage("OldType: " + oldName);
                SendMessage("Editor: " + playername);
                return;
            }
            if(PermissionLevel < Level.BuildPermissions)
            {
                SendBlockChange(x, y, z, oldBlock);
                return;
            }
            if (EnableWaterMode)
            {
                Level.PlayerBlockChange(this, x, y, z, (byte) MCBlocks.Water);
                return;
            }
            if (EnableLavaMode)
            {
                Level.PlayerBlockChange(this, x, y, z, (byte) MCBlocks.Lava);
                return;
            }

            if (isPlacing)
            {
                Level.PlayerBlockChange(this, x, y, z, incomingType);
                Block.Blocks[incomingType].OnPlace(this, Level, blockPos);
            }
            else
            {
                Level.PlayerBlockChange(this, x, y, z, (byte) MCBlocks.Air);
                Block.Blocks[oldBlock].OnBreak(this, Level, blockPos);
            }
        }