Skip to content

Repository files navigation

TrMenu 生成器

⛏️ 为 Minecraft 服务器可视化创建 TrMenu 菜单配置

一个现代化的 Web 应用,用于可视化创建和编辑 Minecraft TrMenu 插件的菜单配置文件。无需手写 YAML,通过直观的图形界面即可完成所有配置。

说在前面

本项目由AI完全编写,我只做了review的操作和重新指导

相关的代码肯定是史,但是我似乎没看到有别的类似项目?

于是我就催AI帮我设计了这么一个网页,同时也是为了帮助别人~

🚀 快速开始

# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 访问 http://localhost:3000

✨ 功能特性

  • 🎨 可视化编辑 - 直观的图形界面,无需手写 YAML
  • 🖼️ Minecraft 图标 - 848种物品纹理,实时预览
  • 🎨 颜色选择器 - 16种颜色 + 6种格式,点击插入
  • 🎯 动作选择器 - 30+种动作类型,带示例和帮助
  • 📦 精灵图优化 - 单个请求加载所有图标(106KB)
  • 💾 实时预览 - 即时生成 YAML,一键复制/下载

📖 使用指南

1. 基础设置

配置菜单的基本属性:

  • 菜单标题:支持多行,带颜色选择器
  • 标题更新间隔:动态标题刷新频率
  • 最小点击延迟:防止误触
  • 玩家背包显示:是否显示玩家物品栏
  • 依赖变量扩展:PlaceholderAPI 支持
  • 绑定命令:打开菜单的命令列表

2. 布局设计

可视化设计菜单布局:

  • 点击格子选择按钮
  • 使用 # 创建装饰性边框
  • 使用空格创建空白位置
  • 查看实际物品图标预览
  • 动态添加/删除行

3. 按钮配置

创建和编辑菜单按钮:

  • 创建按钮:自定义按钮标识符(如 A、B、item1)
  • 选择材质:从 848 种 Minecraft 物品中选择
  • 编辑名称:支持颜色代码和格式
  • 编辑描述:多行描述,支持颜色
  • 物品属性:数量、附魔光效
  • 槽位配置:指定按钮位置
  • 点击动作:配置各种点击类型的动作

4. 高级选项

配置高级功能:

  • 菜单事件:打开/关闭时执行的动作
  • 定时任务:周期性执行的任务
  • 脚本编辑:JavaScript/Kether 脚本支持

5. 导出配置

获取最终配置:

  • 实时预览 YAML 格式
  • 一键复制到剪贴板
  • 下载为 .yml 文件

🎨 核心组件

颜色选择器

  • 16种 Minecraft 标准颜色(&0-&f)
  • 6种格式代码:粗体(&l)、斜体(&o)、删除线(&m)、下划线(&n)、随机(&k)、重置(&r)
  • 点击插入到光标位置
  • 实时预览效果

材质选择器

  • 848种 Minecraft 物品纹理
  • 按类别分组(方块、工具、装备、食物等)
  • 搜索功能
  • 分页加载(每页20个)

动作选择器

30+种 TrMenu 动作类型,分为6大类:

基础动作

  • command - 玩家执行命令
  • console - 控制台执行命令
  • op - 临时 OP 执行命令
  • message - 发送消息
  • broadcast - 全服广播
  • actionbar - 动作栏消息
  • title - 标题消息

菜单控制

  • close - 关闭菜单
  • open - 打开其他菜单
  • refresh - 刷新菜单

音效特效

  • sound - 播放音效
  • particle - 播放粒子效果

传送移动

  • teleport - 传送玩家
  • connect - 连接到其他服务器

条件延迟

  • delay - 延迟执行
  • condition - 条件判断
  • catch - 捕获错误

其他

  • js - JavaScript 脚本
  • kether - Kether 脚本
  • take - 扣除物品/金币
  • give - 给予物品/金币

📦 精灵图系统

本项目使用精灵图(Sprite Sheet)技术优化 Minecraft 物品纹理的加载性能。

为什么使用精灵图?

