Widget System

基本信息

属性 值
枚举 WidgetType(surface/WidgetType.java)
图元种类 12
源码规模 surface/ 目录约 30 个文件,占全模组 98 个 .java 的近三分之一

OCGlasses 的 98 个 Java 文件中,绝大部分不是方块/物品逻辑,而是这套图元渲染框架——它让 Lua 脚本能在玩家眼前绘制 2D 与 3D 图元。

12 种图元

WidgetType 枚举把类型名映射到实现类:

枚举值 实现类 维度
SQUARE SquareWidget 2D(face)
TRIANGLE TriangleWidget 2D
DOT Dot 2D
TEXT Text 2D
QUAD Quad 2D
ITEMICON ItemIcon 2D
CUBE3D Cube3D 3D(world)
TRIANGLE3D Triangle3D 3D
QUAD3D Quad3D 3D
DOT3D Dot3D 3D
LINE3D Line3D 3D
FLOATINGTEXT FloatingText 3D(世界空间)

按源码包路径分为两组:surface/widgets/component/face/(6 个 2D 图元)与 surface/widgets/component/world/(6 个 3D 图元)。

getNewInstance() 用 clazz.newInstance() 反射实例化(无参构造)——故每个图元类必须有无参构造器。

属性系统

surface/widgets/core/attribute/ 定义了 10 个属性接口,图元通过组合实现:

接口 作用
IAlpha 透明度
IColorizable 颜色
IItemable 物品(供 ITEMICON 用)
ILookable 朝向
IPositionable 位置(2D)
IResizable 尺寸
I2DVertex 2D 顶点
I3DPositionable 位置(3D)
I3DVertex 3D 顶点
IAttribute 通用属性标记

由 AttributeRegistry(surface/widgets/core/AttributeRegistry.java)统一管理。

渲染链路

文件 作用
surface/ClientSurface.java 客户端渲染入口
surface/ServerSurface.java 服务端图元状态
surface/GlassesGui.java 覆盖层 GUI
surface/GlassesContainer.java 覆盖层容器
surface/IRenderableWidget.java 可渲染图元接口
surface/Widget.java 图元基类
surface/RenderType.java 渲染类型
surface/widgets/rendering/ 实际绘制

图元更新经 WidgetUpdatePacket(网络 ID 7,服务端→客户端)同步。

耗电与图元数量挂钩

耗电公式见 energyMultiplier 的配置描述(OpenGlasses.java:76-78):

PowerDrain = (NumberOfWidgets / 10) * energyMultiplier

即图元越多耗电越高,每 10 个图元为一个计费单位,乘以 energyMultiplier 系数。energyBuffer(默认 100)是缓冲容量。

见 Config。

相关条目