天境传送门
基本信息
| 属性 | 值 |
|---|---|
| 传送门方块 | aether_legacy:aether_portal |
| 门框物品 | aether_legacy:aether_portal_frame |
| 点燃物 | aether_legacy:skyroot_bucket(5 种 meta 变体) |
| 门框材质 | Blocks.glowstone(原版萤石) |
| 内部空间 | 2 × 3(宽 × 高) |
| 完整外框 | 4 × 4 |
功能
天境传送门是进入天境维度的唯一常规途径,由三部分组成:
- 门框物品
aether_legacy:aether_portal_frame(ItemAetherPortalFrame) - 门框方块 —— 使用门框物品时自动用原版萤石
Blocks.glowstone铺设(ItemAetherPortalFrame.java:62,final Block frameBlock = Blocks.glowstone;) - 传送门方块
BlocksAether.aether_portal(ItemAetherPortalFrame.java:64、86-88)
建造逻辑
ItemAetherPortalFrame.createPortalFrame()(ItemAetherPortalFrame.java:42)按玩家面朝方向放置:
- 起点高度:若被点击方块可被替换则为
y + 1,否则y + 2(ItemAetherPortalFrame.java:44-45) - 预检:4 × 5 范围内若存在既非空气又不可替换的方块则整体失败,不消耗物品(
ItemAetherPortalFrame.java:49-59) - 第 1 步:清空 2 × 3 内部区域(
ItemAetherPortalFrame.java:66-73) - 第 2 步:铺设 4 × 4 萤石外框,
zi取 0–3、yi取 -1–3(ItemAetherPortalFrame.java:75-82) - 第 3 步:内部填入传送门方块,
zi取 1–2、yi取 0–2(ItemAetherPortalFrame.java:84-91)
门内行为
BlockAetherPortal.onEntityCollidedWithBlock(BlockAetherPortal.java:40-50):
- 玩家进入 →
PlayerAether.get((EntityPlayer) entity).setInPortal(),标记为正在传送 - 生物进入(且未骑乘任何实体)→ 通过扩展属性键
aether_legacy:entity_hook取得EntityHook并调用setInPortal()
BlockAetherPortal 继承 BlockPortal,不可破坏(setHardness(-1),BlockAetherPortal.java:28),爆炸抗性 900000F(:29),脚步声为 soundTypeGlass(:30)。
trySpawnPortal(BlockAetherPortal.java:52-68)会依次尝试高度 1 与高度 2 两种门框尺寸,先成功的先生成。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 门框宽度 | 4 | ItemAetherPortalFrame.java:75(zi < 4) |
| 门框高度 | 5 | ItemAetherPortalFrame.java:76(yi 从 -1 到 3) |
| 传送门内部宽 | 2 | ItemAetherPortalFrame.java:84(zi 取 1–2) |
| 传送门内部高 | 3 | ItemAetherPortalFrame.java:85(yi 取 0–2) |
| 爆炸抗性 | 900000 | BlockAetherPortal.java:29 |
| 传送门方块硬度 | -1(不可破坏) | BlockAetherPortal.java:28 |
交互
天根木桶(skyroot_bucket)
ItemSkyrootBucket 用 meta 区分 5 种状态(EnumSkyrootBucketType.java:5-9):
| meta | 枚举 | 中文名(zh_CN.lang) |
说明 |
|---|---|---|---|
| 0 | Empty |
天根木桶 | 空桶,可从水源取水 |
| 1 | Water |
天根水桶 | 可点燃传送门 |
| 2 | Poison |
天根毒液桶 | 喷洒毒液 |
| 3 | Remedy |
天根药剂桶 | 解除负面效果 |
| 4 | Milk |
天根牛奶桶 | 清除药水效果 |
- 点燃传送门:右键传送门方块,
ItemSkyrootBucket.java:155判断当前是否为Empty,装满后返回fillBucket(...)(:201) - 空桶耐久上限 16(
ItemSkyrootBucket.java:91:... == EnumSkyrootBucketType.Empty ? 16 : 1) - 药剂桶与牛奶桶喷洒时调用
entityplayer.curePotionEffects(...)(ItemSkyrootBucket.java:328、:332)
仅用天根水桶激活
配置项「Activate portal with only Skyroot bucket」(AetherConfig.java:81-82,默认 false)可把门点燃方式限制为只有天根水桶可用。读取入口为 AetherConfig.activateOnlyWithSkyroot()(AetherConfig.java:222-224)。
合成配方
传送门本身无合成配方(aether_portal 由门框物品直接放置生成),aether_portal_frame 的配方定义在资源包 assets/aether_legacy/recipes/ 中。