Personal Dimension Portal

基本信息

属性 值
注册名(主方块) personalspace:personalPortal
注册名(迁移方块) personalspace:personalPortal_migration2 / _migration3 / _migration4
TileEntity me.eigenraven.personalspace.block.PortalTileEntity
旧 TE 别名 uw_portal_te(从 UtilityWorlds 迁移)
实体方块 ID PortalItem (id=1)
硬度 25.0
爆炸抗性 6,000,000
碰撞箱 0,0,0 → 1, 0.75, 1(半高方块)
光照不透明度 0
材质 Material.rock
透光/不透明 渲染为非正常方块;isOpaqueCube()=false
创造标签 主方块在 tabTransport;3 个迁移方块不在创造栏
贴图 顶面 = 下界传送门;底面 = 附魔台;侧面 = 黑曜石

构造

PortalBlock 通过 isMigration 布尔构造两种行为:

  • 主方块(personalSpacePortal):在创造栏中,可放置,使用 BLOCK_PORTAL 字段。
  • 迁移方块(personalSpacePortalLegacy):3 个变体 BP_MIGRATION_2/3/4,分别在 missingMapping(见下文)阶段重映射为旧 utilityworlds:uw_portal_void/mining/garden/return。

功能

每个个人维度对应 2 个放置的 portal:

  • 原生(home)portal:放置在维度内,默认目标指向主世界 (dim 0)。
  • 返回(return)portal:通过放置主方块并指向 home portal 自动生成或被 link。

PortalTileEntity 字段(持久化到 NBT 中):

字段 含义
active portal 是否可用
targetDimId 目标维度 ID(0=主世界)
targetPosX/Y/Z 目标维度内的 portal 坐标
targetFacing 目标 portal 朝向(用于计算玩家朝向)
facing 当前 portal 朝向(ForgeDirection)

放置时根据玩家位置自动决定朝向:

  • |dx| > |dz| → 朝东(dx>0)或朝西(dx<0)
  • 否则 → 朝南(dz>0)或朝北(dz<0)

摆放要求

  • 必须为半高方块(高度 0.75)。
  • 在 5×5×5 范围内不允许存在其他 portal(PortalItem.onItemUse 强制距离检查,违者显示 chat.personalWorld.proximity)。
  • 放置时若手持的 ItemStack 含 NBT,会复制 NBT 到 TileEntity 并自动调用 linkOtherPortal(false, placer)。

交互

触发 行为
左键(远程) 显示 chat.overworldPersonalDimension 阻止离主世界过远时修改
右键(未激活或在主世界 + Shift) 打开 GuiEditWorld,让玩家配置维度设置
右键(已激活、不在 Shift 状态、玩家为 EntityPlayerMP) transport():执行 transferPlayerToDimension,由 PersonalTeleporter 传送
客户端 onDataPacket PortalTileEntity 收到服务端描述包后关闭打开的 GUI(保证两端的视图同步)

掉落

  • getDrops:永远返回 1 个 ItemStack(主方块物品),NBT 携带完整 active/target/facing/targetFacing。
  • getPickBlock:同 getDrops。
  • removedByPlayer:玩家挖方块时也调用 dropBlockAsItem。
  • 方块物品本身(PortalItem):
    • getEntityLifespan = Integer.MAX_VALUE(地上不会消失)
    • hasCustomEntity = true,使用 PortalEntityItem 替换默认实体;该实体除虚空伤害外对所有 DamageSource 免疫(包括火、岩浆、仙人掌、爆炸)。

关联

  • 主类:PersonalSpaceMod — 注册 4 个 PortalBlock 实例 + PortalTileEntity(含 uw_portal_te 别名)+ PortalEntityItem 实体。
  • NBT 写入键:active, target[](4 项), facing, targetFacing。
  • 老格式字段(自动迁移):isReturnPortal, remoteDimensionId, remotePos[], remoteDir(byte)。
  • 启动 FMLMissingMappingsEvent 时将 4 个旧 utilityworlds:uw_portal_* 重映射为 4 个 personalspace:personalPortal*。

相关条目