本帖最后由 Icy_Mint 于 2020-4-30 22:19 编辑
Magic插件的搬运帖:
https://www.mcbbs.net/thread-633695-1-1.html
以下内容来自wiki,在翻译的基础上略有改动
制作自定义技能
众所周知,Magic插件的技能是可以高度自定义的。如果你很喜欢某个技能,想基于这个技能制作你自己的技能,那是完全可行的。
Magic的技能类似于脚本事件(和SkillAPI类似),多种多样的方式和结构能够使技能发挥出无限可能!
制作技能的一些帮助
1.官方的网页编辑器
这个编辑器提供一个编辑config的工具,并且具有错误检查,语法高亮和自动补全的功能。(个人认为十分管用)并且这个编辑器可以通过登录来实现保存。关于登录方式,只需要登录一次插件作者的服务器输入给定指令即可,具体请参考编辑器网页。
2.技能的引用列表
这里包含了技能的各种属性,比如参数,行为,效果等等,每一项内容都有完整的说明。
3.默认的技能列表
这里有插件自带的技能,适合在制作技能的时候模仿学习
4.github上的技能文件列表
技能制作教学
在这个教程中,我们将分析Magic的奥术飞弹技能。
技能内容
一般来说,我们每个技能都包含了五个部分
1.基础属性,比如技能的名字,图标,技能点消耗,以及其他不会随着技能升级而改变的东西
2.技能行为,在这里就是技能释放的时候会发生的事
3.特效,技能自然少不了炫酷的特效
4.参数,参数是从技能行为中分离出来的,这些参数决定了技能释放时发生的事的细节,比如具体造成多少伤害。在升级,施法杖或者指令释放的时候可以通过特殊方式被新的值覆盖,以便于测试。
5.消耗,技能自然有消耗,包括法力值,物品,生命值,金钱等等。
基础属性
首先我们来看看奥术飞弹,完整的配置文件在这里。
如果网络不够好可以看这里
复制代码这个就是技能的关键词了, 释放技能的时候就是通过/cast 关键词 释放,关键词是不能重复的。
复制代码技能的图标是技能用于在游戏内展示的。比如作为一个物品放在施法杖里,商店里等等。
第一行是技能可用时候的图标,Magic插件自带的材质包里 diamond_axe:160 是有一个独立材质的。
第二行就是技能因为法力值不足,还在冷却等原因不可用时候的图标。
当然,技能的图标也能够显示为玩家的头颅,如果 url_icons_enabled 这一项在config文件中被设置成了true,那么技能就会用第三行的地址来加载指定的头颅作为图标。
但是头颅图标不支持技能不可用时的区别显示。
在Magic自带的材质包里,每一个自带技能都有对应的不可用的图标。
技能时可以升级的,比如 missile|2 就表示2级的奥术飞弹,这个技能继承 missile 的全部内容,当然可以对一部分参数进行修改。
复制代码我们回到missile,这两行就表示了升级这个技能需要满足的前提条件,path是Magic插件的一个设定,表示玩家一步步使用技能,学习技能的成长的阶段,这两行加起来就表明,如果要升级技能,你必须处于Beginner阶段,并且至少成功释放了40**术飞弹,关于成功释放,会在后面介绍。
复制代码技能可以选择添加目录,是不错的整理技能的方式,比如奥术飞弹是战斗技能,就把它加到战斗目录里面
复制代码worth表示在技能商店购买学习这一技能时需要花费的技能点。
第二行表示成功释放这一技能会给予玩家多少技能点。
第三行表示获取技能点的冷却,当然这并不表示在冷却结束前不再能获得技能点,只是获得的技能点会被减少,以防玩家太快获得太多的技能点。
关于游戏内文本
为了让本地化简单一些,Magic插件把游戏内的提示文字都放到了messages.yml里面。每一个技能都可以在那里编辑游戏内的信息。
当然,为了方便起见,你也可以直接在技能文件内部使用 name 和 description 标签来设置技能的名字和描述。
关于如何在messages.yml内部添加
复制代码技能的类文件
某些旧的技能还在使用这种方式,此处不再展开
技能行为
现在大多数技能都使用 actions 来实现,这一部分决定了技能释放时会做些什么。
让我们再来看奥术飞弹技能
复制代码actions里面可能包含多个部分,但是大多数技能只有 cast 部分,也就是说这些动作是技能被释放时发生的。
可以看到,这些动作可以是嵌套的,也就是说动作可以有它的子动作,在自己释放成功后才会执行它的子动作。
每一个动作必须包含一个 class 文件,这决定了这是个什么技能,所有可用的class可以在这里找到。
奥术飞弹是从CustomProjectile开始执行的,执行过程如下:
(分层通过缩进实现)
技能释放,运行到cast这一行,按顺序执行 cast 下一层的所有class,这里只有- class: CustomProjectile这一项
当这一项命中目标时,按顺序执行 - class: CustomProjectile 的 actions 下一层的所有class, 这里就有- class: Damage 和 - class: BreakBlock两项了,其中后者还跟着一行参数。
接下来依次执行 Damage 和 BreakBlock ,也就是对被命中物造成伤害和破坏方块。
由于这两项没有子动作了,技能执行结束。
这个分层结构可能让你感到迷惑,在这里举个例子
复制代码和cast左端对齐的 - 共有两个,分别是class A 和 B,从第一行到第二个 - 所在行的前一行都是A的内容,从第二个 - 所在行开始到结尾都是B的内容。也就是说,开头的 - 表示一个新的列表项的开始。
动作参数
每一个动作都有参数来具体决定这个动作的行为,这些参数可以直接加在上例中 “A的其他内容” 这里,也可以加到上文提到过的第四部分,参数里面
在奥术飞弹的例子中,可以看到 - class: BreakBlock 有一个ignore_result = true 的参数。
每一个动作都会返回执行结果,通常是成功,失败,没有目标中的一个。如果想要通过释放技能获得技能点(前面提到过),那么至少要有一个动作返回了成功。对于奥术飞弹,我们不希望仅通过破坏方块就能够成功执行技能,所以class: BreakBlock的返回结果会被忽略,也就是说,要想通过奥术飞弹获得技能点,你只能使class: Damage返回成功来实现,也就是攻击其他生物。
特效
这里决定了技能释放的时候会产生的效果,特效下面必须有一个cast才能够在释放的时候产生出一些效果。
让我们再次来看奥术飞弹:
复制代码cast这部分就会在技能释放的时候执行。cast 实际上是一个列表,也就是说你能够同时执行多个粒子效果,列表的实现同上,靠开头的 - 表示一个新的列表项。
class 表示效果的执行方式,似乎这一项已经过时了,作者现在建议使用 EffectLib 来实现粒子效果。
sound 表示执行时播放的音效,可以使用 sound_pitch 和 sound_volume 来进一步细化
location 表示执行的位置, origin表示释放者, target表示目标,both表示两者。
color_override 施法杖时有颜色数据的,每个施法杖的颜色都不一样,这一项就在告诉后面的 effectlib,粒子要使用施法杖的颜色,只对 redstone 和 mob_spell 这两种粒子有效。
effectlib 表示要执行的 EffectLib 特效
(在未安装EffectLib的情况下我依然能看到特效,Magic可能已经包含了该插件)
你可能不止希望在释放的时候制造特效,Magic也能满足你
复制代码tick的左端和上面的cast对齐,表明这也是effects的子项,tick包含的内容会在技能执行期间的每一个服务器刻执行一次。
技能参数
复制代码所有这些参数都会作用到上面的三个class中(如果它能发生作用),关于这些参数的具体作用以及还要哪些可用的参数,请在这里找到所用的Action,Action里包含了它的全部可用参数。
爆头修正
复制代码CustomProjectile是可以检测你是否实现了爆头,当爆头实现的时候,就会使用这里所包含的参数(这里为伤害x1.5)。
消耗
技能消耗通过列表实现,通常使用mana
复制代码技能要求
Magic支持玩家需要满足要求才能使用技能,当前只有对SkillAPI的
复制代码表示玩家需要学会skillapi中名为enchanting的技能才能释放此技能。
放在最后的话
我最近正在研究此插件(毕竟是自己搬运插件开的坑),将一点点分享我对这个插件的研究成果,如果觉得对你有帮助,还请希望留下人气和金粒。
Magic插件的搬运帖:
https://www.mcbbs.net/thread-633695-1-1.html
以下内容来自wiki,在翻译的基础上略有改动
制作自定义技能
众所周知,Magic插件的技能是可以高度自定义的。如果你很喜欢某个技能,想基于这个技能制作你自己的技能,那是完全可行的。
Magic的技能类似于脚本事件(和SkillAPI类似),多种多样的方式和结构能够使技能发挥出无限可能!
制作技能的一些帮助
1.官方的网页编辑器
这个编辑器提供一个编辑config的工具,并且具有错误检查,语法高亮和自动补全的功能。(个人认为十分管用)并且这个编辑器可以通过登录来实现保存。关于登录方式,只需要登录一次插件作者的服务器输入给定指令即可,具体请参考编辑器网页。
2.技能的引用列表
这里包含了技能的各种属性,比如参数,行为,效果等等,每一项内容都有完整的说明。
3.默认的技能列表
这里有插件自带的技能,适合在制作技能的时候模仿学习
4.github上的技能文件列表
技能制作教学
在这个教程中,我们将分析Magic的奥术飞弹技能。
技能内容
一般来说,我们每个技能都包含了五个部分
1.基础属性,比如技能的名字,图标,技能点消耗,以及其他不会随着技能升级而改变的东西
2.技能行为,在这里就是技能释放的时候会发生的事
3.特效,技能自然少不了炫酷的特效
4.参数,参数是从技能行为中分离出来的,这些参数决定了技能释放时发生的事的细节,比如具体造成多少伤害。在升级,施法杖或者指令释放的时候可以通过特殊方式被新的值覆盖,以便于测试。
5.消耗,技能自然有消耗,包括法力值,物品,生命值,金钱等等。
基础属性
首先我们来看看奥术飞弹,完整的配置文件在这里。
如果网络不够好可以看这里
- missile:
- icon: diamond_axe:160
- icon_disabled: diamond_hoe:160
- icon_url: http://textures.minecraft.net/texture/2ba95570c7b712713632d4c0d2fc66906613d3850a596a0267c6d763fe741ac
第一行是技能可用时候的图标,Magic插件自带的材质包里 diamond_axe:160 是有一个独立材质的。
第二行就是技能因为法力值不足,还在冷却等原因不可用时候的图标。
当然,技能的图标也能够显示为玩家的头颅,如果 url_icons_enabled 这一项在config文件中被设置成了true,那么技能就会用第三行的地址来加载指定的头颅作为图标。
但是头颅图标不支持技能不可用时的区别显示。
在Magic自带的材质包里,每一个自带技能都有对应的不可用的图标。
技能时可以升级的,比如 missile|2 就表示2级的奥术飞弹,这个技能继承 missile 的全部内容,当然可以对一部分参数进行修改。
- upgrade_required_path: beginner
- upgrade_required_casts: 40
- category: combat
- worth: 150
- earns_sp: 8
- earns_cooldown: 10000
第二行表示成功释放这一技能会给予玩家多少技能点。
第三行表示获取技能点的冷却,当然这并不表示在冷却结束前不再能获得技能点,只是获得的技能点会被减少,以防玩家太快获得太多的技能点。
关于游戏内文本
为了让本地化简单一些,Magic插件把游戏内的提示文字都放到了messages.yml里面。每一个技能都可以在那里编辑游戏内的信息。
当然,为了方便起见,你也可以直接在技能文件内部使用 name 和 description 标签来设置技能的名字和描述。
关于如何在messages.yml内部添加
- spells:
- missile:
- name: 奥术飞弹
- description: 我释放奥术飞弹
- missile|2:
- name: 强化奥术飞弹
- description: 我释放强化奥术飞弹
某些旧的技能还在使用这种方式,此处不再展开
技能行为
现在大多数技能都使用 actions 来实现,这一部分决定了技能释放时会做些什么。
让我们再来看奥术飞弹技能
- actions:
- cast:
- - class: CustomProjectile
- actions:
- - class: Damage
- - class: BreakBlock
- ignore_result: true
可以看到,这些动作可以是嵌套的,也就是说动作可以有它的子动作,在自己释放成功后才会执行它的子动作。
每一个动作必须包含一个 class 文件,这决定了这是个什么技能,所有可用的class可以在这里找到。
奥术飞弹是从CustomProjectile开始执行的,执行过程如下:
(分层通过缩进实现)
技能释放,运行到cast这一行,按顺序执行 cast 下一层的所有class,这里只有- class: CustomProjectile这一项
当这一项命中目标时,按顺序执行 - class: CustomProjectile 的 actions 下一层的所有class, 这里就有- class: Damage 和 - class: BreakBlock两项了,其中后者还跟着一行参数。
接下来依次执行 Damage 和 BreakBlock ,也就是对被命中物造成伤害和破坏方块。
由于这两项没有子动作了,技能执行结束。
这个分层结构可能让你感到迷惑,在这里举个例子
- actions:
- cast:
- - class: A
- A的其他内容
- actions:
- - class: AA
- - class: AB
- actions:
- - class: ABA
- - class: B
- B的其他内容
- actions:
- - class: BA
动作参数
每一个动作都有参数来具体决定这个动作的行为,这些参数可以直接加在上例中 “A的其他内容” 这里,也可以加到上文提到过的第四部分,参数里面
在奥术飞弹的例子中,可以看到 - class: BreakBlock 有一个ignore_result = true 的参数。
每一个动作都会返回执行结果,通常是成功,失败,没有目标中的一个。如果想要通过释放技能获得技能点(前面提到过),那么至少要有一个动作返回了成功。对于奥术飞弹,我们不希望仅通过破坏方块就能够成功执行技能,所以class: BreakBlock的返回结果会被忽略,也就是说,要想通过奥术飞弹获得技能点,你只能使class: Damage返回成功来实现,也就是攻击其他生物。
特效
这里决定了技能释放的时候会产生的效果,特效下面必须有一个cast才能够在释放的时候产生出一些效果。
让我们再次来看奥术飞弹:
- cast:
- - class: EffectSingle
- sound: magic.zap_crack
- location: origin
- color_override: color
- effectlib:
- class: ConeEffect
- iterations: 10
- particle: redstone
- lengthGrow: 0.1
- radiusGrow: 0.003
- updateLocations: false
- updateDirections: false
class 表示效果的执行方式,似乎这一项已经过时了,作者现在建议使用 EffectLib 来实现粒子效果。
sound 表示执行时播放的音效,可以使用 sound_pitch 和 sound_volume 来进一步细化
location 表示执行的位置, origin表示释放者, target表示目标,both表示两者。
color_override 施法杖时有颜色数据的,每个施法杖的颜色都不一样,这一项就在告诉后面的 effectlib,粒子要使用施法杖的颜色,只对 redstone 和 mob_spell 这两种粒子有效。
effectlib 表示要执行的 EffectLib 特效
(在未安装EffectLib的情况下我依然能看到特效,Magic可能已经包含了该插件)
你可能不止希望在释放的时候制造特效,Magic也能满足你
- tick:
- - particle: redstone
- location: target
技能参数
- parameters:
- allow_max_range: true
- velocity: 200
- range: 24
- hitbox: true
- target_type: Damageable
- player_damage: 2
- entity_damage: 4
- target_breakables: 1
- cooldown: 1000
- reorient: false
- destructible: solid
- destructible_durability: 50
- break_durability: 2
- undo: 10000
爆头修正
- headshot_parameters:
- damage_multiplier: 1.5
消耗
技能消耗通过列表实现,通常使用mana
- costs:
- mana: 15
Magic支持玩家需要满足要求才能使用技能,当前只有对SkillAPI的
- requirements:
- - type: skillapi
- - skill: enchanting
放在最后的话
我最近正在研究此插件(毕竟是自己搬运插件开的坑),将一点点分享我对这个插件的研究成果,如果觉得对你有帮助,还请希望留下人气和金粒。