前言
帖子的版本可能不是最新版,需要进群下载最新版
如果你有建议或者有什么不懂的问题可以加群,欢迎您的讨论
最新版请加群->QQ群:516656715
简介
可视化锻造系统,支持自定义配方、材料品质、附魔继承。
内置JS引擎,1.7.10到1.20.1全版本兼容。
具体功能请查看图纸配置
命令
代码:
/ff help 帮助
/ff open (玩家名称) 打开锻造台(包含图纸,玩家名称选填,默认为本人)
/ff remove (玩家名称) 移除某个玩家的数据
/ff give (图纸) (玩家名称(可选)) 给予图纸
/ff forge (图纸) (玩家名称(可选)) 直接锻造出物品
/ff reload 重载配置文件
配置文件
config.yml
代码:
###########################################################
# FishForgeCrafting
# 作者: LengFish
# QQ:1836503502
###########################################################
# 插件显示前缀
plugin_name: "§f[§7鱼之锻造§f]"
debug: false
# 数据库设置
mysql:
# 是否启用数据库
enable: false
# 数据库地址
host: localhost
# 数据库端口号
port: 3306
# 数据库名称 (也会作为数据库表名)
database: fishforge
# 数据库用户名
username: root
# 数据库密码
password: admin
# 高级设置
# 最大线程池连接数
maxPoolSize: 20
# 最小空闲连接数
minIdle: 3
# 连接超时时间 (ms)
connectionTimeout: 30000
# 空闲连接存活时间 (ms)
idleTimeout: 600000
# 连接最大存活时间 (ms)
maxLifetime: 1800000
# 界面
# 图纸界面
blueprints_interface:
# 大小
size: 54
# 占位物品
perch:
# 展示物品
material: STAINED_GLASS_PANE
# 需要占位的格子
slots: [ 45,46,47,48,49,50,51,52,53 ]
display: "§8被封印的格子"
lore:
- "§r"
- "§7铁匠流传下来的力量使这个格子封印了..."
- "§r"
# 下一页
next_page:
material: NETHER_STAR
slots: [ 51 ]
display: "§8下一页"
lore:
- "§r"
- "§7铁匠流传下来的力量增强了..."
- "§r"
# 上一页
last_page:
material: NETHER_STAR
slots: [ 47 ]
display: "§8上一页"
lore:
- "§r"
- "§7铁匠流传下来的力量消逝了..."
- "§r"
# 锻造界面
forge_interface:
# 大小
size: 27
# 开始锻造
forge:
# 展示物品
material: ANVIL
# 监听的格子
slots: [22]
display: "§e开始锻造..."
lore:
- "§r"
- "§c(需要将材料放置容器内)"
- "§c通过传承的力量来进行锻造..."
- "§r"
# 占位
perch:
# 展示物品
material: STAINED_GLASS_PANE
# 需要占位的格子
slots: [ 18,19,20,21,22,23,24,25,26 ]
display: "§8被封印的格子"
lore:
- "§r"
- "§7铁匠流传下来的力量使这个格子封印了..."
- "§r"
图纸配置
example1.yml
代码:
###########################################################
# 这里是图纸的配置文件
# 如何确定一个物品是否是图纸,没有严格的判断
# 确定一个物品是否是图纸,会判断这个物品的display和lore
# 所以为了避免非图纸物品当作图纸物品使用,请一定要检查您的物品名称是否唯一
###########################################################
# 示例一
勇者之剑:
blueprint_setting:
# 图纸材质,这个不会被匹配,仅用于获取图纸时的材质
id: "BOOK"
# 当玩家手上的物品名称为 "自定义武器图纸1" 或是 "§a自定义武器图纸1" 和"&a自定义武器图纸1" 请一定要对应!
# 例如,物品名称为 "自定义武器图纸1" 那么就不代表 "§a自定义武器图纸1" 是一件物品
# 物品名称为 "自定义武器图纸1" 就是物品名称为 "自定义武器图纸1" 的物品, 它不能代表 物品名称为 "§a自定义武器图纸1" 的物品!
match_display: "§a勇者之剑图纸"
# 需要匹配的lore
match_lore:
- "§e这是勇者之剑图纸的lore"
- "§e此lore会被记录到GUI"
# 需要的材料(仅匹配lore和数量)
material:
"材料一":
# 材料一lore
match_lore: "乌木棍"
# 所需数量 (注意!不要超过64)
amount: 1
"材料二":
match_lore: "赤铁"
amount: 4
# 执行命令 (可以删除此项)
# 成功后触发
commands:
- "console:say 玩家 %player_name% 锻造成功了,让我们恭喜他!"
- "op:say 我以OP的身份说我锻造成功了"
- "say 我以普通玩家的身份说我锻造成功了"
# 锻造成品
result:
display: "§a勇者之剑"
material: "IRON_SWORD"
options:
unbreakable: true
enchantments:
# type -> 附魔类型
# level -> 附魔等级
# ignore(可选,默认为忽略) -> 是否忽略等级限制
- "type=FIRE_ASPECT;level=2;ignore=false"
- "type=DAMAGE_ALL;level=10"
lore:
- "§r"
- "§a这是自定义武器的lore"
- "§a伤害: <random_vault> - <random_vault_1>"
- "§a锻造师: %player_name%"
- "§a品质: <quality_level>"
- "§e装备类型: 副手"
- "§r"
# 品质
quality:
"普通":
# 权重,权重越大概率越大
weight: 8
# 固定属性,此项的属性必定会被选中
base_attributes:
# ia模型 (如果没有则填0,可选)
# 如果你需要使用ia模型功能,请务必安装 NBTAPI插件
CustomModelData: 0
# 在上方 lore 中找到 <quality_level> 字段并替换词条
quality_level:
# 模式
# append_string 将 context 的内容直接替换字段
mode: "append_string"
context: "§8劣质"
random_vault:
# random_vault 将 context 的数字区间随机选择一个数值并替换字段
mode: "random_vault"
context: "20-40"
random_vault_1:
mode: "random_vault"
context: "40-60"
"史诗":
weight: 5
base_attributes:
CustomModelData: 0
quality_level:
mode: "append_string"
context:
- "§d优良"
- "§c这是一把神级武器!"
random_vault:
mode: "random_vault"
context: "60-80"
random_vault_1:
mode: "random_vault"
context: "80-100"
example2.yml
代码:
魔法棒:
blueprint_setting:
id: "BOOK"
match_display: "§a魔法棒图纸"
match_lore:
- "§e这是魔法棒图纸的lore"
- "§e此lore会被记录到GUI"
material:
"材料一":
match_lore: "乌木棍"
amount: 1
result:
display: "§d魔法棒"
material: "STICK"
lore:
- "§r"
- "§a这是自定义武器的lore"
- "§a持有技能:"
- "<skill1>"
- "§a装备类型: 主手"
- "§r"
quality:
"普通":
weight: 8
skill1:
# random_append_string 将从 context 的内容继续随机抽取词条进行替换字段
mode: "random_append_string"
context:
"技能一":
weight: 5
context: "§d右键释放火球攻击"
"技能二":
weight: 5
context:
- "§d右键释放冰球攻击"
- "§d左键释放极寒领域"
example3.yml
代码:
英雄宝剑:
blueprint_setting:
id: "BOOK"
match_display: "§a英雄宝剑图纸3"
match_lore:
- "§e这是英雄宝剑图纸的lore"
- "§e此lore会被记录到GUI"
material:
"材料一":
match_lore: "勇者徽章"
amount: 7
result:
display: "§e英雄宝剑"
material: "DIAMOND_SWORD"
lore:
- "§r"
- "§a这是自定义武器的lore"
- "§a脚本1输出: <script_1>"
- "§a脚本2输出: <script_2>"
- "§a脚本3输出: <script_3>"
- "§a装备类型: 主手"
- "§r"
quality:
"普通":
weight: 8
script_1:
# script_function 将从 context 中使用目标脚本进行运算
mode: "script_function"
context: "name=example1.js;result=example1()"
script_2:
mode: "script_function"
# name=js名字,args=参数数量,arg1代表第一个参数(根据args的数量来进行递增,如args=N,arg1,arg2,arg3,...,argN),它可以是一个固定值也可以是一个PAPI变量,result=js返回的数值
# 值得注意的是,在字符串中不允许出现空格或者其他占位符,否则会导致意外错误!
# 并且需要遵循以下格式
context: "name=example2.js;args=2;arg1=20;arg2=30;result=example2()"
script_3:
mode: "script_function"
context: "name=example3.js;args=1;arg1=%player_ping%;result=example3()"
JS脚本示例(结合图纸配置理解效果更佳)
example1.yml
代码:
function example1() {
return 20;
}
example2.yml
代码:
function example2(arg1, arg2) {
return arg1 + arg2;
}
example3.yml
代码:
function example3(papiArg1) {
return papiArg1;
}
最后编辑: