Wild Battle API
Modby Raguto
Shared wild battle AI API for Cobblemon.
Type
Mod
CurseForge Downloads
737,543
CurseForge ID
1478863
Modrinth Downloads
137,287
Modrinth ID
v7VZE8kh
Last Updated
Jul 27, 2026
Description
### [Please consider supporting me on ko-fi if you like the mod and can afford it, I appreciate even 1 dollar. ](https://ko-fi.com/raguto)
---
_**I grant permission to anyone seeking to add my mod to a modpack**_
---
# Wild Battle API
Wild Battle API is a shared wild battle AI framework for Cobblemon.
For players and pack authors, it provides configurable smarter wild battle behavior with built-in presets and admin tools. For developers, it exposes a supported public API for registering custom wild `BattleAI` implementations without replacing Cobblemon internals directly.
Wild Battle API installs a delegating AI on wild battle actors at battle start. On each AI decision:
- Higher-priority providers are checked first.
- The first provider that returns a non-null `BattleAI` is used.
- Returning `null` defers to lower-priority providers.
- If no provider claims the context, the actor's original Cobblemon AI is used as fallback.
This lets multiple mods cooperate safely while keeping a reliable fallback path when no custom provider applies.
## Included Features
- Shared API for wild battle AI extensions
- Priority-based provider resolution
- Safe fallback to the actor's original Cobblemon AI
- Built-in configurable smart wild AI behavior
- Difficulty presets from `easy` to `extreme`
- Admin UI and debug commands
- Fabric and NeoForge support for Minecraft `1.21.1`
## Admin Commands
Wild Battle API includes operator/admin commands for testing and configuration.
Commands:
- `/wildbattleapi ui`
- `/wildbattleapi difficulty `
- `/wildbattleapi debug on`
- `/wildbattleapi debug off`
- `/wildbattleapi debug status`
Aliases:
- `/wba ui`
- `/wba difficulty `
- `/wba debug on|off|status`
These commands require permission level `2`.
Developer Usage
## Developer Usage
### Supported Public API
Use only these classes for third-party integrations:
- `com.github.raguto.wildbattleapi.api.WildBattleAPI`
- `com.github.raguto.wildbattleapi.api.WildAIProvider`
- `com.github.raguto.wildbattleapi.api.WildAIContext`
Do not depend on internal packages such as `impl`, `mixin`, `config`, or `network`.
### Runtime Dependency
Install Wild Battle API anywhere your dependent mod loads. In normal modpacks, that means both client and server.
Mod ID:
- `wild_battle_api`
Also declare it as a dependency in your mod metadata.
Fabric (`fabric.mod.json`):
```json
{
"depends": {
"wild_battle_api": "*"
}
}
```
NeoForge (`META-INF/neoforge.mods.toml`):
```toml
[[dependencies.your_mod_id]]
modId = "wild_battle_api"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"
```
Adjust the minimum version to the first Wild Battle API version your mod supports.
### Compile-Time Dependency
If you are not consuming a published Maven artifact, compile against the loader-specific jar directly.
Fabric example:
```gradle
dependencies {
modCompileOnly files("libs/wild_battle_api-fabric-1.0.0.jar")
}
```
NeoForge example:
```gradle
dependencies {
compileOnly files("libs/wild_battle_api-neoforge-1.0.0.jar")
}
```
Use the loader-appropriate jar for your environment.
### Registering a Provider
Register your provider once during your mod's common initialization.
```java
import com.github.raguto.wildbattleapi.api.WildBattleAPI;
import com.github.raguto.wildbattleapi.api.WildAIContext;
public final class MyWildAIRegistration {
public static void init() {
WildBattleAPI.registerProvider(150, context -> {
if (shouldUseMyAI(context)) {
return new MyCustomWildBattleAI();
}
return null;
});
}
private static boolean shouldUseMyAI(WildAIContext context) {
return context.getBattle() != null && context.getActor() != null;
}
}
```
You can also register at the default priority:
```java
WildBattleAPI.registerProvider(context -> null);
```
### Priority Guidance
- `0`: catch-all or default provider
- `50`: standard override
- `100+`: high-priority or boss-specific override
- `200+`: hard override, use carefully
If your provider only handles specific cases, return `null` for everything else.
### Implementing Your Own BattleAI
You may provide any class that implements Cobblemon's `BattleAI`.
```java
import com.cobblemon.mod.common.api.battles.model.PokemonBattle;
import com.cobblemon.mod.common.api.battles.model.ai.BattleAI;
import com.cobblemon.mod.common.battles.ActiveBattlePokemon;
import com.cobblemon.mod.common.battles.BattleSide;
import com.cobblemon.mod.common.battles.PassActionResponse;
import com.cobblemon.mod.common.battles.ShowdownActionResponse;
import com.cobblemon.mod.common.battles.ShowdownMoveset;
import com.cobblemon.mod.common.net.messages.client.battle.BattleHealthChangePacket;
import org.jetbrains.annotations.Nullable;
public final class MyCustomWildBattleAI implements BattleAI {
@Override
public ShowdownActionResponse choose(
ActiveBattlePokemon activeBattlePokemon,
PokemonBattle battle,
BattleSide side,
@Nullable ShowdownMoveset moveset,
boolean forceSwitch
) {
if (forceSwitch || moveset == null) {
return PassActionResponse.INSTANCE;
}
// Replace this with your own move or switch logic.
return PassActionResponse.INSTANCE;
}
@Override
public void onHealthChange(BattleHealthChangePacket packet) {
// Optional state tracking.
}
}
```
### WildAIContext
`WildAIContext` gives providers the information needed to decide whether to claim a wild battle actor.
Always available:
- `getActor()`
- `getPokemonList()`
- `getBattle()`
- `isForceSwitch()`
Nullable depending on the current decision:
- `getActiveBattlePokemon()`
- `getAiSide()`
- `getMoveset()`
Guard nullable fields before using them.
### Integration Notes
- Keep provider logic fast and predictable.
- Return `null` when your mod does not want to claim the current context.
- Avoid throwing exceptions from provider or AI logic.
- Test in both dedicated server and integrated singleplayer.
- If multiple mods register providers, higher numeric priority is checked first.
## Licensing
Wild Battle API code and binaries are All Rights Reserved.
Third-party usage and distribution permissions are defined by the author policy on the mod page.
Compatibility
Mod Loaders
Fabric
Neoforge
Game Versions
1.21.1
Screenshots
Similar Mods
Soot
Fires to Ashes, Embers to Soot; An Embers addon.
Mod
8,747,489
Bagginses
Adds 2 Tiers of bags, and a void bag.
Mod
8,733,314
Schematica
Display ghost structures and export parts of your world, all inside Minecraft!
Mod
8,723,202
Item Scroller
Move items by mouse wheel scrolling, Shift + dragging, etc.
Mod
8,716,032
WATERMeDIA: Multimedia API
Library with an API using VLC for multimedia integration with Minecraft
Mod
8,712,096
Nether Skeletons
A MOD Which Adds Nether Skeletons
Mod
8,710,000
Included in Modpacks
Pixelax
COBBLEPOKEMON
Dyonizel Modpack
Opium Cobblemon
CobbleValley
COBBLERUNE
CobbleCafe Oficial
Cobblemon Generations SMP
Cobble Lemon
Mr. Aura's Cobblemon
Soulheart Cobblemon
CobbleAdventures Official Modpack
Cobble X Friends
Cobblemon Coliseum Modpack
CobbleCraft
CobbleStories - A Create Adventure
POKEPURAM-SMP
Poketod SMP
Wildera SMP
CobbleGems
coEBLmon
Hypheria
KastiCraft Cobblemon x Create
Cobblemon Perfected
Cody's Cobblemon Adventure
Official Yakuza modpack