
Radical Cobblemon Trainers API
Trainer management and battle API for Cobblemon.
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.2-beta] - 2026-04-19
Fixed:
- #130 Battle error related to oversight in fix #129 (multi gimmick usage fix)
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.2-beta] - 2026-04-19
Fixed:
- #130 Battle error related to oversight in fix #129 (multi gimmick usage fix)
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.1-beta] - 2026-04-17
Fixed:
- #129 Trainers attempting to use multiple gimmicks at the same time, that are not permitted to be used together in one battle, if they have more than one pokemon on the field (e.g. mega + mega or zmove + zmove)
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.1-beta] - 2026-04-17
Fixed:
- #129 Trainers attempting to use multiple gimmicks at the same time, that are not permitted to be used together in one battle, if they have more than one pokemon on the field (e.g. mega + mega or zmove + zmove)
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.0-beta] - 2026-03-21
Added:
- #128
BattleInstance: Associates aTrainerNPCwith aPokemonBattleand theLivingEntityit was attached to at the start of that battle - #127
TrainerNPC#getBattleInstances(): Retrieves a list of all activeBattleInstances the trainer is attending to
Changed:
- #126 Adjustments to the battle AI switch evaluation, which makes it less likely for trainers to switch into pokemon with much higher stats
- #125 Slight adjustment to battle AI to lower the chance to use (often waste) healing items on squishy pokemon on the field
- #124 Trainers may now attend to multiple battles at the same time
- Note that a trainer entity can still only attend to one battle at a time (a copy of that entity can attend to a different battle)
- The entity the trainer was attached to at the start of a battle is stored to ensure recall animations of pokemon will always point towards that entity
- This was possible in an older version of the API (with unexpected side effects) but was never an intended feature, now it is
- #123 Trainers now support custom sound events. Use the
battleThemeproperty to assign a custom resource location (falls back tobattle.pvn.defaultif unset). Refer to the docs for more info
Fixed:
- #122 Battle AI attempting to use baton pass when there is no pokemon to switch to and it will also avoid that move if the user has no stat buffs
- #121 Battle AI not including active shield effects (light screen/reflect) in some damage calculations
- #120 Battle AI not recognizing the weather effects "heavy rain", "extremely harsh sunlight" and "strong winds" (e.g. attempting to use fire or water moves when they would fail)
- #119
BATTLE_STARTEDevent receivingnullinstead of theBattleStateas parameter
Removed:
- #118 Deprecated overloads of
TypeChart#getEffectiveness()
- #128
Changelog
As of version
0.15.0-beta, RCTApi may only be redistributed under the terms of the MCOML License.[0.15.0-beta] - 2026-03-21
Added:
- #128
BattleInstance: Associates aTrainerNPCwith aPokemonBattleand theLivingEntityit was attached to at the start of that battle - #127
TrainerNPC#getBattleInstances(): Retrieves a list of all activeBattleInstances the trainer is attending to
Changed:
- #126 Adjustments to the battle AI switch evaluation, which makes it less likely for trainers to switch into pokemon with much higher stats
- #125 Slight adjustment to battle AI to lower the chance to use (often waste) healing items on squishy pokemon on the field
- #124 Trainers may now attend to multiple battles at the same time
- Note that a trainer entity can still only attend to one battle at a time (a copy of that entity can attend to a different battle)
- The entity the trainer was attached to at the start of a battle is stored to ensure recall animations of pokemon will always point towards that entity
- This was possible in an older version of the API (with unexpected side effects) but was never an intended feature, now it is
- #123 Trainers now support custom sound events. Use the
battleThemeproperty to assign a custom resource location (falls back tobattle.pvn.defaultif unset). Refer to the docs for more info
Fixed:
- #122 Battle AI attempting to use baton pass when there is no pokemon to switch to and it will also avoid that move if the user has no stat buffs
- #121 Battle AI not including active shield effects (light screen/reflect) in some damage calculations
- #120 Battle AI not recognizing the weather effects "heavy rain", "extremely harsh sunlight" and "strong winds" (e.g. attempting to use fire or water moves when they would fail)
- #119
BATTLE_STARTEDevent receivingnullinstead of theBattleStateas parameter
Removed:
- #118 Deprecated overloads of
TypeChart#getEffectiveness()
- #128
Changelog
[0.14.8-beta] - 2026-02-14
Fixed:
- #117 Oversight from previous change leading to trainer pokemon having random movesets
Changelog
[0.14.8-beta] - 2026-02-14
Fixed:
- #117 Oversight from previous change leading to trainer pokemon having random movesets
Changelog
[0.14.7-beta] - 2026-02-13
Added:
- #116
Debug#setActive(int)static method to configure active debug contexts (not recommended to activate in release builds) - #115
PokemonPropertiesModelConverter: ConvertPokemonModeltoPokemonProperties(thanks Gito)
Changed:
- #114 Adjusted semantics of
Debugutility (now works with contexts instead of levels, combine with|for multiple)
Fixed:
- #113 Battles getting stuck when trainers use Tatsugiris
Commanderability with Dondozo - #112
PokemonModel(Pokemon)constructor copying wrong properties
- #116
Changelog
[0.14.7-beta] - 2026-02-13
Added:
- #116
Debug#setActive(int)static method to configure active debug contexts (not recommended to activate in release builds) - #115
PokemonPropertiesModelConverter: ConvertPokemonModeltoPokemonProperties(thanks Gito)
Changed:
- #114 Adjusted semantics of
Debugutility (now works with contexts instead of levels, combine with|for multiple)
Fixed:
- #113 Battles getting stuck when trainers use Tatsugiris
Commanderability with Dondozo - #112
PokemonModel(Pokemon)constructor copying wrong properties
- #116
Changelog
[0.14.6-beta] - 2026-01-18
Added:
- #111 Added
BattleFormatProvider(functional) interface
Changed:
- #110 Changed return type of
BattleState#getFormat()andBattleContext#getFormat()toBattleFormatProvider - #109 The (rctapi)
BattleFormatenum now implementsBattleFormatProvider(method signature remains unchanged) - #108 Updated
BattleRules- Added
adjustNPCLevelsproperty: Decide if npc pokemon levels should be adjusted according to theadjustLevelvalue of the battle format (the default battle formats do not adjust levels) - Added
adjustPlayerLevelsproperty: Decide if player pokemon levels should be adjusted according to theadjustLevelvalue of the battle format (the default battle formats do not adjust levels) - Added
healPlayersproperty: Decide if player pokemon should be healed at the start of a battle
- Added
- #107
BattleManager#startBattle(...)(and overloads) now accept aBattleFormatProviderinstead of a (rctapi)BattleFormatas argument (old overloads still exist but are deprecated) - #106
BattleStateandBattleContextnow accept aBattleFormatProviderin their constructors instead of a (rctapi)BattleFormat(old overloads still exist but are deprecated)
Fixed:
- #105 Certain max moves of dynamaxed pokemon possibly causing battles to softlock
- #104 Tera type
stellarleading to battle failures if evaluated defensively on the player side
- #111 Added
Changelog
[0.14.6-beta] - 2026-01-18
Added:
- #111 Added
BattleFormatProvider(functional) interface
Changed:
- #110 Changed return type of
BattleState#getFormat()andBattleContext#getFormat()toBattleFormatProvider - #109 The (rctapi)
BattleFormatenum now implementsBattleFormatProvider(method signature remains unchanged) - #108 Updated
BattleRules- Added
adjustNPCLevelsproperty: Decide if npc pokemon levels should be adjusted according to theadjustLevelvalue of the battle format (the default battle formats do not adjust levels) - Added
adjustPlayerLevelsproperty: Decide if player pokemon levels should be adjusted according to theadjustLevelvalue of the battle format (the default battle formats do not adjust levels) - Added
healPlayersproperty: Decide if player pokemon should be healed at the start of a battle
- Added
- #107
BattleManager#startBattle(...)(and overloads) now accept aBattleFormatProviderinstead of a (rctapi)BattleFormatas argument (old overloads still exist but are deprecated) - #106
BattleStateandBattleContextnow accept aBattleFormatProviderin their constructors instead of a (rctapi)BattleFormat(old overloads still exist but are deprecated)
Fixed:
- #105 Certain max moves of dynamaxed pokemon possibly causing battles to softlock
- #104 Tera type
stellarleading to battle failures if evaluated defensively on the player side
- #111 Added
Changelog
[0.14.5-beta] - 2025-12-27
Added:
- #103 Added
BattleState#isPaticipating(Trainer): Reports if trainer is participating in the associated battle
Changed:
- #102 Adjusted priority for gimmicks dynamax/gmax and tera (tera will now be chosen after the max transformation has ended if both are possible)
- #101 Changed default
RCTBattleAIConfig#switchBiasto0.5(value is now a bit more impactful, other biases will most likely get reworked in a similar manner) - #100 Improved evaluation for a bunch of moves with certain requirements (e.g.
Ally SwitchorTrick) and other minor adjustments to move selection logic - #99 Increased priority of some mixins (to avoid potential conflicts)
- #98 Reworked rct battle ai switch evaluation (might require some fine tuning)
Fixed:
- #97 Battle AI attempting to use
First Impressionin arbitrary turns (should only be used in first turn) - #96 Battle AI not avoiding sacrificial moves (e.g.
Explosion) when on their last pokemon - #95 Battle AI treating the user of the move
Blockas trapped, rather than the target - #94 Duplicate error messages when failing to start a battle
- #93
gimmicksproperty of pokemon (tera, dynamax, gmax) not getting applied in battle
- #103 Added
Changelog
[0.14.5-beta] - 2025-12-27
Added:
- #103 Added
BattleState#isPaticipating(Trainer): Reports if trainer is participating in the associated battle
Changed:
- #102 Adjusted priority for gimmicks dynamax/gmax and tera (tera will now be chosen after the max transformation has ended if both are possible)
- #101 Changed default
RCTBattleAIConfig#switchBiasto0.5(value is now a bit more impactful, other biases will most likely get reworked in a similar manner) - #100 Improved evaluation for a bunch of moves with certain requirements (e.g.
Ally SwitchorTrick) and other minor adjustments to move selection logic - #99 Increased priority of some mixins (to avoid potential conflicts)
- #98 Reworked rct battle ai switch evaluation (might require some fine tuning)
Fixed:
- #97 Battle AI attempting to use
First Impressionin arbitrary turns (should only be used in first turn) - #96 Battle AI not avoiding sacrificial moves (e.g.
Explosion) when on their last pokemon - #95 Battle AI treating the user of the move
Blockas trapped, rather than the target - #94 Duplicate error messages when failing to start a battle
- #93
gimmicksproperty of pokemon (tera, dynamax, gmax) not getting applied in battle
- #103 Added
Changelog
[0.14.4-beta] - 2025-12-11
Fixed:
- #92 Workaround to avoid issue with the Cobblemon showdown interpreter leading to battle instructions getting executed in the wrong order (most commonly triggered by switched-in trainer pokemon getting immediately knocked out). This changes is restricted to battles started by rctapi.
Removed:
- #91 Adhoc fix for issues related to pokemon switching positions (e.g. with "Ally Switch") as it has been fixed recently in Cobblemon itself
Changelog
[0.14.4-beta] - 2025-12-11
Fixed:
- #92 Workaround to avoid issue with the Cobblemon showdown interpreter leading to battle instructions getting executed in the wrong order (most commonly triggered by switched-in trainer pokemon getting immediately knocked out). This changes is restricted to battles started by rctapi.
Removed:
- #91 Adhoc fix for issues related to pokemon switching positions (e.g. with "Ally Switch") as it has been fixed recently in Cobblemon itself
Changelog
[0.14.3-beta] - 2025-12-05
Fixed:
- #90 Battles tending to get softlocked when AI switches
Changelog
[0.14.3-beta] - 2025-12-05
Fixed:
- #90 Battles tending to get softlocked when AI switches
Changelog
[0.14.2-beta] - 2025-12-04
Fixed:
- #89 Different scenarios leading to battles getting softlocked
Changelog
[0.14.2-beta] - 2025-12-04
Fixed:
- #89 Different scenarios leading to battles getting softlocked
