mc-gui · v1.20.1 · 2026-08-06 · sha256 339dc6717ff0a613
mc-gui v1.20.1A
Immutable. This exact content is served forever at /api/v1/blob/339dc6717ff0a613.
---
name: mc-gui
description: Fabric GUI/Screen 开发。Screen、HandledScreens、ScreenHandler。触发词:GUI、Screen、HandledScreens、ScreenHandler
platform: fabric
version: "1.20.1"
dependencies: []
mappings: yarn
---
# GUI 开发(Fabric 1.20.1)
## 快速开始
```java
// 服务端:ScreenHandler
public class MyScreenHandler extends ScreenHandler {
public MyScreenHandler(int syncId, PlayerInventory playerInventory) {
super(ModScreenHandlers.MY_SCREEN, syncId);
// ...
}
}
// 注册 ScreenHandler
private static final RegistrySupplier<ScreenHandlerType<MyScreenHandler>> MY_SCREEN =
Registry.register(
Registries.MENU,
new Identifier(MOD_ID, "my_screen"),
new ScreenHandlerType<>(MyScreenHandler::new)
);
// 客户端:Screen
public class MyScreen extends Screen {
public MyScreen(Text title) {
super(title);
}
@Override
protected void init() {
addDrawableChild(ButtonWidget.builder(Text.literal("OK"),
btn -> this.close()).dimensions(width/2-50, height/2, 100, 20).build());
}
}
// 客户端:注册 Screen
public class ExampleModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
HandledScreens.register(MY_SCREEN.get(), MyScreen::new);
}
}
```
## Decision: 选择 GUI 类型
```
IF 简单界面(按钮、文本)
→ Screen + TextFieldWidget
IF 容器型界面(箱子)
→ ScreenHandler + HandledScreens
IF 需要服务端数据同步
→ TypedScreenHandlerFactory
```
## 常见错误
- ❌在 `onInitialize()` 中注册 `HandledScreens` — 服务端崩溃
- ❌在 Screen 中直接修改服务端数据 — 通过 ScreenHandler 同步
- ❌忘记 `super.render()` — 背景和子元素不渲染
## 扩展点
| 配合 Skill | 协作说明 |
|-----------|---------|
| `mc-registry` | ScreenHandler 通过 Registry.register() 注册 |
| `mc-block` | 方块实体提供 ScreenHandler |
| `mc-networking` | 网络包用于打开/关闭 GUI |