TileEntityFallenMeteor(坠落陨石)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Fallen Meteor |
GalacticraftCore.java:732 |
| 所属 modid | GalacticraftCore |
core/Constants.java:7,@Mod 见 GalacticraftCore.java:160-161 |
| 关联方块 | micdoodle8.mods.galacticraft.core.blocks.BlockFallenMeteor |
core/blocks/BlockFallenMeteor.java:181-184 |
| 父类 | TileEntityAdvanced |
core/tile/TileEntityAdvanced.java:23 |
| 实现接口 | 无(类声明 :11 不带 implements) |
core/tile/TileEntityFallenMeteor.java:11 |
| 槽位数 | 无(不实现 IInventory,源码中不存在 getSizeInventory()) |
core/tile/TileEntityFallenMeteor.java:1-79 |
⚠ 本类既无能量也无物品容器,只有 1 个整数状态(热度)。
不能把 getSizeInventory() 写成 0——方法根本不存在。
字段与常量
core/tile/TileEntityFallenMeteor.java:13-18:
| 成员 | 值 / 类型 | 含义 | 来源 |
|---|---|---|---|
MAX_HEAT_LEVEL |
5000(public static final int) |
热度上限 | core/tile/TileEntityFallenMeteor.java:13 |
heatLevel |
int,初值 5000 |
当前热度 | core/tile/TileEntityFallenMeteor.java:15-16 |
sentOnePacket |
boolean,初值 false |
是否已发过一次网络包 | core/tile/TileEntityFallenMeteor.java:18 |
初值就是 MAX_HEAT_LEVEL(:16 直接引用常量),即新放置的陨石一开始就是满热度。
tick
updateEntity(core/tile/TileEntityFallenMeteor.java:20-27)全部逻辑只有 3 行:
if (!this.worldObj.isRemote && this.heatLevel > 0) {
this.heatLevel--;
}
| 属性 | 值 | 来源 |
|---|---|---|
| 衰减速率 | 每 tick 减 1 | core/tile/TileEntityFallenMeteor.java:25 |
| 衰减总时长 | 5000 tick(从 5000 降到 0) | 由 :13 上限与 :25 速率推得 |
| 归零后 | 停住,不再变化(> 0 才递减) |
core/tile/TileEntityFallenMeteor.java:24-26 |
getScaledHeatLevel()(:37-39)返回 heatLevel / MAX_HEAT_LEVEL,
即0.0 ~ 1.0 的浮点比例,供渲染器做颜色渐变。
GUI / Container
无。 源码中不存在 onActivated / openGui,
core/client/gui/GuiHandler.java 也无对应分支。
网络封包
本类覆写了 TileEntityAdvanced 的全部 3 个网络钩子(core/tile/TileEntityAdvanced.java):
| 方法 | 返回值 | 来源 |
|---|---|---|
isNetworkedTile() |
true |
core/tile/TileEntityFallenMeteor.java:75-78 |
getPacketRange() |
50 | core/tile/TileEntityFallenMeteor.java:65-68 |
getPacketCooldown() |
发过包后 100,未发过 1 | core/tile/TileEntityFallenMeteor.java:70-73 |
readExtraNetworkedData(ByteBuf) |
客户端收到即触发方块更新 | core/tile/TileEntityFallenMeteor.java:41-46 |
addExtraNetworkedData(List<Object>) |
置 sentOnePacket = true |
core/tile/TileEntityFallenMeteor.java:48-51 |
heatLevel 本身是 @NetworkedField(targetSide = Side.CLIENT)(:15),
走字段级同步。无独立封包 ID。
NBT
键名 MeteorHeatLevel:读 core/tile/TileEntityFallenMeteor.java:56、
写 :62。