• 游客, 欢迎您来到九域资源社区,如果您是新人,请前往 论坛公告 板块查看新人引导教程 或者 点我打开
    如果您发现没有下载许可, 请先验证邮箱再进行下载;金锭可通过每日登陆或资源出售获取,目前没有其他渠道可获取。

[FishForgeCrafting] 锻造工艺——一款免费且配置极其灵活的锻造系统 支持1.7.10-1.20.1

LengFish

Lv.1 泥土
2025-02-03
2
0
0
钻石
0.00 钻石
金锭
270 金锭

前言


帖子的版本可能不是最新版,需要进群下载最新版
如果你有建议或者有什么不懂的问题可以加群,欢迎您的讨论

最新版请加群->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;
}



 
最后编辑: