创建一个 AzureFlow 物品
本节将以最主流的 RPG 物品为例,引导用户自己开发一个 RPG 武器
AzureFlow 物品库支持多种物品文件的格式及类型,如纯文本型(*.yml
,*.json
等),纯脚本型(*.js
,*.groovy
等)等。
创建并生成物品文件
首先,输入/af create ElniaSword
命令,在 items
文件夹下会自动创建一个配置文件ElniaSword.yml
,(如果没有,那么可以手动创建文件并复制粘贴内容到文件即可)随后输入指令/af reload
,就可以把服务器加载到服务器中,同时会发现配置文件如下所示:
internal:
# 这是 AzureFlow 自动生成的该物品的唯一标识
# 请不要修改或删除它,避免出现不必要的问题与未知的错误
uuid: 48047a9d-34a4-e372-3f19-9f7f958d2699
alias: [ElniaSword]
此时,该物品就已经被 AzureFlow 加载到了服务器中,输入指令af get ElniaSword
就可以获取到该物品,物品如下图所示:

如图所示,这个物品的名字是 UNKNOWN
,材质是石头,这是 AzureFlow 插件的默认物品样式。
但是,这肯定不是我们想要制作的物品的最终样子,接下来,让我们正式开始配置这个物品。
设置物品样式
我们可以通过 display
配置项 设置物品样式。
首先,指定该物品的名字name
为艾尔尼亚之剑,并且为其添加等级后缀,指定等级为 10。
由于这里要制作的物品是一把”剑“,所以设置其材质material
为钻石剑DIAMOND_SWORD
(该材质名基于 Bukkit Material
,可以通过查阅文档获得)。
基于该物品,大致编写相关描述lore
如下:
display:
# ..
lore:
- ' &f物品描述:'
- ' '
- ' &7&o传闻挥舞可斩断一切黑暗与邪祟'
- ' &7&o具有让世间万物&e&o苏醒&7&o的能力..'
- ' '
基于上述思路,编写相应配置如下:
display:
name: ' &f艾尔尼亚之剑 &eLv.10'
material: DIAMOND_SWORD
lore:
- ' '
- ' &f物品描述:'
- ' '
- ' &7&o传闻挥舞可斩断一切黑暗与邪祟'
- ' &7&o具有让世间万物&e&o苏醒&7&o的能力..'
- ' '
随后,重载配置文件,重新获取该物品,就可以获取到物品如下图所示:

至此,物品的样式初步设置完成,我们已经完成了静态物品的编写。
但其中还有很多问题以及功能没有实现,例如等级需要随机数值,以及一些交互性操作,在稍后的内容中会介绍到。
引入所需模块
因为我们在本节中制作的物品可能会存在随机或时间的功能,即要制作一个动态的物品,那么就需要引入一些外置的模块来实现这些功能,引入模块使用的是 import
配置项。
首先,引入随机和时间模块,引用代码如下:
import:
module:
random: random
time: time
至此,就成功引用了随机和时间模块。随后,便可以该物品的配置文件中,使用随机和时间模块,模块的使用方法遵循EL表达式语法,大致语法即${you expression here}
,当仅使用单变量时,我们可以使用简化的语法,即$variable
直接使用,完整内容请查看章节 高级物品配置#表达式
了解了如何使用模块后,我们便可以直接上手。此处,我们指定物品的等级为随机模块生成的范围在1~100的随机数,编写配置如下:
display:
name: ' &f艾尔尼亚之剑 &eLv.${random.int(1, 100)}'
模块调用成功,此时我们可以多次获取到该物品,看看是否实现效果,获取三次物品如下图所示:

至此,完成了随机模块的调用,但还存在一些问题,在后面的内容中我们会提出并解决。
使用预定义数据
在上文中,我们通过引入随机模块,实现了数据的随机化,即随机等级,但是当我们如果要在其他地方,如lore
中引用这个等级的随机数值,就会发现需要编写多次${random.int(1, 100)}
,而且最为致命的是相当于会执行多次random.int(1, 100)
,即多个值不一样,例如如下配置文件:
display:
name: ' &f艾尔尼亚之剑 &eLv.${random.int(1, 100)}'
material: DIAMOND_SWORD
lore:
- ' '
- ' &f物品属性:'
- ' '
- ' &f等级: &e${random.int(1, 100)}'
- ' '
- ' &f物品描述:'
- ' '
- ' &7&o传闻挥舞可斩断一切黑暗与邪祟'
- ' &7&o具有让世间万物&e&o苏醒&7&o的能力..'
- ' '
输入指令af get 48047a9d-34a4-e372-3f19-9f7f958d2699
获取该物品,如下图所示:

不难发现,物品名中的等级与lore
的等级不一致,原因就如上文所说。
要解决这个问题,就需要使用到data
配置项,以下将介绍如何使用数据配置项来保存后面要使用到的一些数据。
首先,声明一个等级数据level
,其值与之前的方法一致,通过随机模块产生,配置如下:
data:
level: 'random.int(1, 100)'
定义完等级数据后,我们就可以直接在样式中使用该数据,由于只需要直接引用这个数据,那就可以使用EL表达式的简写形式,即$level
,方法如下:
display:
name: ' &f艾尔尼亚之剑 &eLv.${level}'
material: DIAMOND_SWORD
lore:
- ' '
- ' &f物品属性:'
- ' '
- ' &f等级: &e${level}'
- ' '
- ' &f物品描述:'
- ' '
- ' &7&o传闻挥舞可斩断一切黑暗与邪祟'
- ' &7&o具有让世间万物&e&o苏醒&7&o的能力..'
- ' '
修改完后保存文件,重载插件并重新获取该物品,得到物品如下:

至此,该物品的配置到此结束。
小结
本章,我们通过尝试制作一个RPG物品,学习了import
、data
、display
配置项。
Last updated