Dice are fair. Behavior of dice is the same as in real life.
Code is open source, anyone can check. Randomization of dice is done in file "Scripts/View/Board/Dice/Die.cs" at line 102 (each 3d-axis gets a random rotation), then gravity does it's work. No special behavior for AI or real player.
If you lose because dice results - this is only luck, the same situation can be in real life match.
Players usually ignore own lucky rolls and bad rolls of opponent ("I won because I fly better!"), but remember situations when lose in opposite situations ("How you can roll dice better than me? You are cheater!"). As example, try to remember, how many times you rolled 3 blanks on 3 green dice, and how many times you rolled 3 evades - most of players remember examples of first situation better.
Also a lot of players don't understand how chances/probability work.
Few simple examples:
1) Just flip a coin 100-1000 times, record results, and see how often it has series of the same side and how long these series sometimes. And understand, that if you flip a coin only few times - you can get results from that long series of the same good/bad result.
2) Chance to get 6 evades in a row is only 0,278%. But you play a lot of matches, and in each of them players roll dice a lot of times (100 matches with 100 dice rolls = 10'000 rolls!) - as result, it's almost guaranteed that you will see this situation often enough. But you can encounter this 6 perfect results in some not important shots in the middle of the long game, or encounter them in the initial joust and lose miserably because of this.
I don't want to repeat same things each time, so, starting from this reply, I will ignore any discussion of AI dice rolls.
Please, quote this reply when new discussion will be started again.