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。

相关条目