跳到正文
烈焰甘蔗Wiki

盖板系统

概述

盖板(Cover)是 GT5-Unofficial 附着在机器表面上的功能模块,全仓共 65 个类 / 8057 行代码(gregtech/common/covers/),覆盖自动化搬运、机器控制、探测监控、无线通信、装饰伪装五大类功能。

代码基线:GT5U 5.09.54.183(Minecraft 1.7.10)。

[!WARNING] 本版本不存在 CoverFilter / PileFilter / SortationFilter / TagFilter 等多类型过滤器框架,也不存在 Muffler、Optical Emitter/Receiver 等盖板。过滤器是「单槽位 + 谓词」模型,详见下文。

盖板与电缆:两层不同的东西

盖板容易被和电缆混淆,但它们是完全独立的两个系统层:

维度 盖板 Cover 电缆 MTECable
基类 Cover MetaPipeEntity → BaseMetaPipeEntity
数量 每面 1 个(6 bit 掩码 validCoversMask) 每面可多条,按 mThickNess 决定并排数
作用 自动化 / 信号 / 装饰 EU 输运与配电
关键字段 coverID + NBT mThickNess、mCableLossPerMeter、mAmperage、mVoltage、mCanShock

盖板分类

家族 代表类 行为
传送带 CoverConveyor 物品自动进出,14 个电压等级
机械臂 CoverArm 按指定槽位号搬运物品,5 个等级
过滤器 CoverItemFilter / CoverFluidfilter 白/黑名单拦截
流体搬运 CoverFluidRegulator / CoverFluidLimiter / CoverPump / CoverDrain / CoverSteamRegulator / CoverSteamValve 定量流体搬运
机器控制 CoverControlsWork / CoverShutter 开关机器、阻断交互
探测监控 CoverDoesWork / CoverItemMeter / CoverLiquidMeter / CoverEUMeter / CoverPlayerDetector / CoverNeedMaintainance 输出红石信号
通信无线 CoverRedstoneWirelessBase 族 / CoverWirelessController / CoverEnergyWireless 跨区块跨维度信号与供能
装饰伪装 CoverDecorative(含 Cover_Screen)/ CoverFacadeBase 纯外观或 CTM 伪装
能源环境 CoverSolarPanel / CoverVent 发电、冷却、加速

物品过滤器(单槽位模型)

只有 1 个槽位,只能放 1 个物品模板(CoverItemFilter.java:40):

ItemStackHandler filter = new LimitingItemStackHandler(1, 1);

两个注册物品:ItemFilter_Export(导出)与 ItemFilter_Import(导入)。它们是两个独立物品,不是同一盖板的两个模式。

白/黑名单的命名陷阱

源码里的 mWhitelist 变量是反的,注释直言:

/** This variable is extremely confusing... mWhitelist == false means whitelist mode */
private boolean mWhitelist;

玩家实际看到的由 getFilterType() 决定:mWhitelist ? BLACKLIST : WHITELIST。默认 false = 白名单。

配置方式

  • 手持物品右键封面 → 设为模板;空手右键清空
  • 螺丝刀点击 → 切换白/黑名单
  • 硬上限:每次执行最多 64 组,且 getMinimumTickRate()=1(每 tick 一次)

流体过滤器(8 种模式)

配置压在一个 byte 的低 3 位,由三个正交维度编码(CoverFluidfilter.java:38-46):

值 含义
0 输入=仅该流体,输出=禁止
1 输入=非该流体,输出=禁止
2 输入=仅该流体,输出=任意
3 输入=非该流体,输出=任意
4 输入=禁止,输出=仅该流体
5 输入=禁止,输出=非该流体
6 输入=任意,输出=仅该流体
7 输入=任意,输出=非该流体

bit0 = 白/黑名单,bit1 = BlockMode,bit2 = 输入/输出方向。

Tick 速率与调节

驱动循环在 CoverableTileEntity.tickCoverAtSide(),所有机器共享同一全局 tick 计数器(MinecraftServer.getServer().getTickCounter())。

实际周期 = getMinimumTickRate() + tickRateAddition,其中:

  • MAX_TICK_RATE_ADDITION = 1200(60 秒),钳制在 [0, 1200]
  • 调节步长:当前 20 tick 时为 20,<20 时为 5,>20 时为 20
  • 用锤类工具调节,潜行点击反向
  • allowsTickRateAddition() 返回 false 的盖板禁止调节(CoverChest、CoverEnergyWireless)

各盖板基础 tick:Conveyor LV/MV=100、HV=20、EV=4、IV+=1;Arm LV=400、MV=100、HV=20、EV=4、IV=1;CoverNeedMaintainance 60;CoverPlayerDetector 20;CoverVent 100。

传送带速率表

CoverConveyor 构造参数为 (tickRate, maxStacks, itemsPerStack):

等级 tick stacks/次 items/stack items/秒
LV 100 1 16 3.2
MV 100 1 64 12.8
HV 20 1 64 64
EV 4 1 64 320
IV 1 1 64 1,280
LuV 1 4 64 5,120
ZPM 1 16 64 20,480
UV 1 16 256 81,920
UHV 1 16 1024 327,680
UEV 1 16 4096 —
UIV 1 16 16384 —
UMV 1 16 65536 —
UXV 1 16 262144 —
MAX 1 16 Integer.MAX_VALUE 无实际上限

MAX 级的 Integer.MAX_VALUE 被直接传入、没有任何硬性钳制。

方向与条件(12 种状态)

