Sleeping Bag

基本信息

属性 值
注册名 adventurebackpack:blockSleepingBag
方块类 BlockSleepingBag (extends BlockDirectional)
材料 cloth
尺寸 1×0.1×1 的"地毯式"扁平方块(仅 Y 方向 1/10 高)
朝向 4 朝向;meta & 8 标记此格是床的"头"部

功能

代替普通床铺的位置型睡袋,可与 Campfire 一起实现"野外宿营"重置。当玩家右键时检测维度允许性(不可在 hells biome 睡觉);如果检测到最近的 blockCampFire(半径 8 横向 / 2 纵向)则将 BackpackProperty.setCampFire(coords) 并把床铺路径指向 Bag 自身;否则仅保留原 spawn。背包 UI 可直接 “deploy” 睡袋,相当于在玩家所在位置放置一个 BlockSleepingBag 并记忆坐标。

摆放要求

  • 必须贴在 Solid top 朝上的实体方块之上
  • meta & 8 是床头,另一 meta 半段是床尾(foot),两者使用相同的方块标记
  • 只在 world.provider.canRespawnHere() 且不在地狱(hell)时生效

数值

数值 值
边界高度 0.1
床铺识别 严格依靠 meta 中 4 + 8 两位(8 = head)
是否可睡维度 canRespawnHere == true(如 overworld)

交互

触发 行为
右键(头格) 调用 player.sleepInBedAt;同时检测是否已是"便携式睡袋":是则保存当前维度 bed 到 BackpackProperty.storedSpawn;否则尝试寻找附近 8×2×8 范围内的 blockCampFire,并记下其坐标作为新床铺
右键(尾格) 自动偏移行至床头 meta 同时处理
占用中 显示 tile.bed.occupied 提示
时机不安全 提示 tile.bed.noSleep 或 tile.bed.notSafe
快捷背包热键 + Shift 触发 onPortableBlockActivated → 如果玩家已 deploy 过睡袋,则 fold 回背包并删除方块

玩家便携模式(“Sleep Anywhere” 集成)

玩家在穿戴中的 Backpack 设置 extendedProperties.setBoolean(TAG_SLEEPING_IN_BAG=true) 后,热键 + Shift 直接调用 player.setSpawnChunk = (...) 并传 isSleepingInPortableBag() 返回 true,跳过 Campfire 检测。起床/死亡时由 BlockSleepingBag.packPortableSleepingBag 删除方块并清空属性。

相关条目