
Wild Battle API
Общий фреймворк для ИИ диких битв в Cobblemon. Настраиваемая сложность, админ-команды и открытое API для мододелов. Сделайте битвы с дикими покемонами умнее и интереснее!
Мод Wild Battle API для Minecraft (через Cobblemon) решает проблему слишком простого ИИ у диких покемонов. В ванильном Cobblemon дикие покемоны атакуют случайно, без какой-либо стратегии. Этот мод кардинально меняет ситуацию, добавляя систему приоритетных провайдеров ИИ, готовые пресеты сложности и открытое API для кастомных реализаций. По сути, это прослойка, которая позволяет разным модам влиять на поведение диких покемонов в битвах, не ломая друг друга и не заменяя внутренности Cobblemon напрямую.
Что делает Wild Battle API
- Умный ИИ диких покемонов - мод устанавливает делегирующий ИИ на каждого дикого участника битвы. Провайдеры проверяются по приоритету: чем выше число, тем раньше. Первый не-null результат используется. Если ни один провайдер не подошёл, применяется оригинальный ИИ Cobblemon как запасной вариант. Это безопасно и совместимо с любыми другими модами.
- Встроенные пресеты сложности - от
easyдоextreme. Меняются на лету через команды или UI. Хотите, чтобы дикие покемоны реально напрягали? Выбирайтеextreme. - Админ-команды - полноценное управление без редактирования файлов. Команды:
/wildbattleapi ui- открыть интерфейс/wildbattleapi difficulty <easy|medium|hard|extreme>- сменить сложность/wildbattleapi debug on|off|status- отладка- Сокращённый алиас:
/wba ... - Требуется уровень прав
2(оператор).
Для разработчиков: API и интеграция
Wild Battle API предоставляет публичный API для регистрации собственных реализаций BattleAI. Используйте только классы из пакета com.github.raguto.wildbattleapi.api:
WildBattleAPIWildAIProviderWildAIContext
Не цепляйтесь к внутренним пакетам (impl, mixin, config, network) - они могут меняться.
Регистрация провайдера
Зарегистрируйте свой провайдер один раз при инициализации мода. Приоритет по умолчанию - 0 (catch-all), стандартный оверрайд - 50, высокий приоритет (боссы) - 100+, жёсткий оверрайд - 200+. Если ваш провайдер не хочет брать контекст - верните null.
import com.github.raguto.wildbattleapi.api.WildBattleAPI;
import com.github.raguto.wildbattleapi.api.WildAIContext;
public final class MyWildAIRegistration {
public static void init() {
// Приоритет 150 - высокий, но не жёсткий
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;
}
}
Реализация своего BattleAI
Любой класс, реализующий интерфейс BattleAI из Cobblemon, подойдёт. В методе choose вы решаете, какое действие выполнить. Ниже пример с пассом, но вы можете написать любую логику.
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.*;
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;
}
// Замените это на свою логику выбора атаки или смены.
return PassActionResponse.INSTANCE;
}
@Override
public void onHealthChange(BattleHealthChangePacket packet) {
// Опционально: отслеживание изменения здоровья.
}
}
WildAIContext
Контекст предоставляет информацию, нужную провайдеру для решения:
getActor(),getPokemonList(),getBattle(),isForceSwitch()- всегда доступны.getActiveBattlePokemon(),getAiSide(),getMoveset()- могут быть null, проверяйте.
Зависимости в модпаке
Wild Battle API должен быть установлен и на клиенте, и на сервере, если ваш мод загружается на обеих сторонах. Mod ID: wild_battle_api. Объявите зависимость в своём мод-метадате:
Fabric (fabric.mod.json):
{
"depends": {
"wild_battle_api": "*"
}
}
NeoForge (META-INF/neoforge.mods.toml):
[[dependencies.your_mod_id]]
modId = "wild_battle_api"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"
Для компиляции можно положить loader-специфичный jar в папку libs и добавить зависимость:
- Fabric:
modCompileOnly files("libs/wild_battle_api-fabric-1.0.0.jar") - NeoForge:
compileOnly files("libs/wild_battle_api-neoforge-1.0.0.jar")
Версии и совместимость
Мод поддерживает Fabric и NeoForge для Minecraft 1.21.1 (и, скорее всего, более новые версии Cobblemon).
Лицензия
Код и бинарники Wild Battle API распространяются с правами "All Rights Reserved". Использование и распространение третьими лицами - только по разрешению автора, описанному на странице мода.
Если вы собираете модпак с Cobblemon и хотите, чтобы битвы с дикими покемонами были по-настоящему интересными и непредсказуемыми - Wild Battle API ваш выбор. Скачайте мод и настройте сложность под себя. Всё остальное сделает API.
