TileEntityDish(无线电望远镜)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Radio Telescope |
GalacticraftCore.java:727 |
| 所属 modid | GalacticraftCore |
core/Constants.java:7,@Mod 见 GalacticraftCore.java:160-161 |
| 关联方块 | micdoodle8.mods.galacticraft.core.blocks.BlockDish |
core/blocks/BlockDish.java:170-172 |
| 父类 | TileBaseUniversalElectrical |
core/energy/tile/TileBaseUniversalElectrical.java:34 |
| 实现接口 | IMultiBlock / IDisableableMachine / IInventory / ISidedInventory / IConnector |
core/tile/TileEntityDish.java:28-29 |
| 槽位数 | 1(getSizeInventory() 见 core/tile/TileEntityDish.java:251-253) |
同上 |
⚠ 父类是 TileBaseUniversalElectrical,不是 TileBaseUniversalElectricalSource——
太阳能板与煤炭发电机都继承后者,本类不实现 IEnergySource。
槽位与字段
core/tile/TileEntityDish.java:40:
private ItemStack[] containingItems = new ItemStack[1];
只有 1 个槽位。getSizeInventory()(:251-253)返回 this.containingItems.length → 恒为 1。
:168 的 readFromNBT 重建数组时用的也是 getSizeInventory(),长度不变。
| 字段 | 类型 | 含义 | 来源 |
|---|---|---|---|
targetAngle |
float |
目标朝向角(度) | core/tile/TileEntityDish.java:31 |
currentAngle |
float |
当前朝向角(度) | core/tile/TileEntityDish.java:32 |
disabled |
boolean |
是否被关闭(@NetworkedField) |
core/tile/TileEntityDish.java:35-36 |
disableCooldown |
int |
关闭指令冷却(tick) | core/tile/TileEntityDish.java:38-39 |
setDisabled(:232-237)只在 disableCooldown == 0 时生效,随后把冷却置 20 tick。
能量
本类不设容量,沿用父类默认值:
| 常量 | 值 | 来源 |
|---|---|---|
STANDARD_CAPACITY |
16000 | core/energy/tile/EnergyStorageTile.java:18 |
默认 maxReceive |
25 | core/energy/tile/EnergyStorageTile.java:21(new EnergyStorage(STANDARD_CAPACITY, 10),两参构造见 core/energy/tile/EnergyStorage.java:19-21,展开为 maxReceive = 2.5F * 10 = 25、maxExtract = 10) |
maxExtract |
100 | core/tile/TileEntityDish.java:45 |
⚠ getElectricalInputDirections() 返回 EnumSet.noneOf(ForgeDirection.class)
(core/tile/TileEntityDish.java:207-210)——望远镜不接收任何方向的电力输入,
只有输出侧。getModeFromDirection 由此在所有方向都判为不可用。
单位是 GC 的 gJ(GigaJoule),不是 RF/t、不是 EU/t。
结构(IMultiBlock 是真的)
与太阳能板不同,本类的 IMultiBlock 确实会铺出假方块:
| 位置 | 内容 | 来源 |
|---|---|---|
y+1 正上方 |
1 个支架(fake block,meta 0) |
core/tile/TileEntityDish.java:115-117 |
y+2 |
3×3 共 9 个 假方块 | core/tile/TileEntityDish.java:123-130 |
| 假方块 meta | getTierGC() == 1 时为 4,否则为 0 |
core/tile/TileEntityDish.java:128 |
合计 10 个假方块。onDestroy(:133-158)把 y+1、y+2 全部清空(y+2 含 3×3)。
BlockDish.breakBlock(core/blocks/BlockDish.java:108-116)负责调用它。
onCreate 在高度不足时直接 return(:109-112、:119-121),即贴天花板放置会得到不完整结构。
朝向与 tick
updateEntity(:52-86)每 tick 调整朝向:
| 条件 | targetAngle 目标 |
来源 |
|---|---|---|
| 天体角落在 30~150 之间 | 持续追踪(targetAngle -= difference / 20.0F) |
core/tile/TileEntityDish.java:68-70 |
| 非白天 / 下雨 / 打雷 | 257.5(77.5F + 180.0F) |
core/tile/TileEntityDish.java:71-72 |
| 天体角 < 50 | 50 | core/tile/TileEntityDish.java:73-74 |
| 天体角 > 150 | 150 | core/tile/TileEntityDish.java:75-76 |
追踪速率两处都是 difference / 20.0F(:70 改目标、:84 改实际),
即每 tick 走完剩余角度的 1/20。
GUI / Container
无 GUI。 BlockDish.onMachineActivated(core/blocks/BlockDish.java:150-155)里
entityPlayer.openGui(...) 那行被注释掉了(:153),且 core/client/gui/GuiHandler.java
全文没有 TileEntityDish 分支。那 1 格电池槽没有 GUI 出口,无法手工交互。
网络封包
走 GC 的 @NetworkedField 字段同步(disabled、disableCooldown)+
TileEntity NBT(:161 存 maxEnergy、:206 存 Items)。无独立的封包 ID。
封包范围与冷却继承 TileBaseUniversalElectrical:getPacketRange 返回 12.0
(core/energy/tile/TileBaseUniversalElectrical.java:45-47)、getPacketCooldown 返回 3
(:49-51)。