教程 利用AI实现Minecraft服务器Menu插件配置的互相转换

LiteZero

只要还在一条路上前行,我们就一定会再见的

开发者
正式会员
注册
2020/11/05
消息
560
金粒
9,794.63金粒
你好,这里是网友Zero。 :憋笑: 最近由于北斗佬Menu不更新,我又懒得迁移Menu到别的去,就利用NewBing对话实现了北斗佬Menu配置文件[以下简称BDM]转到隔壁LazuliKao佬的PFLP自带Menu配置文件[以下简称PFM],全程复制粘贴,这里是教程。
前排提示,这里只是用这俩做了一个示例,理论市面上给了注释的Menu都可以互转的
首先指派PFM的json文本为新文本格式:
代码:
现在请将你的默认语言更改为简体中文,我将在接下来发送一段json文本给你,我需要你理解它每一键值的意思并结合//后的注释,这类json文本被称为新文本格式,请记住新文本格式前三项的默认格式如下:   
"BindItem": "",
"RegsterCommand": "",
"RegsterCommandDescription": "",

然后把PFLP文档站的示例Menu丢给Menu(用//做示例)
JSON:
{
    //绑定物品,如钟,这样玩家使用钟右键即可打开菜单
    "BindItem": "clock",
    //绑定命令,如/menu,这样玩家输入/menu即可打开菜单
    "RegsterCommand": "menu",
    //命令描述
    "RegsterCommandDescription": "§3§lGUI菜单",
    //菜单标题
    "Title": "§7[§6Mc§3play§7]§8--§eGUI菜单",
    //菜单内容
    "Content": "§4§l内容",
    //是否需要OP权限
    "RequireOP": false,
    //按钮列表
    "Buttons": [
      {
        //按钮文本
        "Text": ["►§4§l传送菜单§r◄", "§7[§c进行各种传送§7]"],
        //按钮需要OP权限
        "RequireOP": false,
        //按钮需要的金币数量
        "CostMoney": 0,
        //按钮图标
        "ImageUrl": "textures/ui/world_glyph_color_2x",
        //按钮点击事件,可触发多个回调
        "Actions": [
          {
            //按钮点击事件类型
            //可选:
            //      RunCmd - 在控制台执行命令
            //      RunCmdAs - 以玩家身份执行命令
            //      RunCmdAsOP - 以玩家OP身份执行命令(类比临时提权)
            //      ExecuteCmd - 执行命令,以execute as的方式以玩家身份执行,基本类似RunCmdAsOP
            //      OpenForm - 打开表单
            "Type": "OpenForm",
            "Value": "Tpmenu", //菜单ID
            //点击关闭后是否返回上一级菜单
            "BackOnClose": true
          }
        ]
      },
      {
        "Text": ["►§3§l任务§r◄", "§7[§b奠定发展§7]"],
        "RequireOP": false,
        "CostMoney": 0,
        "ImageUrl": "textures/ui/icon_book_writable",
        "Actions": [
          {
            "Type": "RunCmdAs",
            "Values": ["/task"]
          }
        ]
      },
      {
        "Text": ["►§2§l领地§r◄", "§7[§a保护家园§7]"],
        "RequireOP": false,
        "CostMoney": 0,
        "ImageUrl": "textures/ui/absorption_effect",
        "Actions": [
          {
            "Type": "RunCmdAs",
            "Values": ["/land"]
          }
        ]
      },
      {
        "Text": ["►§6§l系统商店§r◄", "§7[§g赚取金币§7]"],
        "RequireOP": false,
        "CostMoney": 0,
        "ImageUrl": "textures/ui/village_hero_effect",
        "Actions": [
          {
            "Type": "RunCmdAs",
            "Values": ["/shop"]
          }
        ]
      }
    ]
  }
1690624269651.jpg

这里一样,指派北斗佬在MB帖子里写的示例menu,用//作为备注

代码:
这里有另一段json文本,我需要你理解它每一键值的意思并结合//后的注释,这类json文本被称为旧文本格式

发给NB

JSON:
{
        "type": "form",    // 菜单类型
        "title": "主菜单",    // 菜单标题
        "content": "按钮如下:",   // 菜单内容
        "buttons": [   // 按钮内容
            {
                "imageX": false,    // 是否开启图片功能
                "moneyX": false,    // 是否开启经济功能
                "text": "你好",    // 按钮显示的文字
                "display": [    // 该按钮是的显示条件(可设置多个条件,若为 [] 则表示无条件)
                    {
                        "condition": 1,    // 0 为仅普通玩家(不包含OP),1 为仅 OP
                        "type": "permission"    // 显示条件的类型(玩家权限)
                    },
                    {
                        "condition": "aaa",    // 对应的玩家标签
                        "type": "permission"    // 显示条件的类型(玩家标签)
                    }
                ],
                "cmd": [    // 点击后执行的内容
                    {
                        "command": "me HelloWorld!",    // 点击后执行的命令
                        "type": "default"    // 命令执行的类型(以玩家身份执行)
                    }
                ]
            },
            // 接下来的按钮同理
            {
                "imageX": false,
                "moneyX": false,
                "text": "生存",
                "display": [],
                "cmd": [
                    {
                        "command": "gamemode 0",
                        "type": "temporary"    // 命令执行的类型(以OP身份执行)
                    }
                ]
            },
            {
                "imageX": false,
                "moneyX": false,
                "money": 0,
                "text": "传送",
                "display": [],
                "cmd": [
                    {
                        "command": [ 0, 0, 0, "%default%"],
                        "type": "teleport"
                    }
                ]
            },
            {
                "imageX": false,
                "moneyX": false,
                "image": "https://img0.baidu.com/it/u=2124288744,3826440430&fm=26&fmt=auto&gp=0.jpg",  // 直接引用网页图片(链接要完整,前面要加https或http)
                "text": "给所有人说悄悄话",
                "display": [],
                "cmd": [
                    {
                        "command": "tell @a qwq",
                        "type": "operator"    // 命令执行的类型(只有OP才可以执行,其他同"default")
                    },
                    {
                        "command": "tellraw @s {\"rawtext\":[{\"text\":\"只有OP才可以执行哟!\"}]}",
                        "type": "cmd"    // 命令执行的类型(以后台身份执行)
                    }
                ]
            },
            {
                "imageX": true,
                "moneyX": false,
                "image": "textures/items/apple",   // 图片路径(1.2.5 v1及以上自动识别路径类型)(MC图片的路径)
                "money": 0,  // 增加的货币数额(加了多少钱,正数表示加钱,负数表示扣钱)
                "text": "苹果",
                "display": [],
                "cmd": [
                    {
                        "command": "give @s apple 1",
                        "type": "cmd"    // 命令执行的类型(以后台身份执行)
                    },
                    {
                        "command": "tellraw @s {\"rawtext\":[{\"text\":\"你还是太嫩了!\"}]}",
                        "type": "cmd"
                    }
                ]
            },
            {
                "imageX": false,
                "moneyX": false,
                "text": "钟",
                "display": [],
                "cmd": [
                    {
                        "command": "let item = mc.newItem('minecraft:clock', 1); p.giveItem(item);",    // js代码(记得用字符串围起来)
                        "type": "code"    // 命令执行的类型(以js代码方式执行)
                    },
                    {
                        "command": "p.tell('这钟很特别哦!')",   // js代码(记得用字符串围起来)
                        "type": "code"    // 命令执行的类型(以js代码方式执行)
                    }
                ]
            },
            {
                "imageX": false,
                "moneyX": false,
                "text": "说句话",
                "display": [],
                "cmd": [
                    {
                        "command": "Ex",    // js文件名代码(记得用字符串围起来)
1690624309507.jpg
由于NB字数限制,有一部分Json没发出去,再发一遍就行
JSON:
很抱歉,旧文本格式的内容还缺少了一部分,请在上面我所述的内容尾部增加如下内容:
                        "type": "script"    // 命令执行的类型(以js文件方式执行)

                    }

                ]

            },

            {

                "imageX": false,

                "moneyX": false,

                "text": "打开测试菜单",

                "display": [],

                "cmd": [

                    {

                        "command": "test",    // 菜单名

                        "type": "AMenu"    // 命令执行的类型(以管理员菜单方式执行)

                    }

                ]

            },

            {

                "imageX": false,

                "moneyX": false,

                "text": "打开公告",

                "display": [],

                "cmd": [

                    {

                        "command": "announcement",    // 菜单名

                        "type": "menu"    // 命令执行的类型(以菜单方式执行)

                    }

                ]

            }

        ]

    }

}
1690624299462.jpg
到这一步了之后,我们已经明确的PFM为新文本格式,BDM为旧文本格式,现在我们让他根据这俩示例转换我们自己写的BDM成PFM