性能对比:

  • ❌ 旧方案:800+ 个独立请求,容易 404,加载慢
  • ✅ 新方案:1 个请求,稳定可靠,加载快

优势:

  • 只需 1 个 HTTP 请求(vs 800+ 个单独请求)
  • 文件大小仅 106KB
  • 加载速度快,适合 Vercel 部署
  • 避免触发带宽限制

技术细节:

  • 尺寸:512x432 像素
  • 格式:PNG(支持透明度)
  • 单个物品:16x16 像素
  • 每行物品数:32 个
  • 物品总数:848 个
  • 压缩级别:9(最高)

支持的纹理

  • ✅ 所有原版物品(剑、镐、食物等)
  • ✅ 所有原版方块(石头、木板、玻璃等)
  • ✅ 染色玻璃(16种颜色)
  • ✅ 染色玻璃板(16种颜色)
  • ✅ 特殊物品(盾牌、箱子、末影箱等)
  • ✅ 动画纹理第一帧(指南针、时钟、弩等)

重新生成精灵图

如果需要添加新的物品纹理或更新资源:

1. 准备原始资源

确保 public/minecraft_assets/ 目录包含 Minecraft 1.21.4 资源文件:

public/minecraft_assets/
  └── assets/
      └── minecraft/
          └── textures/
              ├── item/      # 物品纹理
              ├── block/     # 方块纹理
              └── entity/    # 实体纹理

2. 修复特殊纹理

运行脚本复制多纹理方块和特殊物品:

npm run fix-textures

这会处理:

  • 多纹理方块(如草方块、TNT、工作台等)
  • 特殊物品(如盾牌、箱子等)
  • 动画纹理(如指南针、时钟、弩等)

3. 生成精灵图

运行脚本生成新的精灵图:

npm run generate-sprite

输出:

  • public/minecraft-items-sprite.png - 更新的精灵图
  • public/minecraft-items-map.json - 更新的映射表

4. 验证

启动开发服务器并检查:

npm run dev

访问 http://localhost:3000 查看所有图标是否正常显示。

添加新物品

方法 1:从 block 文件夹复制

编辑 scripts/fix-special-items.js,在 commonBlocks 数组中添加方块名称:

const commonBlocks = [
  'stone',
  'grass_block',
  // 添加新方块
  'your_new_block',
];

方法 2:从其他文件夹复制

multiTextureBlocks 数组中添加映射:

const multiTextureBlocks = [
  { from: 'block/your_block_top.png', to: 'your_block.png' },
];

方法 3:直接放入 item 文件夹

将 16x16 PNG 文件直接放入:

public/minecraft_assets/assets/minecraft/textures/item/your_item.png

然后重新运行生成脚本。

🛠️ 脚本命令

# 开发
npm run dev              # 启动开发服务器(http://localhost:3000)
npm run build            # 生产构建
npm run start            # 启动生产服务器
npm run lint             # 代码检查



# 资源管理
# 请注意,此处的所有修复或相关操作需下载minecraft_assets并放入public文件夹
# 建议:访问 https://github.com/InventivetalentDev/minecraft-assets 下载文件

npm run fix-textures     # 修复特殊纹理(草方块、TNT等)
npm run generate-sprite  # 生成精灵图和映射表
npm run clean-assets     # 清理原始资源(可选,节省空间)

📦 构建部署

本地构建

# 生产构建
npm run build

# 启动生产服务器
npm run start

Vercel 部署

  1. 连接 GitHub 仓库
  2. Vercel 自动检测 Next.js 项目
  3. 配置:
    • Framework: Next.js
    • Build Command: npm run build
    • Output Directory: .next
  4. 点击部署

注意事项:

  • ✅ 必须上传 public/minecraft-items-sprite.pngpublic/minecraft-items-map.json
  • ❌ 不要上传 public/minecraft_assets/(已在 .gitignore)
  • ✅ 精灵图仅 106KB,完全适合 Vercel 免费计划

环境要求

  • Node.js 18+
  • npm 或 yarn

📁 项目结构

