TileEntitySlimelingEgg(细流蛋)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Slimeling Egg |
MarsModule.java:242 |
| 注册类 | micdoodle8.mods.galacticraft.planets.mars.tile.TileEntitySlimelingEgg |
同上 |
| 关联方块 | MarsBlocks.rock = new BlockSlimelingEgg().setHardness(0.75F).setBlockName("slimelingEgg") |
planets/mars/blocks/MarsBlocks.java:33 |
| 方块→TE 分派 | createNewTileEntity 无条件返回本 TE |
planets/mars/blocks/BlockSlimelingEgg.java:171-174 |
| 父类 | 原版 net.minecraft.tileentity.TileEntity |
planets/mars/tile/TileEntitySlimelingEgg.java:9 |
| 实现接口 | 无 | 同上 |
| 所属 modid | GalacticraftMars |
core/Constants.java:8 |
| 槽位数 | 无(不实现 IInventory) |
类声明 planets/mars/tile/TileEntitySlimelingEgg.java:9 |
⚠ 方块变量名叫 rock,但它是蛋——MarsBlocks.rock(planets/mars/blocks/MarsBlocks.java:33)
指向 BlockSlimelingEgg,这是源码的命名遗留,不要据此把它写成「火星岩石」。
槽位与字段
本类没有任何 ItemStack[] 字段,getSizeInventory() 不存在。
| 字段 | 类型 / 初值 | 含义 | 源码 |
|---|---|---|---|
timeToHatch |
int = -1 |
剩余孵化 tick;-1 表示「未开始」 |
planets/mars/tile/TileEntitySlimelingEgg.java:11 |
lastTouchedPlayerUUID |
String = "" |
最后一次右键的玩家 UUID | planets/mars/tile/TileEntitySlimelingEgg.java:12 |
lastTouchedPlayerName |
String = "" |
同上,名字(用于显示) | planets/mars/tile/TileEntitySlimelingEgg.java:13 |
NBT 键:TimeToHatch(:70、:78)、OwnerUUID(:79)、
OwnerUsername(:72、:80)。OwnerUUID 的写入经
VersionUtil.readSlimelingEggFromNBT(this, nbt)(:71)——读走的不是我类里的
getString("OwnerUUID"),版本兼容处理在 VersionUtil 内。
能量
无。 父类是原版 TileEntity(planets/mars/tile/TileEntitySlimelingEgg.java:9),
不继承 EnergyStorageTile,没有 gJ 容量、不耗电。
tick / 特殊机制
updateEntity()(planets/mars/tile/TileEntitySlimelingEgg.java:15-65)是本类全部逻辑:
| 阶段 | 条件 | 行为 | 源码 |
|---|---|---|---|
| 倒计时 | timeToHatch > 0 |
每 tick timeToHatch-- |
planets/mars/tile/TileEntitySlimelingEgg.java:20-21 |
| 孵化 | timeToHatch == 0 且 lastTouchedPlayerUUID 非 null 且长度 > 0 |
生成 EntitySlimeling 并把自身清成空气 |
planets/mars/tile/TileEntitySlimelingEgg.java:22-63 |
| 其它 | 其余情况 | 什么都不做(timeToHatch 停在 -1) |
— |
⚠ timeToHatch == -1(初值)不会孵化——倒计时只由方块侧右键启动:
planets/mars/blocks/BlockSlimelingEgg.java:79-84:
((TileEntitySlimelingEgg) tile).timeToHatch = world.rand.nextInt(50) + 20;
即右键后随机 20–69 tick 孵化(nextInt(50) 返回 0–49,加 20 → 20–69;
源码写的是 + 20,不是 + 20 之后再加 1)。
颜色由 metadata 决定
planets/mars/tile/TileEntitySlimelingEgg.java:24-41,metadata % 3 映射到 RGB:
metadata % 3 |
颜色 | 源码 |
|---|---|---|
| 0 | 红 (1.0, 0.0, 0.0) |
planets/mars/tile/TileEntitySlimelingEgg.java:31-33 |
| 1 | 蓝 (0.0, 0.0, 1.0) |
planets/mars/tile/TileEntitySlimelingEgg.java:34-36 |
| 2 | 黄 (1.0, 1.0, 0.0) |
planets/mars/tile/TileEntitySlimelingEgg.java:37-40 |
孵化后
planets/mars/tile/TileEntitySlimelingEgg.java:43-62:
EntitySlimeling 生成在蛋正上方 y + 1.0、水平居中(x + 0.5 / z + 0.5),
经 VersionUtil.setSlimelingOwner 绑主、setOwnerUsername 记名、
setTamed(true)、setHealth(20.0F),最后 setBlockToAir 移除蛋方块。
GUI / Container
无。 没有 GuiHandler 分派,蛋也不可合成(createNewTileEntity 是唯一入口)。