快速开始 - Junye-666/RideBattleLib_NeoForge_1.21.1 GitHub Wiki
快速开始:ExampleBasicPack
1.3.3 推荐通过 IRiderPack 组织骑士。
下面示例与 ExampleBasicPack 保持一致:一个基础形态、一个强化形态、一个暂停/继续处理器,以及一个服务端分发处理器。
1. 创建骑士 Pack
public class ExampleBasicPack implements IRiderPack {
public static final ResourceLocation RIDER_ID = rl("test_alpha");
public static final ResourceLocation FORM_BASE = rl("alpha_base_form");
public static final ResourceLocation FORM_POWER = rl("alpha_powered_form");
public static final ResourceLocation CORE_SLOT = rl("core_slot");
public static final ResourceLocation ENERGY_SLOT = rl("energy_slot");
public static final ResourceLocation SKILL_ID = rl("test_skill");
private static ResourceLocation rl(String path) {
return ResourceLocation.fromNamespaceAndPath(RideBattleLib.MODID, path);
}
@Override
public ResourceLocation riderId() {
return RIDER_ID;
}
public static final FormConfig BASE_FORM = FormBuilder.create(FORM_BASE)
.armor(Items.IRON_HELMET, Items.IRON_CHESTPLATE, null, Items.IRON_BOOTS)
.requiredItem(CORE_SLOT, Items.IRON_INGOT)
.triggerType(TriggerType.KEY)
.attribute(Attributes.MAX_HEALTH, 8.0, AttributeModifier.Operation.ADD_VALUE)
.attribute(Attributes.MOVEMENT_SPEED, 0.1, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)
.effect(MobEffects.NIGHT_VISION, 0)
.effect(MobEffects.DIG_SPEED, 1)
.shouldPause(true)
.grantedItem(Items.IRON_SWORD)
.grantedItem(Items.SHIELD)
.allowsEmptyDriver(false)
.build();
public static final FormConfig POWER_FORM = FormBuilder.create(FORM_POWER)
.armor(Items.GOLDEN_HELMET, Items.GOLDEN_CHESTPLATE, null, Items.GOLDEN_BOOTS)
.triggerType(TriggerType.AUTO)
.attribute(Attributes.MAX_HEALTH, 12.0, AttributeModifier.Operation.ADD_VALUE)
.attribute(Attributes.MOVEMENT_SPEED, 0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)
.effect(MobEffects.DAMAGE_BOOST, 0)
.effect(MobEffects.NIGHT_VISION, 0)
.requiredItem(CORE_SLOT, Items.GOLD_INGOT)
.auxRequiredItem(ENERGY_SLOT, Items.REDSTONE)
.grantedItem(Items.NETHERITE_SWORD)
.skill(SKILL_ID, 20)
.build();
@Override
public void registerCommon() {
RiderBuilder.create(RIDER_ID)
.driver(Items.IRON_LEGGINGS)
.auxDriver(Items.BRICK)
.slot(CORE_SLOT, List.of(Items.IRON_INGOT, Items.GOLD_INGOT), true, true)
.auxSlot(ENERGY_SLOT, List.of(Items.REDSTONE, Items.GLOWSTONE_DUST, Items.APPLE), true, false)
.form(BASE_FORM)
.form(POWER_FORM)
.baseForm(FORM_BASE)
.allowDynamicForms(false)
.buildAndRegister();
ServerRiderDispatcher.register(new PauseResumeHandler());
}
}
2. 在主模组构造器中注册 Pack
1.3.3 中,骑士 Pack 推荐在模组主线构造器里注册。
RiderPackRegistry.initCommon() 会由 RideBattleLib 在 FMLCommonSetupEvent 中自动调用,客户端 initClient() 也会由 RideBattleLib 客户端入口自动调用。
@Mod("yourmod")
public class YourMod {
public YourMod(IEventBus modEventBus, ModContainer modContainer) {
RiderPackRegistry.register(new ExampleBasicPack());
// RiderPackRegistry.register(new ExampleDynamicPack());
}
}
3. 暂停变身处理器
shouldPause(true) 的形态会进入等待状态,需要外部调用 completeHenshin 或 completeIn。
private static final class PauseResumeHandler implements IRiderServerHandler {
@Override
public ResourceLocation riderId() {
return ExampleBasicPack.RIDER_ID;
}
@Override
public void onHenshinPre(HenshinEvent.Pre event) {
if (ExampleBasicPack.FORM_BASE.equals(event.getFormId())) {
RideBattleAPI.completeIn(44, event.getPlayer());
}
}
@Override
public void onSwitchPre(FormSwitchEvent.Pre event) {
if (ExampleBasicPack.FORM_POWER.equals(event.getOldFormId())) {
event.getPlayer().displayClientMessage(
Component.literal("从金形态切换时会出现在物品栏上方的字"),
true
);
}
if (ExampleBasicPack.FORM_BASE.equals(event.getNewFormId())) {
RideBattleAPI.completeIn(44, event.getPlayer());
}
}
}
4. 游戏内测试
- 获取铁护腿并装备到腿部,作为主驱动器。
- 获取砖块并装备到副手,作为辅助驱动器。
- 手持铁锭右键,将物品插入
core_slot。 - 按下
G键触发驱动器。 - 基础形态会因
shouldPause(true)暂停,随后由处理器在 44 ticks 后完成变身。 - 按下
V键解除变身。 - 手持红石并满足金锭条件后,可触发强化形态。