TileEntityOxygenCollector(氧气收集器)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Air Collector core/GalacticraftCore.java:707
所属 modid GalacticraftCore core/Constants.java:7,@Mod 见 core/GalacticraftCore.java:160-161
关联方块 GCBlocks.oxygenCollector = new BlockOxygenCollector("oxygenCollector") core/blocks/GCBlocks.java:103
方块→TE 分派 无条件 new TileEntityOxygenCollector() core/blocks/BlockOxygenCollector.java:100-102
父类 TileEntityOxygen(→ TileBaseElectricBlock → … → EnergyStorageTile) core/tile/TileEntityOxygenCollector.java:25、core/tile/TileEntityOxygen.java:19
实现接口 IInventory / ISidedInventory core/tile/TileEntityOxygenCollector.java:25
槽位数 1 见下节

槽位与字段

core/tile/TileEntityOxygenCollector.java:33:

private ItemStack[] containingItems = new ItemStack[1];

getSizeInventory()(:214-217)返回 this.containingItems.length → 恒为 1(:184 等长重建)。

槽位 用途 源码
0 唯一的电池槽(getBatteryInSlot() → getStackInSlot(0)) core/tile/TileEntityOxygenCollector.java:322-325
可接受性 源码
侧面可达槽 {0},canExtractItem 对槽 0 恒为 true core/tile/TileEntityOxygenCollector.java:288-300
每槽堆叠上限 64 core/tile/TileEntityOxygenCollector.java:269-271
槽 0 只收 GC 电力物品 core/tile/TileEntityOxygenCollector.java:308-310

能量

项目 值 来源
缓冲容量 16000 gJ(STANDARD_CAPACITY,本类未覆写) core/energy/tile/EnergyStorageTile.java:18、:21
最大输入 25 gJ/t——new EnergyStorage(STANDARD_CAPACITY, 10) 两参构造展开为 maxReceive = 2.5F * 10 core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21
最大输出 10 gJ/t(构造未覆写,沿用默认 maxTransfer) core/tile/TileEntityOxygenCollector.java:38-41、core/energy/tile/EnergyStorage.java:19-21

⚠ 单位是 gJ,不是 RF/t / EU/t。

tick / 特殊机制(本篇核心)

采集不是每 tick,而是 this.worldObj.rand.nextInt(10) == 0 时才跑一次—— 即平均每 10 tick 一次(:97)。源码注释写的是「Approximately once every 40 ticks」, 注释与代码不符,以代码为准。

行为 数值 源码
氧气容量 / 速率 super(6000, 0) → 容量 6000、速率 0 core/tile/TileEntityOxygenCollector.java:39
扫描范围 以本体为中心的 11×11×11(x/z 各 ±5,y 为 yCoord±5 并按世界高度夹取) core/tile/TileEntityOxygenCollector.java:119-138
命中条件 非空气 且(树叶 或 EnumPlantType.Crop 作物) core/tile/TileEntityOxygenCollector.java:153-156
每个命中块加多少 0.075F * 10F core/tile/TileEntityOxygenCollector.java:157
有氧大气星球 nearbyLeaves = 9.3F * 10F(直接给满额,不扫描) core/tile/TileEntityOxygenCollector.java:163-165
落库 storedOxygen += nearbyLeaves(nearbyLeaves 已 floor 并 /10) core/tile/TileEntityOxygenCollector.java:167-171
无电 lastOxygenCollected = 0,不产出 core/tile/TileEntityOxygenCollector.java:172-174

⚠ 「当前维度是否有大气氧」只在首次采集时判定一次并缓存在 isInitialised / noAtmosphericOxygen (:103-108),换维度不会重新判定。

⚠ 出网上限用的是 TileEntityOxygenStorageModule.OUTPUT_PER_TICK = 500(core/tile/TileEntityOxygenStorageModule.java:31), 不是本类自己声明的 OUTPUT_PER_TICK = 100(core/tile/TileEntityOxygenCollector.java:28)—— 本类那个常量在 getOxygenProvide 里没被使用(:348-352)。

  • 出气面 = 电力输入面的对面(:343-345);输入方向为空集(:338-340)。
  • shouldUseEnergy() = storedOxygen > 0F && producedLastTick(:312-315)—— producedLastTick 是上一 tick 是否未满(:54),即满罐即停耗电。
  • 构造时 this.noRedstoneControl = true(:40)——不受红石控制。

GUI / Container

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiOxygenCollector core.inventory.ContainerOxygenCollector Container :116-117、Gui :204-205

相关条目