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 删除方块并清空属性。
相关条目
- Campfire - 互补的床铺替代方块
- Adventure Backpack (物品) - 背包物品栏内"睡袋 deploy"逻辑由
BlockSleepingBag.packPortableSleepingBag触发