事件系统进阶 - Junye-666/RideBattleLib_NeoForge_1.21.1 GitHub Wiki
RideBattleLib中存在几个特殊事件,提供更高的扩展性及与其它模组的兼容性
此事件允许在搜索RiderConfig时插入其他逻辑,可与其它模组进行联动,比如:
Curios API 允许将驱动器装备在饰品槽位,而非原版盔甲槽位。FindRiderConfigEvent则允许你在系统默认从RiderConfig注册的槽位寻找驱动器前插入自定义搜索逻辑
@SubscribeEvent
public static void onFindConfig(FindRiderConfigEvent event) {
Player player = event.getPlayer();
// 检查 Curios 槽位中是否有驱动器
Optional<ItemStack> found = CuriosApi.getCuriosHelper()
.findEquippedCurio(ModItems.DRIVER.get(), player)
.map(SlotResult::stack);
if (found.isPresent()) {
// 强制指定骑士配置
event.setConfig(MyRider.CONFIG);
}
}注意:在此处调用event.setCanceled(true)会使玩家变身失败,谨慎调用
此事件在变身前匹配形态时强制修改匹配形态的覆盖,可通过状态检查实现相当于形态琐的功能
可实现如检测玩家物品栏中是否有特殊物品实现特殊情况的变身(比如持有某个物品能变身唯心形态)
Player player = event.getPlayer();
// 1. 检查玩家物品栏是否含有特殊物品(下界合金锭)
boolean hasSpecialItem = false;
for (ItemStack stack : player.getInventory().items) {
if (!stack.isEmpty() && stack.is(Items.NETHERITE_INGOT)) {
hasSpecialItem = true;
break;
}
}
// 2. 如果存在,强制覆盖形态
if (hasNetherite) {
// 自定义强化形态 ID
ResourceLocation overrideForm =
ResourceLocation.fromNamespaceAndPath("mymod", "super_form");
// 设置覆盖形态(会替换掉原本匹配的形态)
event.overrideForm(overrideForm);
}
}注意:在此处调用event.setCanceled(true)会直接中止变身,返回null,谨慎调用