刀的种类
在拔刀剑中,绝大多数刀都是同一个物品但具有不同的NBT。
在拔刀剑内部有一个存储了不同种类刀的注册表,不妨称其中储存的刀为“刀原器”。
玩家获得的刀都是“刀原器”的复制品。
注册一个种类的刀,只需要向该注册表中添加“刀原器”。
SlashBladeTweaker现提供的注册方法不止一种,但最为推荐,也是示例中使用的方法是使用BladeRegistry链。
先调用named开始创建拔刀
使用方法调整参数
调用register完成注册
可以紧接着下一把刀的注册
整个过程可以像这样:
BladeRegistry
.named("example:test_one").killCount(10000).refine(1000).proudSoul(2600000)
.texture("named/sange/white").model("named/sange/sange").specialAttack(20).wrap(BladeRegistry.findItem("minecraft:wooden_sword"))
.process(function(s as crafttweaker.item.IItemStack){SERegistry.addSEToItem(s, "test_se");return s;}).register()
.named("example:test_two").register();
这种链可以无限长。
SA
SA,全称SpecialAttack,是玩家特有的使用拔刀剑的攻击方式。在拔刀剑中,SA拥有一套使用数字的注册表,并在nbt中使用数字区分SA。
SlashBladeTweaker现提供的注册方法只有一种。
SARegistry.registerSAregisterSA(int, String, ISpecialAttackFunction)
名称的翻译键为"flammpfeil.slashblade.specialattack.%NAME%"
ISpecialAttackFunction会在玩家使用SA后前后端各调用一次。
SE
SE在拔刀剑中用NBT表示,SE本身无任何作用,也没有任何接口,仅和附魔一样作为信息在其他地方实现。SE使用字符串作为注册名。
SlashBladeTweaker现提供的注册方法不止一种,但是这里只介绍一种:
SEType.create(10, "example_se").register(); 第一个参数为默认的SE等级,第二个参数为名称。
名称的翻译键是"slashblade.seffect.name.%NAME%"。
添加SE可以直接操作NBT,也可以用SERegistry#addSEToItem。
杂项
wrap
黑白狐内置木剑,你可以在创建BladeType时修改wrap(BladeTypeBuilder#wrap(IItemStack))
使用拔刀剑攻击相当于内置的物品攻击,这也是
创造背包中的该刀面板下有一行字:
is demo item. is wooden sword true performance : please crafting
(大意为:这是创造模式展示的刀,只有木刀的威力,它的真正威力需要你合成。)
若使用武士刀合成的利刀「无名」红玉合成而来,将继承武士刀的能力丶耐久丶伤害。
SA为幻影刃类型的每段伤害(幻影刃,极臆斩,波刀龙胆等)相比其他拔刀剑,会额外增加拔刀剑无任何附加状态下的“+4攻击伤害”
的原因。
重注册
使用BladeRegistry#reregister(String,IItemStack)可以强制将一个ItemStack注册到该刀名上,由此实现刀的覆盖或修改
以修改为例:
val blade as IItemStack = BladeRegistry.getBladeItemStack("flammpfeil.slashblade.named.fox.white");
BladeUtils.setKillCount(blade, 114514);
BladeRegistry.reregister("flammpfeil.slashblade.named.fox.white", blade);