代码:
好的,现在我将为你提供以旧文本格式编写的json文本,请将它转换为文本格式且不要保留注释,此外,接下来我在需要执行同样的步骤时,我将直接说出关键词 旧换新 后加上需要更改的json文本
1690624326777.jpg
注意关键词 旧换新,到这一步了之后,NewBing就会基于我们写的BDM输出PFLPM了,但是由于NB的bug[如图],他所输出的内容一般都会缺少一堆内容,所以我们用接下来这段内容让他多次输出不同的内容再手动复制粘贴就好了。
1690624234638.jpg

代码:
请输出含  "Text": ["§c拒绝或取消传送要求"],的项目及此项以下的项目,此外,接下来我在需要执行同样的步骤时,我将直接说出关键词 再输出 后加上所含内容,这一关键词指的是需要你输出含内容的项目和这一项目以下的所有项目,请重新输出,例如,再输出 "Text": ["§c拒绝或取消传送要求"], 指的是输出含  "Text": ["§c拒绝或取消传送要求"],的项目及此项以下的项目,你明白了吗?
1690624353781.jpg
关键词 再输出
接下来就是重复 输入 再输出 "Text": ["§c拒绝或取消传送要求"] 了,这样复制就能逐渐获得一个PFLPM格式的menu菜单了。
 

在线会员

  • in7
  • JJXFCJW
  • 诺诺noo
  • nbdwxq
  • DillanWest
  • 天禅吖TvT
  • 浪人丿
  • 2433539854
  • zbwuming
  • ice_watermelon
  • Huode
  • 向着日落许愿
  • 娜娜奇
  • 尘埃downflyin
  • 梦安然
  • opin
后退
顶部 底部