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