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 不在清理列表(源码既有行为)。

相关条目