TownBlock

基本信息

属性 值
类名 mytown.entities.TownBlock
文件 src/main/java/mytown/entities/TownBlock.java
行数 202
实现 IChatFormat
键格式 KEY_FORMAT = "%s;%s;%s"
启用版本 Minecraft 1.7.10

功能

城镇占用的区块级单元。⚠️ 注意粒度:它不是单个方块。

证据是 TownBlock 自身提供 toChunkPos() 与 toChunkCoords() (TownBlock.java:101、105),且字段只有 dim, x, z —— 没有 y。 构造器 TownBlock(int dim, int x, int z, ...) 同样只有 x / z。

即一个 TownBlock 对应一个区块(16×256×16 的柱体)。

键

public static final String KEY_FORMAT = "%s;%s;%s";

按 dim;x;z 三段拼接,配合 TownBlockKey 生成复合键, 供 Map / Set 索引。没有 y 段 —— 这是区块粒度的直接体现。

字段与构造

成员 说明
plotsContainer final Plot.Container,容量取 Config.instance.defaultMaxPlots
getDim() / getX() / getZ() 三个坐标分量
isFarClaim() 是否为远程认领(不在城镇出生点附近)
getPricePaid() 已付价格
isChunkloaded() 该区块是否被强载
getTown() / getKey() 所属城镇 / 复合键
getCoordString() 坐标字符串
toVolume() 转 Volume 供保护判定

构造器:TownBlock(int dim, int x, int z, boolean isFarClaim, int pricePaid, Town town)。

实现要点

⚠️ x / z 是区块坐标还是方块坐标,源码未在字段上直接标明, 但因存在 toChunkPos() / toChunkCoords() 且 KEY_FORMAT 只三段, 实际按区块坐标使用。判定时经 worldServerForDimension(bp.getDim()) 拿到世界后再取对应区块。

⚠️ plotsContainer 的容量同样在构造时从 Config.instance.defaultMaxPlots.get() 固化,改配置不影响已加载实例。

⚠️ isFarClaim 与远程认领的最大距离由 Config 的 maxFarClaims(默认 0,即禁用)约束, 费用见 costAmountClaimFar(默认 8)。

相关条目