API 参考 / 渲染、资源与语言
LayerOverride
用途:声明「某一层的默认绘制不要画」——宿主跳过该层默认内容,但层的 RenderEvent.Pre / .Post 照常投递,你在监听器里自绘替换内容。
完整签名
java
public interface LayerOverride {
RenderLayer layer();
}layer()
签名:
java
RenderLayer layer();行为:返回要替换默认绘制的层。
- 支持:
BACKGROUND(跳过模组背景渲染器链)、FULLSCREEN(跳过模组滤镜链)、JUDGE_FX(跳过打击特效绘制)、HUD(跳过整个标准 HUD 块;结果弹窗与暂停对话框不在此层); - 不支持:
WORLD/NOTES/OVERLAY。注册这些层会在装配期限频告警并丢弃,不会静默生效; - 多模组声明同一层是合法的:默认内容只跳过一次,各模组的替换内容按各自监听器顺序绘制。
注册入口:ctx.registries().layerOverrides()(onPreInit 内)。
示例:替换 HUD 层为极简样式
java
// 注册替换声明
ctx.registries().layerOverrides().register(
RegistryKey.of("mymod", "minimal_hud", LayerOverride.class),
() -> RenderLayer.HUD);
// 然后自己画 HUD
bus.subscribe(RenderEvent.Pre.class, EventPriority.NORMAL, e -> {
if (e.context().layer() != RenderLayer.HUD) return;
RenderCanvas c = e.context().canvas();
c.save();
c.setColor(java.awt.Color.WHITE);
c.fillRect(20, 20, 200, 2); // 极简进度条
c.restore();
});