Skip to content

03. 符卡

H2Sxxa edited this page Aug 18, 2023 · 6 revisions

符卡

创建符卡

创建一个符卡很简单,比注册弹幕简单多了,只需要3步

创建符卡实体 -> 符卡类型绑定符卡实体 -> 注册符卡类型

符卡实体(SpellcardEntity)

符卡实体决定了符卡的逻辑,例如在每tick释放多少弹幕,什么弹幕就是由符卡实体决定。

创建一个符卡实体只需继承net.katsstuff.teamnightclipse.danmakucore.entity.spellcard.SpellcardEntity

例如,我想要一个每5tick向前环状射击随机颜色的弹幕的符卡(io.github.teamgensouspark.kekkai.example.spellcard.MySpellCardEntity)只需要这样做。

public class MySpellCardEntity extends SpellcardEntity {

    public MySpellCardEntity(Spellcard spellcard, EntitySpellcard cardEntity, Option<EntityLivingBase> target) {
        super(spellcard, cardEntity, target);
    }

    @Override
    public void onSpellcardUpdate() {
        if (time() % 5 == 0) {
            KekkaiDanmakuCreationHelper.createRingShot(
                    KekkaiHelper.applyTargetWithSpellcard(DanmakuBuilder.getBuilderWithEntity(this.user())
                            .setShot(LibShotData.SHOT_MEDIUM
                                    .setMainColor(AtomColors.ATOM_COLORS_HELPER.randomColor())
                                    .setSubEntity(KekkaiSubEntities.TRACKING)),
                            this)
                            .build(),
                    3,
                    0,
                    0,
                    0d);
        }
    }

}

符卡类型(Spellcard)

原本符卡的创建方法是在符卡类型里套符卡实体成员类,然后在符卡类型的instantiate方法返回符卡实体实例,才能够创建一个符卡。

为了提供便利,Kekkai使用SpellCardBase继承了Spellcard ,同时在instantiate方法里使用反射使SpellCardBase能够接受一个动态的类型,从而动态创建符卡实体实例。

因此,创建一个符卡类型我们只需要提供一些参数再实例化SpellCardBase就万事大吉了。

// io.github.teamgensouspark.kekkai.example.spellcard.MySpellCards
public static final Spellcard EXAMPLE_CARD = new SpellCardBase<>("example_card",MySpellCardEntity.class,TouhouExCharacter.MEGUMU_IIZUNAMARU);

注册符卡

就是普通的注册。

// io.github.teamgensouspark.kekkai.example.spellcard.MySpellCards
@SubscribeEvent
public static void onSpellcardRegister(RegistryEvent.Register<Spellcard> event) {
    event.getRegistry().registerAll(EXAMPLE_CARD);
}

本地化规则

#决定符卡物品名称
item.spellcard.spellcard.模组名.符卡注册名.name=符卡:符卡名称

#决定符卡宣言的名称
spellcard.模组名.符卡注册名=符卡名称

模型创建规则

DanmakuCore的符卡会从.../resources/assets/kekkai/models/item/danmaku下寻找你的符卡模型,我们可以沿用DanmakuCore的符卡模型,注意提供128x的贴图(X

{ 
     "parent": "danmakucore:item/danmaku/spellcard/spellcard_base", 
     "textures": { 
       "1": "kekkai:items/spellcard/example_card" 
     } 
 }
Clone this wiki locally