API基础操作 - Junye-666/RideBattleLib_NeoForge_1.21.1 GitHub Wiki

RideBattleAPI 是 RideBattleLib 对外提供的统一静态入口,包含变身控制、驱动器操作、状态查询、条件检查、工具方法等。
大部分方法会自动判断客户端 / 服务端,但涉及逻辑时仍建议以服务端为权威。

变身控制

方法 说明
transform(Player player) 尝试触发玩家驱动器变身
unTransform(Player player) 解除玩家变身
switchForm(Player player, ResourceLocation newFormId) 切换到指定形态,玩家必须已变身
completeHenshin(Player player) 完成暂停中的变身
completeIn(int ticks, Player player) 延迟指定 ticks 后完成变身

示例:

Player player = ...;

boolean success = RideBattleAPI.transform(player);
if (success) {
    // 变身指令已发起
}

if (RideBattleAPI.isTransformed(player)) {
    RideBattleAPI.unTransform(player);
}

RideBattleAPI.switchForm(player, ResourceLocation.fromNamespaceAndPath("mymod", "powered_form"));

RideBattleAPI.completeIn(40, player);

暂停变身示例:

RideBattleAPI.scheduleSeconds(2.0f, () -> {
    RideBattleAPI.completeHenshin(player);
});

// 或
RideBattleAPI.completeIn(40, player);

驱动器物品操作

方法 说明
insertItemToSlot(Player, ResourceLocation slotId, ItemStack stack) 插入物品,不触发 AUTO
insertItemToSlot(Player, ResourceLocation slotId, Item item) 插入物品快捷方法
extractItemFromSlot(Player, ResourceLocation slotId) 取出指定槽位物品
returnDriverItems(Player) 返还驱动器内所有物品
getItemForSlot(Player, ResourceLocation slotId) 获取指定槽位物品
isDriverEmpty(Player) 驱动器是否为空
hasItemInDriver(Player, Item/ItemStack) 驱动器内是否有物品
hasItemInSlot(Player, ResourceLocation slotId, Item/ItemStack) 指定槽位是否有物品

示例:

ResourceLocation slotId = ResourceLocation.fromNamespaceAndPath("mymod", "core_slot");

RideBattleAPI.insertItemToSlot(player, slotId, new ItemStack(Items.IRON_INGOT));
RideBattleAPI.insertItemToSlot(player, slotId, Items.IRON_INGOT);

RideBattleAPI.extractItemFromSlot(player, slotId);
RideBattleAPI.returnDriverItems(player);

boolean hasIron = RideBattleAPI.hasItemInSlot(player, slotId, Items.IRON_INGOT);

状态查询

方法 说明
isTransformed(Player) 是否已变身
isTransforming(Player) 是否处于变身过程中
getCurrentFormId(Player) 当前形态 ID
getPendingForm(Player) 等待完成的形态 ID
getActiveRiderConfig(Player) 当前骑士配置
getActiveFormConfig(Player) 当前形态配置
getDriverItems(Player) 驱动器内所有物品
getCurrentSkill(Player) 当前选中的技能 ID
getCurrentFormSkills(Player) 当前形态技能列表

示例:

if (RideBattleAPI.isTransformed(player)) {
    ResourceLocation currentForm = RideBattleAPI.getCurrentFormId(player);
}

ResourceLocation pending = RideBattleAPI.getPendingForm(player);

Map<ResourceLocation, ItemStack> items = RideBattleAPI.getDriverItems(player);
for (var entry : items.entrySet()) {
    System.out.println("槽位: " + entry.getKey() + " 物品: " + entry.getValue());
}

条件检查

方法 说明
isSpecificRider(player, riderId) 是否为指定骑士
isSpecificForm(player, formId) 是否为指定形态
hasDriverEquipped(player) 是否装备驱动器
hasAuxDriverEquipped(player) 是否装备辅助驱动器
hasSpecificDriverEquipped(player, riderId) 是否装备特定骑士驱动器
canTransform(player) 是否可以变身
isInCooldown(player) 是否处于吃瘪冷却
isDriverEmpty(player) 驱动器是否为空

示例:

if (RideBattleAPI.hasDriverEquipped(player)
        && !RideBattleAPI.isInCooldown(player)
        && !RideBattleAPI.isTransformed(player)) {
    RideBattleAPI.transform(player);
}

工具方法

方法 说明
scheduleTicks(int ticks, Runnable callback) 延迟游戏刻执行
scheduleSeconds(float seconds, Runnable callback) 延迟秒数执行
playPublicSound(Player, SoundEvent, float, float) 播放全服音效
syncClientState(ServerPlayer) 强制同步全部状态
syncDriverData(ServerPlayer) 强制同步驱动器数据
syncHenshinState(ServerPlayer) 强制同步变身状态
resetPlayerState(Player) 重置玩家变身相关状态,谨慎使用

示例:

RideBattleAPI.scheduleTicks(40, () -> {
    // 2 秒后执行
});

RideBattleAPI.scheduleSeconds(3.5f, () -> { // 3.5 秒后执行
    RideBattleAPI.completeHenshin(player);
});

RideBattleAPI.playPublicSound(player, SoundEvents.PLAYER_LEVELUP, 1.0f, 1.0f);