Segment
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mytown.protection.segment.Segment |
| 文件 | src/main/java/mytown/protection/segment/Segment.java |
| 启用版本 | Minecraft 1.7.10 |
功能
保护判定的最小单元。一条 segment 表示「在某段区域 / 某类对象上, 按某条件限制某 flag」。
Segment 是抽象基类,Protection.segments 就是
Segment.Container<Segment>,实际元素是以下 8 个子类。
子类一览
| 子类 | 文件 | 判定对象 |
|---|---|---|
SegmentBlock |
segment/SegmentBlock.java |
普通方块 |
SegmentSpecialBlock |
segment/SegmentSpecialBlock.java |
特殊方块(影响范围由 getter 决定) |
SegmentTileEntity |
segment/SegmentTileEntity.java |
TileEntity |
SegmentEntity |
segment/SegmentEntity.java |
实体 |
SegmentItem |
segment/SegmentItem.java |
掉落物 |
ClientBlockUpdate |
segment/ClientBlockUpdate.java |
客户端方块更新 |
ClientInventoryUpdate |
segment/ClientInventoryUpdate.java |
客户端背包更新 |
Condition |
segment/Condition.java |
条件式(辅助,非 segment) |
内嵌类型
Segment.Container<...>:泛型容器类。
ProtectionManager 持有 6 个该类型的静态容器,
Protection 持有第 7 个(segments)。
三个支撑子包
| 子包 | 文件数 | 作用 |
|---|---|---|
caller/ |
7 | 通过反射 / ASM 从对象取值(Caller、CallerFormula、CallerNBT) |
getter/ |
3 | 声明并缓存取值器(Getter、GetterConstant、GetterDynamic) |
enums/ |
4 | 类型枚举(BlockType、EntityType、ItemType、Priority) |
实现要点
⚠️ 坐标一律带维度 ID(int),如 SegmentBlock.java:25 的
worldServerForDimension(bp.getDim()) —— 维度 ID 来自 BlockPos.getDim(),
是本仓库的 TownBlockKey 组合键的一部分,不是 DimensionType。
⚠️ ProtectionParser.start() 只 clear() 了 segmentsBlock、segmentsEntity、
segmentsItem、segmentsTile 四个容器,
segmentsSpecialBlock 与 segmentsTrackedEntity 不在清理列表(源码既有行为)。
相关条目
- Protection - 保护规则载体
- ProtectionManager - 6 个容器所在
- Condition - 条件求值
- Segment 类型枚举 -
enums/子包 - Caller 与 Getter -
caller/与getter/子包 - ThreadPlacementCheck - 放置检查线程