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)。

相关条目