CoverIOBase 用 coverData 位域表达:coverData % 6 的 0-1 = ALWAYS,2-3 = CONDITIONAL,4-5 = INVERTED;>= 6 叠加 BlockMode.ALLOW。螺丝刀点击循环切换。

CONDITIONAL/INVERTED 仅当宿主实现 IMachineProgress 时才检查 isAllowedToWork()。

能量:盖板几乎不耗电

没有任何盖板实现能量扣除。 唯一的「消耗」:

  • CoverPlayerDetector:若机器存有 ≥20 EU,每 tick 扣除 20 EU,把探测半径从 8 扩到 32(CoverPlayerDetector.java:57-62)。无电则回落半径 8。

CoverEnergyWireless 是供能而非耗能:

每操作传输能量 = 2 × 电压 × 间隔 tick
间隔 = 100L × 20L = 2000 tick = 100 秒

14 个电压等级(LV…MAX),getMinimumTickRate()=20,但实际只在 aTimer % 2000 == 0 拉取,且会先检查储能是否已满。

值得注意的特殊盖板

CoverChest 箱子盖 — 每槽硬性只能放 1 个

stackSizeLimit = 1 硬编码(CoverChest.java:32)。三级槽位数 9 / 12 / 15。getMinimumTickRate() 为 firstTick ? 1 : 0——只在读档后首 tick 跑一次做槽位迁移。移除外壳会散落全部物品。

CoverSolarPanel 太阳能板 — 效率可累积,需水桶清洗

coverNum(效率 0-100)每 24000 tick(24 分钟)尝试 +1。发电量 = (100 - coverNum) × 电压 / 100,仅在白天且不下雨时注入。

  • 下雨时 coverNum 被钳到 30
  • 雷暴时钳到 20
  • 玩家用水桶右键可清除积累的污垢(水桶换成空桶)

11 个等级:1 / 8 / 32 / 128 / 512 / 2048 / 8192 / 32768 / 131072 / 524288。

CoverVent 反应堆通风盖 — 会真正改变机器行为

① 把机器内 ic2hotcoolant 转成冷却液;② 调用 coverable.increaseProgress(mEfficiency) 直接加速机器进度——但要求前方方块无碰撞箱(即能直视天空/空气)。

冷却概率:

环境 钻石 金·超频 基础
水中 100% 50% 25%
空气中 25% 12.5% 0%

CoverPlayerDetector 玩家侦测器

3 种模式:ANY_PLAYER / 别人 / 自己(coverData 1=别人、2=自己)。注意它只遍历 EntityPlayerMP,客户端假玩家不计入。

CoverNeedMaintainance 维护侦测 — 14 态

前 10 态是「问题数阈值」,后 4 态是转子寿命预测:

  • 态 10:转子耐久 ≥ 80% 即报警
  • 态 11/12/13:按公式预测 mExpectedDamage = round(min(EUt/damageFactorLow, EUt^damageFactorHigh))
  • 判为转子的条件是 itemDamage >= 170 && <= 176

输出同时写到 coverSide 与其对面。

CoverShutter — 4 态但两套语义

态 0-1 按机器 isAllowedToWork() 开关;态 2-3 变成纯粹的方向性闸门:态 2 = 只允许「出」,态 3 = 只允许「入」。

CoverControlsWork 机器控制器 — 含「安全模式」

RedstoneCondition 3 态 × 安全模式(coverData > 2)。安全模式会捕获 machine.wasShutdown() && getLastShutDownReason().wasCritical() 并永久自锁到 DISABLED,需手动复位。

CoverFluidRegulator 流体调节器

getMaxSpeed() = mTransferRate × tickRate
TICK_RATE_MIN = 1 / TICK_RATE_MAX = 2048

螺丝刀调速步长 16(潜行 256),右半面加、左半面减。速度符号决定方向:speed >= 0 = EXPORT。14 个等级从 LV 的 32 到 MAX 的 268435456。

CoverMetricsTransmitter — 做成盖板只为限流

源码注释直言:「The only reason this is a cover is to artificially limit the number of total machines that transmit this data, for performance reasons.」用随机 UUID 作频率,跨维度传给 Nuclear Control。

放置规则

  • 任意 6 面均可,没有 1x1 限制,单个机器最多 6 个盖板
  • 多方块控制器禁止正面盖板(MTEMultiBlockBase.allowCoverOnSide()),侧面/背面允许
  • 放置:潜行 + 手持盖板右键
  • 移除:潜行 + 撬棍右键
  • 替换:未实现直接覆盖——已有盖板的面会被守卫拦截,必须先拆再装
  • 配置 GUI:空手潜行右键
  • 原始方块(非 MTE)默认不允许盖板,只有 CoverNone、装饰盖板、CoverChest_* 三级放开

玩家如何规划

  • 物流瓶颈优先升级传送带等级:LV 到 IV 之间速率差 400 倍,但成本差距远小于吞吐收益。
  • 过滤器只有 1 个槽位,复杂的物料筛选需要多个过滤器盖板或改用多方块机器的输入总线。
  • 别用太阳能板当主电源:默认会缓慢累积污垢导致效率下降,必须定期用水桶清洗。
  • CoverVent 加速需要开放天空,盖在墙里的反应堆通风盖不会加速。
  • 多方块正面不能放盖板,需要在正面交互时留空。

相关条目

  • 电压等级 — 盖板速率等级与电压等级的对应关系
  • 矿物加工 — 自动化产线的传送带与机械臂配置
  • 电力网络 — 电缆(MTECable)与盖板的区别
  • 超频 — 机器超时代价与盖板速率调节的取舍
浏览全部模组