天境机器方块
基本信息
天境有 3 台功能机器与 1 座祭坛,全部使用 Material.rock,在 BlocksAether.initialization() 的 :197-200 注册。
| 注册名 | 中文名 | 类 | 硬度 | TileEntity | GUI ID | 采集等级 |
|---|---|---|---|---|---|---|
aether_legacy:enchanter |
祭坛 | BlockEnchanter |
2.0 | TileEntityEnchanter |
2 | 镐 0 |
aether_legacy:freezer |
冰冻器 | BlockFreezer |
2.5 | TileEntityFreezer |
3 | 镐 0 |
aether_legacy:incubator |
孵化器 | BlockIncubator |
2.0 | TileEntityIncubator |
4 | 镐 0 |
aether_legacy:sun_altar |
日轮祭坛 | BlockSunAltar |
2.5 | 无 | 无(自定义界面) | 镐 0 |
GUI ID 常量定义在 AetherGuiHandler.java:31:
public static final int accessories = 1, enchanter = 2, freezer = 3, incubator = 4, treasure_chest = 5, lore = 6;
硬度来源:BlockEnchanter.java:37、BlockFreezer.java:37、BlockIncubator.java:37、BlockSunAltar.java:32。TileEntity 注册见 AetherTileEntities.java:8-10。
功能
祭坛(Enchanter)—— 附魔机
TileEntityEnchanter 把物品按附魔表转化为产物。槽位分工:
| 槽位 | 内容 | 校验 |
|---|---|---|
| 0 | 待附魔的物品 | AetherAPI.instance().getEnchantment(stack) != null |
| 1 | 附魔燃料 | AetherAPI.instance().isEnchantmentFuel(stack) |
| 2 | 产物输出 | enchantment.getOutput() 与槽内物品一致才可放入(TileEntityEnchanter.java:126-130) |
动力流程(TileEntityEnchanter.java:108-121):powerRemaining <= 0 时消耗一个槽 1 燃料,把 getTimeGiven() 加到 powerRemaining;没有有效燃料时把 currentEnchantment 与 progress 全部清零(:117-119)。
timeRequired 来自 AetherEnchantment.getTimeRequired()(TileEntityEnchanter.java:140),并可被 AetherHooks.onSetEnchantmentTime 改写(:142-143);每升一级附魔 +1250 tick(:159)。
附魔燃料只有一种:神能碎片 ambrosium_shard,提供 500 动力(AetherRegistries.java:298)。
冰冻器(Freezer)—— 转化机
结构与祭坛完全对称,但走冷凝表:
| 槽位 | 内容 | 校验 |
|---|---|---|
| 0 | 待冷凝物品 | AetherAPI.instance().getFreezable(stack) |
| 1 | 冷凝燃料 | AetherAPI.instance().isFreezableFuel(stack) |
| 2 | 产物输出 | TileEntityFreezer.java:127-130 |
冷凝燃料只有一种:冰石 icestone,提供 500 动力(AetherRegistries.java:330)。
冷凝表共 12 条,见 附魔与冷凝系统。
孵化器(Incubator)—— 恐鸟蛋孵化
TileEntityIncubator 逻辑与前两台不同:不使用附魔/冷凝 API,而是硬编码。
- 3 个槽位(
TileEntityIncubator.java:30:new FilledList<ItemStack>(3, null)) - 槽 0 只能是神能火把
ambrosium_torch(isValidSlotItem,TileEntityIncubator.java:141-143) - 槽 1 只能是恐鸟蛋
moa_egg(同上) - 每次消耗一支神能火把获得 1000 动力(
TileEntityIncubator.java:129) - 孵化时间固定 5700 tick(
TileEntityIncubator.java:28:public int ticksRequired = 5700;),不受附魔等级影响 - 孵化完成时在孵化器正上方寻找第一个非空气方块,把恐鸟放在其上(
TileEntityIncubator.java:105-108) - 产出恐鸟被标记为
setPlayerGrown(true)且成长值为-24000(即已成年)(TileEntityIncubator.java:100-101) - 产出后触发
AchievementsAether.incubator成就(TileEntityIncubator.java:95)
顶面/侧面朝向限制:只有侧面可取放物品,getAccessibleSlotsFromSide 在 side == 0(顶面)时返回空数组(TileEntityIncubator.java:152-154)。
日轮祭坛(Sun Altar)
BlockSunAltar 没有 TileEntity,也没有常规 GUI。它是结束天境永昼的交互方块,触发条件严格(BlockSunAltar.java:63-104):
- 玩家必须在天境维度(
player.dimension == AetherConfig.getAetherDimensionID(),:65) - 世界提供者必须是
AetherWorldProvider(:66-67) - 必须处于永昼状态
provider.getIsEternalDay()(:73) - 必须已完成时间追赶
provider.getShouldCycleCatchup()(:73)
满足后按环境分两种放行:
| 环境 | 条件 | 行为 |
|---|---|---|
| 专用服务器 | 玩家是 OP(func_152596_g)或 配置 sunAltarMultiplayer 为真 |
打开日轮界面 |
| 非专用服务器 / 客户端 | 玩家有权限等级 2(canCommandSenderUseCommand(2, ""))或 配置为真 |
打开日轮界面 |
失败时分别提示 gui.sun_altar.eternal_day、gui.sun_altar.cycle_catchup、gui.sun_altar.permission、gui.sun_altar.message(对应不在永昼、追赶未完成、无权限、不在天境)。
顶面贴图复用狱炎石(BlockSunAltar.java:47),底面亦然,侧面为自身图标。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 祭坛硬度 | 2.0 | BlockEnchanter.java:37 |
| 冰冻器硬度 | 2.5 | BlockFreezer.java:37 |
| 孵化器硬度 | 2.0 | BlockIncubator.java:37 |
| 日轮祭坛硬度 | 2.5 | BlockSunAltar.java:32 |
| 孵化时间 | 5700 tick | TileEntityIncubator.java:28 |
| 孵化器燃料动力 | 1000 / 支神能火把 | TileEntityIncubator.java:129 |
| 祭坛燃料动力 | 500 / 个神能碎片 | AetherRegistries.java:298 |
| 冰冻器燃料动力 | 500 / 个冰石 | AetherRegistries.java:330 |
| 每级附魔额外耗时 | +1250 tick | TileEntityEnchanter.java:159 |
| 孵化器槽位数 | 3 | TileEntityIncubator.java:30 |
| 孵化产出恐鸟成长值 | -24000(成年) | TileEntityIncubator.java:102 |
| 日轮权限等级 | 2 | BlockSunAltar.java:80 |
交互
| 触发 | 祭坛 | 冰冻器 | 孵化器 | 日轮祭坛 |
|---|---|---|---|---|
| 右键 | 打开 GUI ID 2 | 打开 GUI ID 3 | 打开 GUI ID 4 | 满足条件时打开日轮界面 |
| 顶面 | — | — | 不可取放(side == 0 返回空) |
— |
| 破坏 | 掉落全部内容物 | 掉落全部内容物 | 掉落全部内容物 | 掉落自身 |