API 参考 / 事件系统
RenderEvent
宿主在每个渲染层插槽的前后各投递一次。Pre 在该层内容绘制之前(模组内容画在该层之下),Post 在之后(画在该层之上)。宿主对 7 层都投递 Pre 与 Post,每帧共 14 次。
方法速览
| 方法 | 用途 |
|---|---|
layer() | 本事件对应的渲染层 |
context() | 本次回调的渲染上下文(绘制入口) |
layer()
java
public final RenderLayer layer();行为:返回本事件对应的层。自底向上依次为 BACKGROUND → WORLD → NOTES → JUDGE_FX → HUD → OVERLAY → FULLSCREEN。
context()
java
public final RenderContext context();行为:返回渲染上下文。用 context().canvas() 绘制,context().matrices() 做 3D 变换,width() / height() / partialTick() 取本层逻辑尺寸与帧插值参数。上下文只在回调期间有效,不得缓存;layer() 与当前层一致。
示例
java
ctx.eventBus().subscribe(RenderEvent.Post.class, EventPriority.LOW, event -> {
if (event.layer() != RenderLayer.HUD) {
return;
}
RenderCanvas canvas = event.context().canvas();
canvas.setColor(new Color(0xFFFFFF));
canvas.fillRect(40, 40, 120, 8);
});完整签名
java
public abstract class RenderEvent extends Event {
protected RenderEvent(RenderLayer layer, RenderContext context);
public final RenderLayer layer();
public final RenderContext context();
public static final class Pre extends RenderEvent {
public Pre(RenderLayer layer, RenderContext context);
}
public static final class Post extends RenderEvent {
public Post(RenderLayer layer, RenderContext context);
}
}性能:每帧 14 次,监听器必须极轻——禁止分配大对象、禁止阻塞 IO、禁止在渲染回调里做文件或网络访问。
稳定性:2.0 起冻结,2.x 内只增不破。