
野性对战API
Cobblemon的共享野对战AI API。
查看大图如果您喜欢这个模组并且能负担得起,请考虑在 ko-fi 上支持我,即使 1 美元我也很感激。
我允许任何希望将我的模组添加到整合包中的人这样做
野性对战 API
野性对战 API 是 Cobblemon 的一个共享野性对战 AI 框架。
对于玩家和整合包作者,它提供了可配置的更智能的野性对战行为,内置预设和管理员工具。对于开发者,它提供了一个受支持的公共 API,用于注册自定义野性 BattleAI 实现,而无需直接替换 Cobblemon 的内部机制。
野性对战 API 在对战开始时为野性对战参与者安装一个委托 AI。在每个 AI 决策时:
- 首先检查更高优先级的提供者。
- 第一个返回非空
BattleAI的提供者将被使用。 - 返回
null会委托给较低优先级的提供者。 - 如果没有提供者声明该上下文,则使用参与者原始的 Cobblemon AI 作为回退。
这让多个模组可以安全地协同工作,同时在没有任何自定义提供者适用时仍保留可靠的回退路径。
包含的功能
- 野性对战 AI 扩展的共享 API
- 基于优先级的提供者解析
- 安全回退到参与者原始的 Cobblemon AI
- 内置可配置的智能野性 AI 行为
- 从
easy到extreme的难度预设 - 管理员 UI 和调试命令
- 支持 Minecraft
1.21.1的 Fabric 和 NeoForge
管理员命令
野性对战 API 包含用于测试和配置的操作员/管理员命令。
命令:
/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.WildBattleAPIcom.github.raguto.wildbattleapi.api.WildAIProvidercom.github.raguto.wildbattleapi.api.WildAIContext
不要依赖诸如 impl、mixin、config 或 network 等内部包。
运行时依赖
在任何您的依赖模组加载的地方安装野性对战 API。在普通的整合包中,这意味着客户端和服务端都需要安装。
模组 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"
将最低版本调整为您的模组支持的第一个野性对战 API 版本。
编译时依赖
如果您没有使用已发布的 Maven 构件,请直接针对特定加载器的 jar 文件进行编译。
Fabric 示例:
dependencies {
modCompileOnly files("libs/wild_battle_api-fabric-1.0.0.jar")
}
NeoForge 示例:
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+:高优先级或 Boss 特定覆盖200+:硬覆盖,请谨慎使用
如果您的提供者只处理特定情况,请为其他所有情况返回 null。
实现您自己的 BattleAI
您可以提供任何实现 Cobblemon 的 BattleAI 的类。
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;
}
// 用您自己的招式或换人逻辑替换此处。
return PassActionResponse.INSTANCE;
}
@Override
public void onHealthChange(BattleHealthChangePacket packet) {
// 可选的状态跟踪。
}
}
WildAIContext
WildAIContext 为提供者提供决定是否声明野性对战参与者所需的信息。
始终可用:
getActor()getPokemonList()getBattle()isForceSwitch()
根据当前决策可能为空:
getActiveBattlePokemon()getAiSide()getMoveset()
在使用可空字段之前请进行判空保护。
集成说明
- 保持提供者逻辑快速且可预测。
- 当您的模组不希望声明当前上下文时返回
null。 - 避免从提供者或 AI 逻辑中抛出异常。
- 在专用服务器和集成单人游戏中进行测试。
- 如果多个模组注册了提供者,则数值较高优先级会首先被检查。
许可
野性对战 API 代码和二进制文件保留所有权利。
第三方使用和分发权限由模组页面上的作者政策定义。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。