自定义策略 - Junye-666/RideBattleLib_NeoForge_1.21.1 GitHub Wiki
策略系统独立于事件系统,可自定义变身、形态切换、解除与吃瘪过程。
IHenshinStrategy
public interface IHenshinStrategy {
void performHenshin(Player player, RiderConfig config, ResourceLocation formId);
void performFormSwitch(Player player, HenshinSessionData data, ResourceLocation newFormId);
void unHenshin(Player player, HenshinSessionData data);
}
默认实现:DefaultHenshinStrategy.INSTANCE。
注册自定义策略:
RiderConfig config = RiderBuilder.create(RIDER_ID)
.driver(Items.GOLD_INGOT)
.slot(SLOT_ID, List.of(Items.IRON_INGOT), true, true)
.form(FORM_ID)
.armor(Items.IRON_HELMET, Items.IRON_CHESTPLATE, null, Items.IRON_BOOTS)
.end()
.baseForm(FORM_ID)
.build();
config.setHenshinStrategy(new CustomHenshinStrategy());
RiderRegistry.registerRider(config);
注意事项:
| 事项 | 说明 |
|---|---|
| 保存快照 | 自定义 performHenshin 中应调用 HenshinUtils.saveTransformedSnapshot() |
| 同步 | 修改玩家数据后调用 SyncManager 同步 |
| 复用默认 | 可调用 DefaultHenshinStrategy.INSTANCE |
| 错误处理 | 失败时避免留下不完整状态 |
IPenaltyStrategy
public interface IPenaltyStrategy {
boolean penaltyEnabled();
float getPenaltyThreshold();
long getCooldownDuration();
float getExplosionPower();
float getKnockBackStrength();
float getResetHealth();
boolean shouldTriggerPenalty(Player player);
void performPenaltyUnhenshin(Player player);
boolean isInCooldown(Player player);
}
默认实现:DefaultPenaltyStrategy,读取 Config 中的吃瘪配置。
注册自定义吃瘪策略:
RiderConfig config = RiderBuilder.create(RIDER_ID)
.driver(Items.GOLD_INGOT)
.slot(SLOT_ID, List.of(Items.IRON_INGOT), true, true)
.form(FORM_ID)
.armor(Items.IRON_HELMET, null, null, Items.IRON_BOOTS)
.end()
.baseForm(FORM_ID)
.build();
config.setPenaltyStrategy(new CustomPenaltyStrategy());
RiderRegistry.registerRider(config);