▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/Wild Battle API
Wild Battle API

Wild Battle API

Общий фреймворк для ИИ диких битв в Cobblemon. Настраиваемая сложность, админ-команды и открытое API для мододелов. Сделайте битвы с дикими покемонами умнее и интереснее!

Оцените первым
132.3K
11

Мод 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:

  • WildBattleAPI
  • WildAIProvider
  • WildAIContext

Не цепляйтесь к внутренним пакетам (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.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

1.21.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Ссылки


Создатели

Детали

Лицензия:
Опубликован:4 месяца назад
Обновлён:4 месяца назад
Главная