← Назад к ресурсам

Wild Battle API

Shared wild battle AI API for Cobblemon.

Modrinth library

Описание

### [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.