generated from TeamGensouSpark/LunarCapitalFramework
-
Notifications
You must be signed in to change notification settings - Fork 0
03. 符卡
H2Sxxa edited this page Aug 18, 2023
·
6 revisions
创建一个符卡很简单,比注册弹幕简单多了,只需要3步
创建符卡实体 -> 符卡类型绑定符卡实体 -> 注册符卡类型
符卡实体决定了符卡的逻辑,例如在每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);
}
}
}
原本符卡的创建方法是在符卡类型里套符卡实体成员类,然后在符卡类型的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"
}
}