modsmith Войти Войти Рус / Eng

Wild Battle API

wild-battle-api · 256903 загрузок · LicenseRef-All-Rights-Reserved

клиент: required · сервер: required (заявлено автором мода)

Общий API AI диких сражений для Cobblemon.

Описание

Пожалуйста, поддержите меня на ko-fi, если вам нравится мод и вы можете его себе позволить, я ценю даже 1 доллар. Ko-fi


Я даю разрешение всем, кто хочет добавить мой мод в модпак


API дикой битвы

API Wild Battle — это общая платформа искусственного интеллекта для диких сражений для Cobblemon.

Для игроков и авторов пакетов он предоставляет настраиваемое более разумное поведение в дикой битве со встроенными пресетами и инструментами администратора. Для разработчиков он предоставляет поддерживаемый общедоступный API для регистрации пользовательских диких реализаций BattleAI без непосредственной замены внутренних компонентов Cobblemon.

API Wild Battle устанавливает делегирующий ИИ участникам дикой битвы в начале битвы. По каждому решению ИИ:

  • В первую очередь проверяются поставщики с более высоким приоритетом.
  • Используется первый поставщик, который возвращает ненулевое значение BattleAI.
  • Возврат null относится к поставщикам с более низким приоритетом.
  • Если ни один поставщик не заявляет права на контекст, в качестве запасного варианта используется исходный искусственный интеллект Cobblemon актера.

Это позволяет нескольким модам безопасно взаимодействовать, сохраняя при этом надежный запасной путь, когда не применяется пользовательский поставщик.

Включенные функции

  • Общий API для расширений искусственного интеллекта диких битв.
  • Разрешение поставщика на основе приоритета
  • Безопасный возврат к оригинальному искусственному интеллекту Cobblemon актера.
  • Встроенное настраиваемое интеллектуальное поведение дикого ИИ.
  • Предустановки сложности от easy до extreme.
  • Пользовательский интерфейс администратора и команды отладки.
  • Поддержка Fabric и NeoForge для Minecraft 1.21.1

Команды администратора

API Wild Battle включает команды оператора/администратора для тестирования и настройки.

Команды:

  • /wildbattleapi ui
  • /wildbattleapi difficulty <easy|medium|hard|extreme>
  • /wildbattleapi debug on
  • /wildbattleapi debug off
  • /wildbattleapi debug status

Псевдонимы:

  • /wba ui
  • /wba difficulty <easy|medium|hard|extreme>
  • /wba debug on|off|status

Для этих команд требуется уровень разрешений 2.

Использование разработчиками

Использование разработчиком

Поддерживаемый общедоступный API

Используйте только эти классы для сторонней интеграции:

  • com.github.raguto.wildbattleapi.api.WildBattleAPI
  • com.github.raguto.wildbattleapi.api.WildAIProvider
  • com.github.raguto.wildbattleapi.api.WildAIContext

Не зависьте от внутренних пакетов, таких как impl, mixin, config или network.

Зависимость во время выполнения

Установите Wild Battle API в любом месте, где загружается зависимый мод. В обычных модпаках это означает и клиент, и сервер.

Идентификатор мода:

  • wild_battle_api

Также объявите это как зависимость в метаданных вашего мода.

Ткань (fabric.mod.json):

{
  "depends": {
    "wild_battle_api": "*"
  }
}

НеоФордж (META-INF/neoforge.mods.toml):

[[dependencies.your_mod_id]]
modId = "wild_battle_api"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"

Настройте минимальную версию на первую версию Wild Battle API, которую поддерживает ваш мод.

Зависимость во время компиляции

Если вы не используете опубликованный артефакт Maven, скомпилируйте его напрямую с jar-файлом, специфичным для загрузчика.

Пример ткани:

dependencies {
    modCompileOnly files("libs/wild_battle_api-fabric-1.0.0.jar")
}

Пример НеоФорджа:

dependencies {
    compileOnly files("libs/wild_battle_api-neoforge-1.0.0.jar")
}

Используйте jar, соответствующий вашей среде.

Регистрация провайдера

Зарегистрируйте своего провайдера один раз во время общей инициализации вашего мода.

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;
    }
}

Вы также можете зарегистрироваться с приоритетом по умолчанию:

WildBattleAPI.registerProvider(context -> null);

Приоритетное руководство

  • 0: универсальный поставщик или поставщик по умолчанию.
  • 50: стандартное переопределение
  • 100+: переопределение с высоким приоритетом или для конкретного босса.
  • 200+: жесткое переопределение, используйте осторожно.

Если ваш провайдер занимается только конкретными случаями, для всего остального верните null.

Реализация собственного BattleAI

Вы можете предоставить любой класс, реализующий BattleAI Cobblemon.

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 предоставляет поставщикам информацию, необходимую для принятия решения о том, следует ли требовать участия в дикой битве.

Всегда доступны:

  • getActor()
  • getPokemonList()
  • getBattle()
  • isForceSwitch()

Обнуляемое в зависимости от текущего решения:

  • getActiveBattlePokemon()
  • getAiSide()
  • getMoveset()

Оберегайте поля, допускающие значение NULL, перед их использованием.

Примечания по интеграции

  • Сохраняйте логику поставщика быстрой и предсказуемой.
  • Верните null, если ваш мод не хочет запрашивать текущий контекст.
  • Избегайте создания исключений из логики поставщика или искусственного интеллекта.
  • Тестируйте как на выделенном сервере, так и в интегрированном одиночном режиме.
  • Если несколько поставщиков модов регистрируют, сначала проверяется более высокий числовой приоритет.

Лицензирование

Код API и двоичные файлы Wild Battle защищены. Все права защищены.

Разрешения на использование и распространение сторонними организациями определяются политикой автора на странице мода.

Версии (6)

ВерсияMinecraftЗагрузчикиФайл
1.1.2 1.21.1 fabric скачать
1.1.2 1.21.1 neoforge скачать
1.0.1 1.21.1 fabric скачать
1.0.1 1.21.1 neoforge скачать
1.0.0 1.21.1 fabric скачать
1.0.0 1.21.1 neoforge скачать

Страница на Modrinth →