
Brapi
一个适用于 Fabric 模组的快速 UI 渲染库。支持圆角矩形、渐变、纹理和 SDF 文字。
查看大图Brapi
一个面向 Fabric 模组的 UI 渲染库。通过简洁的 API 支持圆角矩形、文本、渐变、纹理和九宫格精灵。未来计划支持 SVG 光栅化、阴影、更多文本选项、可切换的即时模式渲染和线条。
为什么
在 Minecraft 中制作好看的 UI 比想象中更困难。原版工具对于基础矩形来说效果不错,但一旦你想要平滑的圆角、圆形或美观的文本,就会遇到瓶颈。 通常你只有两个选择:
- 引入像 Skia 这样的大型图形库,这对新手来说很难配置
- 从头编写自己的着色器,这意味着要处理额外的设置和大多数模组作者宁愿跳过的样板代码
Brapi 提供了第三种选择。它是一个轻量级层,位于 Minecraft 现有渲染系统之上,让你无需痛苦就能获得漂亮的视觉效果。 主要优势:
- 零样板代码:无需繁琐设置。只需创建 BRender,添加绘制调用,然后刷新即可。
- 复杂形状简单化:用一行代码绘制圆形、轮廓和圆角矩形(甚至支持不同角半径)。
- 自动批处理与分层:Brapi 自动确定正确的绘制顺序,让你的 UI 看起来正确,无需你微观管理。
📦 设置
添加为依赖
将仓库和依赖添加到 build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
filter {
includeGroup "maven.modrinth"
}
}
}
dependencies {
modImplementation "maven.modrinth:brapi:0.25.3+${minecraft_version}+fabric" // 目前仅支持 Minecraft 版本 1.21.11
}
fabric.mod.json:
"depends": {
"brapi": "*"
}
在代码中使用
创建 BRender 实例,添加绘制调用,然后调用 flush(graphics) 提交。所有内容在帧结束时按图层排序渲染。
🎨 所有颜色均为 ARGB 格式:0xFFFF0000 = 不透明红色,0x80FF0000 = 50% 透明红色。
📐 坐标以 GuiScale 为单位:(100, 100) 在缩放 3 时 = (300, 300) 像素。
填充形状
bRender.rect(100, 100, 100, 100, 0xFFFF0000, layer);- 红色 100x100 矩形bRender.roundRect(100, 100, 100, 100, 0xFFFF0000, 10, layer);- 圆角矩形,半径 10pxbRender.roundRect(100, 100, 100, 100, 0xFFFF0000, 10, 5, layer);- 左上/右下 10px,右上/左下 5px 半径bRender.roundRect(100, 100, 100, 100, 0xFFFF0000, 10, 5, 20, 30, layer);- 各角独立半径bRender.circle(100, 100, 50, 0xFFFF0000, layer);- 圆形,半径 50px
渐变
所有填充形状都通过 Gradient 和 GradientDirection 支持渐变:
bRender.roundRect(100, 100, 100, 100, gradient, GradientDirection.LEFT_RIGHT, 10, layer);
方向:LEFT_RIGHT、TOP_BOTTOM、TOP_LEFT_BOTTOM_RIGHT、TOP_RIGHT_BOTTOM_LEFT
描边(仅轮廓)
bRender.stroke(100, 100, 100, 100, 0xFFFF0000, 2, layer);- 2px 轮廓矩形bRender.strokeRounded(100, 100, 100, 100, 0xFFFF0000, 10, 2, layer);- 2px 圆角轮廓,半径 10pxbRender.strokeRounded(100, 100, 100, 100, 0xFFFF0000, 10, 5, 2, layer);- 左上/右下 10px,右上/左下 5pxbRender.strokeRounded(100, 100, 100, 100, 0xFFFF0000, 10, 5, 20, 30, 2, layer);- 各角独立半径
填充 + 描边
bRender.roundRectStroked(100, 100, 100, 100, 0xFF0000FF, 0xFFFF0000, 10, 2, layer);- 蓝色填充,2px 红色描边
文本
bRender.drawText(font, "Hello!", 100, 100, 24, 0xFFFFFFFF, layer);- BFont 文本bRender.drawText(font, formattedCharSequence, 100, 100, 24, 0xFFFFFFFF, layer);- 带逐字符颜色的格式化文本
纹理
bRender.drawTexture(tex, 100, 100, 200, 150, 0xFFFFFFFF, linear, layer);- 拉伸填充bRender.drawTextureCropped(tex, 100, 100, 64, 64, 0, 0, 32, 32, 0xFFFFFFFF, linear, layer);- 裁剪bRender.drawTextureTiled(tex, 100, 100, 200, 200, 0xFFFFFFFF, linear, layer);- 平铺bRender.drawTexture9Slice(slice, 100, 100, 300, 200, 0xFFFFFFFF, linear, layer);- 九宫格
🔄 刷新
BRender r = new BRender();
r.roundRect(...);
r.flush(graphics); // 提交到绘制列表
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。