TrMenu-MenuGenerator/
├── app/                          # Next.js 应用目录
│   ├── globals.css              # 全局样式(Minecraft 风格)
│   ├── layout.tsx               # 根布局
│   └── page.tsx                 # 主页面(精灵图预加载)
├── components/                   # React 组件
│   ├── ActionSelector.tsx       # 动作选择器(30+种动作)
│   ├── AdvancedEditor.tsx       # 高级选项编辑器
│   ├── BasicSettings.tsx        # 基础设置
│   ├── ButtonEditor.tsx         # 按钮编辑器
│   ├── ButtonPicker.tsx         # 按钮选择器
│   ├── ColoredTextInput.tsx     # 彩色文本输入
│   ├── ColorPicker.tsx          # 颜色选择器(16色+6格式)
│   ├── LayoutEditor.tsx         # 布局编辑器(可视化网格)
│   ├── MaterialPicker.tsx       # 材质选择器(848种物品)
│   ├── MenuBuilder.tsx          # 菜单构建器(主组件)
│   ├── MinecraftSpriteIcon.tsx  # 精灵图图标组件
│   ├── SpriteLoadingIndicator.tsx # 加载指示器
│   └── YamlPreview.tsx          # YAML 预览
├── types/                        # TypeScript 类型定义
│   └── menu.ts                  # 菜单数据结构
├── scripts/                      # 工具脚本
│   ├── fix-special-items.js     # 修复特殊纹理
│   ├── generate-sprite.js       # 生成精灵图
│   └── clean-assets.js          # 清理原始资源
├── public/                       # 静态资源
│   ├── minecraft-items-sprite.png  # 精灵图(106KB)
│   ├── minecraft-items-map.json    # 坐标映射表
│   └── minecraft_assets/        # 原始资源(.gitignore)
├── .gitignore                    # Git 忽略配置
├── package.json                  # 项目配置
├── tsconfig.json                 # TypeScript 配置
├── tailwind.config.ts            # Tailwind CSS 配置
└── README.md                     # 本文件

🎯 技术栈

  • 框架: Next.js 14 + React 18
  • 语言: TypeScript
  • 样式: Tailwind CSS
  • 图像处理: Sharp
  • YAML 生成: js-yaml
  • 图标: lucide-react

🔍 故障排除

问题:某些图标不显示

解决方案:

  1. 检查 minecraft-items-map.json 中是否有该物品
  2. 确认物品 ID 使用小写(如 diamond_sword 而非 DIAMOND_SWORD
  3. 重新运行 npm run generate-sprite

问题:精灵图加载失败

解决方案:

  1. 检查浏览器控制台错误
  2. 确认文件路径正确:/minecraft-items-sprite.png
  3. 清除浏览器缓存并刷新

问题:需要添加自定义纹理

解决方案:

  1. 将 16x16 PNG 文件放入 public/minecraft_assets/assets/minecraft/textures/item/
  2. 文件名使用小写和下划线(如 custom_item.png
  3. 重新运行 npm run fix-texturesnpm run generate-sprite

问题:克隆项目后缺少原始资源

解决方案:

  1. 从 Minecraft 1.21.4 客户端提取资源
  2. 或从备份恢复 minecraft_assets 目录
  3. 运行生成脚本重新创建精灵图

📊 性能指标

  • 首次加载:< 2秒
  • 精灵图加载:< 500ms
  • 页面大小:< 500KB
  • HTTP 请求:< 10个
  • Lighthouse 分数:90+

🎓 相关资源

TrMenu 文档

技术文档

📝 待优化项

  • 添加更多预设模板
  • 支持导入现有 YAML 配置
  • 添加配置验证功能
  • 支持多语言界面
  • 添加撤销/重做功能
  • 支持拖拽排序按钮

📄 许可证

本项目仅供学习和个人使用。

🙏 致谢

  • TrMenu 插件作者
  • Minecraft 社区
  • Next.js 团队
  • 所有贡献者

版本: 1.0.0
Minecraft: 1.21.4
TrMenu: 3.x+
最后更新: 2026-01-31

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages