Main server folder spigot.yml and check that stats saving prevention its set to false stats->disable-saving: false
Player will get default rank group depending on set permission node cmi.rank.[rankName]
Not enabled ranks will be ignored
DisplayName section is optional and it will be used to represent rank ingame. This is NOT defining required permission node and you still need to use node name to rankup to this rank
DefaultRank section defines if player can be assigned to this rank if he don’t have any. There can be more than one default rank, and depending on permission node, first rank will be assigned to that player when needed
AutoRankup section defines if player will be auto ranked to this rank if possible. Keep in mind that if there are more than one legit rankup’s, player will have to confirm to which rank he wants to rankup
RankupConfirmation section defines if you want to add additional confirmation for this rankup. Useful to avoid unintentional rankups. Keep in mind that autorankup will request confirmation for rankup to this rank even if there is only one legit rankup option
NextRanks is list of possible next ranks from this rank. Can be one or can be dozens. Keep in mind that each rank requirements will be shown in chat and it can clutter quite allot if there is bunch of them at once
MoneyCost defines how much player will have to pay to rankup to this rank
ExpCost defines how much player will have to pay in exp to rankup to this rank
Commands is list which will be performed on rankup. Can be additional actions, like message broadcast or anything alse
CommandsOnRankDown is list of commands which will be performed on rankdown action. Commands will be performed when you are ranking down from this rank.
Main section is StatsRequirements and it can have allot of different values in it:
In general format goes like this [mainStat]( : optionalSubStat):amount
In example MonsterKills:100 will require from player to have 100 monster kills while MonsterKills:Zombie:100 will require to have 100 zombie kills. Both of them can be used if needed.

List of possible requirement and basic explanations:

Distance in blocks:

Travel – travel in total
Walk – has to walk
Sneak – has to sneak
Sprint – has to sprint
Swim – has to swim
Fall – has to fall
Climb – has to climb
Fly – has to fly
Dive – has to walk under water
MinecartTravel – has to travel with minecart
BoatTravel – has to travel with boat
PigTravel – has to ride pig
HorseTravel – has to ride horse
ElytraTravel – has to fly with elytra

Time in sec:

PlayTime – total play time
AccountAge – time from first player login into server
FromLastDeath – from last death
SneakTime – sneak time

Amounts:

GameQuit – how many times player left game
Jump – jump count
DamageDealt – total damage made
DamageTaken – total damage taken
Deaths – count of deaths
MobKills – total amount of mobs killed by player
PlayerKills – total amount of players killed. Indirect kills dont count
ItemEnchanted – amount of enchanted items
AnimalsBred – animals bred
FishCaught – fish caught
TalkedToVillager – times talked to villager
TradedWithWillager – traded with willager
CakeSlicesEaten – cake slices eaten
CauldronFilled – cauldron filled
CouldronUsed – couldron used
ArmorCleaned – times armor cleaned (leather armor)
BannerCleaned – times banner cleaned
BrewingstandInteractions – brewingstand interactions
BeaconInteractions – beacon interactions
CraftingTableInteractions – crafting table interactions
FurnaceInteractions – furnace interactions
DispenserInspected – dispenser inspected
DropperInspected – dropper inspected
HopperInspected – hopper inspected
ChestOpen – chest open
TrappedChestTriggered – trapped chest triggered
EnderchestOpened – enderchest opened
NoteblockPlayed – noteblock played
NoteblockTuned – noteblock tuned
FlowerPotted – flower potted
RecordPlayed – record played
SleeptInBed – sleept in bed
ShulkerBoxOpened – shulker box opened
ItemDropped – defines amount of dropped items. If specific item is not defined, then total amount is used
ItemPickups – defines amount of picked up items. If specific item is not defined, then total amount is used
BlocksMined – defines amount of blocks mined. If specific block is not defined, then total amount is used
ItemBreaks – defines amount of broken items. If specific item is not defined, then total amount is used
ItemCrafts – defines amount of crafted items. If specific item is not defined, then total amount is used
ItemsUsed – defines amount of item usage. like mining with pickaxe. If specific item is not defined, then total amount is used
MonsterKills – defines amount of monster kills. If specific monster is not defined, then total amount is used
KilledBy – defines amount of deaths by monster. If specific monster is not defined, then total amount is used​

Default file example

Newbie:
Enabled: true
DisplayName: "&2Newbie"
DefaultRank: true
AutoRankup: true
NextRanks:
- Branch1
- Branch2
Branch1:
Enabled: true
DisplayName: "&2Branch1"
AutoRankup: true
RankupConfirmation: true
Votes: 5
PermissionRequirement:
- "cmi.command.fly:Fly"
McMMORequirement:
- "woodcutting:10"
- "power:20"
JobsRequirement:
- "miner:10"
- "totallevel:20"
ItemRequirement:
- "stone:10"
- "stone:1:20"
- "book:20"
NextRanks:
- Branch1Rank1
MoneyCost: 100
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Branch1 rank!"
StatsRequirements:
- "PlayTime:3600"
- "travel:1000"
- "MonsterKills:zombie:10"
- "MonsterKills:slime:5"
- "MonsterKills:wolf:5"
- "AccountAge:1209600"
Branch1Rank1:
Enabled: true
DisplayName: "&2Branch1Rank1"
DefaultRank: false
AutoRankup: true
RankupConfirmation: false
PermissionRequirement:
- "cmi.command.heal:Heal"
NextRanks:
- Last
MoneyCost: 300
ExpCost: 350
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Branch1Rank1 rank!"
StatsRequirements:
- "travel:10000"
- "blocksmined:3000"
- "blocksmined:diamond_ore:30"
- "MonsterKills:1000"
- "AccountAge:1209600"
McMMORequirement:
- "taming:10"
- "unarmed:30"
Branch2:
Enabled: true
DisplayName: "&2Branch2"
AutoRankup: true
RankupConfirmation: true
MoneyCost: 150
NextRanks:
- Branch2Rank1
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Branch2 rank!"
PermissionRequirement:
- "cmi.command.tp:Teleport"
StatsRequirements:
- "PlayTime:3600"
- "travel:2000"
- "MonsterKills:zombie:15"
- "MonsterKills:slime:10"
Branch2Rank1:
Enabled: true
DisplayName: "&2Branch2Rank1"
AutoRankup: true
RankupConfirmation: false
MoneyCost: 100
ExpCost: 150
NextRanks:
- Branch2Rank2
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Branch1Rank1 rank!"
StatsRequirements:
- "PlayTime:4600"
- "Swim:1000"
- "SneakTime:180"
- "MonsterKills:100"
Branch2Rank2:
Enabled: true
DisplayName: "&2Branch2Rank2"
AutoRankup: true
RankupConfirmation: false
MoneyCost: 100
ExpCost: 150
NextRanks:
- Last
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Branch2Rank2 rank!"
StatsRequirements:
- "walk:15000"
- "HorseTravel:1000"
- "ItemsUsed:10000"
- "PlayerKills:10"
Last:
Enabled: true
DisplayName: "&2Last"
AutoRankup: true
StatsRequirements:
- "PlayTime:21600"
- "walk:30000"
- "MonsterKills:1000"
- "blocksmined:30000"
Commands:
- "broadcast! &6[playerDisplayName] &eleveled up to Last rank!"
- "cmi heal [playerName]"
- "money give [playerName] 100"