信息屏显示与渲染
基本信息
| 属性 | 值 |
|---|---|
| 屏幕模型 | panel/Screen.java(Screen,Screen.java:11) |
| 屏幕管理器 | panel/ScreenManager.java(ScreenManager,ScreenManager.java:21) |
| 卡片包装实现 | panel/CardWrapperImpl.java |
| 设置包装实现 | panel/CardSettingsWrapperImpl.java |
| GUI 类数量 | 16(ls gui/*.java | wc -l) |
| 自定义控件 | 12 个(ls gui/controls/*.java | wc -l) |
| 配置界面 | gui/ConfigGui.java |
Screen:屏幕区域
Screen 用两个三维坐标框描述一块屏幕的覆盖范围(Screen.java:11-23):
| 字段 | 含义 |
|---|---|
minX / minY / minZ |
屏幕包围盒最小角 |
maxX / maxY / maxZ |
屏幕包围盒最大角 |
coreX / coreY / coreZ |
所属核心面板坐标 |
cachedCore |
缓存的核心面板 TileEntity |
powered |
是否通电 |
getCore(IBlockAccess) 带缓存失效逻辑:当缓存为 null、已失效(isInvalid())或世界对象不同时,重新从坐标取 TileEntity 并重新缓存(Screen.java:25-33)。setCore 在记录核心 TileEntity 的同时把它的坐标复制进三个 coreX/Y/Z 字段(Screen.java:39-43),这样即使核心方块被卸载,也能靠坐标重新定位。
ScreenManager:屏幕注册表
ScreenManager 以世界为维度维护所有已加载的屏幕(getWorldKey(World),ScreenManager.java:31;getScreens(),ScreenManager.java:41)。主要方法:
| 方法 | 作用 | 引用 |
|---|---|---|
loadScreen(TileEntityInfoPanel) |
为面板加载屏幕 | ScreenManager.java:105 |
loadScreen(World, coreX, coreY, coreZ) |
按坐标加载屏幕 | ScreenManager.java:133 |
registerInfoPanel(TileEntityInfoPanel) |
注册面板 | ScreenManager.java:188 |
registerInfoPanelExtender(TileEntityInfoPanelExtender) |
注册扩展 | ScreenManager.java:206 |
unregisterScreenPart(TileEntity) |
注销面板或扩展 | ScreenManager.java:165 |
clearWorld(World) |
卸载世界时清理 | ScreenManager.java:256 |
GUI 类
gui/ 下 16 个类,按用途分组:
| 组 | 类 |
|---|---|
| 面板 | GuiInfoPanel、GuiAdvancedInfoPanel、GuiRemoteMonitor、GuiPanelSlope |
| 告警 | GuiHowlerAlarm、GuiIndustrialAlarm |
| 监测 | GuiIC2Thermo、GuiRemoteThermo |
| 计数器 | GuiEnergyCounter、GuiAverageCounter |
| 触发器 | GuiRangeTrigger |
| 卡片 | GuiCardText、GuiScreenColor、GuiTextArea |
| 配置 | GuiFactory、ConfigGui |
ConfigGui 继承 Forge 的 GuiConfig(gui/ConfigGui.java:10),由 @Mod(guiFactory = "shedar.mods.ic2.nuclearcontrol.gui.GuiFactory")(IC2NuclearControl.java:62)声明,在游戏选项界面中提供本模组配置项的图形编辑入口。
gui/controls/ 下 12 个自定义控件:
| 控件 | 用途 |
|---|---|
CompactButton、SmallGuiButton |
按钮 |
GuiToggleButton |
开关按钮 |
IconButton |
图标按钮 |
GuiScrollableList |
可滚动列表 |
GuiHowlerAlarmListBox |
警报音选择列表 |
GuiHowlerAlarmSlider |
告警音量滑块 |
GuiRemoteThermoSlider |
远程温度监控滑块 |
GuiInfoPanelCheckBox |
面板复选框 |
GuiInfoPanelShowLabels |
显示标签开关 |
GuiRangeTriggerInvertRedstone |
范围触发器反转红石开关 |
GuiThermoInvertRedstone |
温度监控器反转红石开关 |
HTTP 网页传感器
网页传感器走独立的异步通道,实现在 panel/http/:
| 类 | 作用 | 引用 |
|---|---|---|
HttpCardSender |
单例请求调度器 | panel/http/HttpCardSender.java:23-27 |
Request |
实现 Runnable 的单次 HTTP 请求 |
panel/http/Request.java:21 |
HttpCardSender 用 ConcurrentLinkedQueue<Long> 维护可用的请求 ID 池(HttpCardSender.java:31),提供 requestId()(取 ID)、send()(发送队列)、add(cardData, cardType, id)(入队)三个方法(HttpCardSender.java:42,53,64)。Request 构造时接收 URL 与未发送数据表 ConcurrentHashMap<Long, JsonNodeBuilder>(Request.java:29),在 run() 中执行(Request.java:48)—— 即使用独立线程池而非游戏主线程,避免阻塞渲染。