GTSU 能量储存单元
本页描述 8 个 GTSU 方块共用的注册、放置、朝向、能量流动与红石行为。各阶的容量/速率差异见对应阶条目。
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | GTSU:GTSU_Tier_0 … GTSU:GTSU_Tier_7(8 个独立注册,非 metadata 子类型) |
| 未本地化名 | tile.GTSU_Tier_0.name … tile.GTSU_Tier_7.name |
| 方块类 | eu.usrv.gtsu.blocks.GTSUBlock(构造参数为阶数) |
| TileEntity | eu.usrv.gtsu.tileentity.TileEntityGTSU(继承 IC2 TileEntityInventory) |
| 硬度 | 1.5 |
| 材质 | Material.iron(爆炸抗性继承自铁,未单独设置) |
| 脚步声 | soundTypeMetal |
| 创造标签 | IC2.tabIC2 |
| 实现接口 | IEnergySink、IEnergySource(均为 IC2 API) |
| 内部物品栏 | 2 个 IC2 能量槽(充能槽 mChargeSlot、放电槽 mDischargeSlot) |
8 个阶的注册方式
GTSUMod.registerSingleIC2StorageBlocks() 在 preInit 阶段循环 TierHelper.V.length(8)次:
GameRegistry.registerTileEntity(TileEntityGTSU.class, "GTSU_TE");
for (int i = 0; i < TierHelper.V.length; i++)
GameRegistry.registerBlock(new GTSUBlock(i), ItemBlockGTSU.class, String.format("GTSU_Tier_%d", i));
每个 GTSUBlock 实例持有私有的 _mTier 字段,createTileEntity 忽略传入的 metadata,始终 new TileEntityGTSU(_mTier);
hasTileEntity(int) 对任意 metadata 都返回 true。因此放置后的阶数只由方块种类决定。
各阶的容量、传输速率与 IC2 电压等级:
| 内部 tier | 方块 | 传输速率 | 容量 | IC2 tier |
|---|---|---|---|---|
| 0 | GTSU Tier 1 (MV) | 128 EU/t | 2,097,152 EU | 2 |
| 1 | GTSU Tier 2 (HV) | 512 EU/t | 134,217,728 EU | 3 |
| 2 | GTSU Tier 3 (EV) | 2048 EU/t | 8,589,934,592 EU | 4 |
| 3 | GTSU Tier 4 (IV) | 8192 EU/t | 549,755,813,888 EU | 5 |
| 4 | GTSU Tier 5 (LuV) | 32768 EU/t | 35,184,372,088,832 EU | 6 |
| 5 | GTSU Tier 6 (ZPM) | 131072 EU/t | 2,251,799,813,685,248 EU | 7 |
| 6 | GTSU Tier 7 (UV) | 524288 EU/t | 144,115,188,075,855,872 EU | 8 |
| 7 | GTSU Tier 8 (MAX) | 2097152 EU/t | 9,223,372,036,854,775,806 EU | 9 |
能量流动
TileEntityGTSU 以**方块朝向面(facing)**区分输入与输出:
| 方法 | 行为 |
|---|---|
emitsEnergyTo(receiver, direction) |
仅当 direction.ordinal() == getFacing() 时为 true — 只有朝向面向输出 |
acceptsEnergyFrom(emitter, direction) |
与上式相反(!facingMatchesDirection)— 其余 5 个面都可输入 |
getOfferedEnergy() |
满足条件时返回 min(mEnergy, mOutput),否则 0.0D |
getDemandedEnergy() |
mMaxStorage - mEnergy |
getSourceTier() / getSinkTier() |
均为 2 + mTier |
injectEnergy(dir, amount, voltage) |
满仓时原样返回 amount(表示全部拒绝);否则 mEnergy += amount 并返回 0 |
drawEnergy(amount) |
mEnergy -= amount |
mEnergy 是 long,mOutput 是 int(=TierHelper.V[mTier])。注意 injectEnergy 直接累加传入的 amount,
不做 min(amount, mMaxStorage - mEnergy) 截断。
摆放与朝向
- 放置:
onBlockPlacedBy从物品的 NBT 读取energy与tier写入 TileEntity(实现"拆下再放回保留电量"), 朝向由BlockPistonBase.determineOrientation(world, x, y, z, entityliving)决定;若entityliving == null则固定朝下(facing = 1)。 - 旋转:
rotateBlock通过 IC2IWrenchable接口旋转,仅在axis != ForgeDirection.UNKNOWN时生效;wrenchCanSetFacing要求新朝向与当前朝向不同。setFacing会先发EnergyTileUnloadEvent、改朝向、再发EnergyTileLoadEvent重新挂回 EU 网络。 - 邻接要求:无。
isNormalCube返回 false、isBlockSolid返回 true;canCreatureSpawn永远返回 false。
交互
| 触发 | 行为 |
|---|---|
| 右键(空手,未潜行) | 打开 GUI(GUI ID 0,GTSUMod.instance,坐标形式) |
| 右键(持 IC2 扳手 / 电动扳手) | 阻止 GUI 打开,返回 true 用于旋转朝向 |
| 右键(潜行) | 阻止 GUI 打开,返回 false |
| 扳手旋转 | 旋转输出面 |
| 比较器读取 | round(map(mEnergy, mMaxStorage, 15.0)),即 0–15 的电量比例 |
| 破坏 | breakBlock 遍历 TileEntity 物品栏,把 2 个能量槽内的物品随机散落到世界 |
弱充能:
isProvidingWeakPower返回isEmittingRedstone() ? 15 : 0,而TileEntityGTSU.isEmittingRedstone()在源码中是硬编码 return false。因此该方块实际永不输出红石弱充能,红石模式只影响对外供电与比较器读数。 详见红石模式。
GUI
GuiHandler(NetworkRegistry.INSTANCE.registerGuiHandler 注册)负责在客户端/服务端构造 ContainerGTSU / GuiGTSU,
两者都先校验 world.getTileEntity(x, y, z) instanceof TileEntityGTSU。背景贴图 gtsu:textures/gui/gui_gtsu.png,尺寸 176 × 166。
| 区域 | 内容 |
|---|---|
| 左上 10,7(20×20) | GuiIconButton(ID 0,图标为红石物品),点击切换红石模式 |
| 标题 | 按 tile.GTSU_Tier_<mTier>.name 本地化 |
| 文本 16,29 / 37,39 / 37,49 | 等级、当前能量(min(mEnergy, mMaxStorage),经 NumberPrettifier 缩写)、容量 |
| 文本 26,60 | 输出(ic2.EUStorage.gui.info.output + mOutput) |
| 8,73(116 宽 × 5 高,纹理 y=251) | 蓝色能量条,长度 = 116% × getChargePercentage() |
| 10,7,29,26 区域 | GuiTooltipHelper 绘制当前红石模式名 |
| 容器 152,5+i*18 | 4 个玩家护甲槽(SlotArmor) |
| 容器 128,14 / 128,50 | 充能槽(InvSlotCharge)与放电槽(InvSlotDischarge,Access.IO) |
ContainerGTSU 继承 IC2 ContainerFullInv(宽 179、高 166),getNetworkedFields 额外同步 mEnergy 与 mRedstoneMode。
创造标签变体
getSubBlocks 为每个阶提供两个变体(每阶共 16 个条目),均写入 NBT:
| 变体 | metadata | energy NBT |
tier NBT |
|---|---|---|---|
| 空 | _mTier |
0 | _mTier |
| 满 | _mTier + 100 |
TierHelper.getMaxStorageForTier(_mTier) |
_mTier |
物品形态的 tooltip 与堆叠行为见GTSU 储存单元物品形态。
破坏掉落
getWrenchDrop 在扳手拆除时尝试把电量写入掉落物 NBT,比例取自 IC2 自身配置
ConfigUtil.getFloat(MainConfig.get(), "balance/energyRetainedInStorageBlockDrops")。
⚠️ 源码用
setDouble写入energy键,而readFromNBT用getLong读取,二者类型不一致。 且该实现是TileEntityInventory的 IC2 覆写,本 mod 未覆盖injectEnergy之外的溢出保护。 实际保留效果取决于 IC2 版本行为,GTSU 源码本身不保证电量随扳手掉落保留。
相关条目
- GTSU Tier 1 (MV) / GTSU Tier 2 (HV) / GTSU Tier 3 (EV) / GTSU Tier 4 (IV) - 低阶变体
- GTSU Tier 5 (LuV) / GTSU Tier 6 (ZPM) / GTSU Tier 7 (UV) / GTSU Tier 8 (MAX) - 高阶变体
- GTSU 储存单元物品形态 - 对应的
ItemBlock - 红石模式 - 7 种红石输出模式
- 能量系统换算 - 跨能量制式换算枚举