[MD]
# ShulkerPreview · 手持潜影盒右键预览
手持潜影盒**蹲下右键**,用 HologramLib 的虚拟容器预览盒内物品。
界面是**完全虚容**:服务端不存在这个箱子,点击会被服务端打回,**没有任何刷物路径**;不蹲时的右键保持原版放置。
| | |
|---|---|
| 类型 | LSE 脚本(`lse-quickjs`) |
| 前置 | `legacy-script-engine-quickjs` + **HologramLib**(`container*` 导出) |
| 入口 | `ShulkerPreview.js` |
| 诊断指令 | `/shulkerpeek` |
## 安装
1. 把整个 `ShulkerPreview/` 放进服务端 `plugins/`;
2. 重启服务器,或热重载:`ll load ShulkerPreview`;
3. 控制台出现下面这行即就绪:
```
[ShulkerPreview] v1.0.0 已启动:前置就绪
```
若出现 `HologramLib 缺: containerXxx` → 库版本太旧(需要带 `container*` 的那版),右键时会提示缺哪个导出。
## 交互
| 操作 | 结果 |
|---|---|
| 普通右键方块(不蹲) | **原样放行** —— 潜影盒正常放置、正常和世界交互 |
| 蹲下 + 右键方块 | 拦下这次交互(盒子不会被放下),打开预览 |
| **右键空气**(蹲不蹲都行) | 空气上没有放置行为,直接打开预览 |
| 预览里点击物品 | 客户端会发一次拾取请求,服务端没有这个容器 → 判失败 → 客户端把物品打回原位。**脚本不做任何接管** |
| 聊天栏 `/shulkerpeek` | 打印当前手持潜影盒的解析结果(件数、格子、名字、逐条附魔),并把手持物品原始 SNBT 打到控制台 |
预览是**只读**的(脚本显式 `containerSetInteractive(id, false)`):物品不会在服务端发生任何移动。
## 附魔
附魔信息**永远写进 lore**,所以不依赖新库、不依赖光效也能看全:
```
附魔
锋利 V 提升近战伤害
火焰附加 II 命中点燃目标
耐久 III 耐久消耗更慢
```
- 名称 + 罗马等级(1~10 级转罗马数字),后面跟一句**作用说明**(`§8` 深灰)。
两张表都在 `ShulkerPreview.js`(`ENCHANT_NAMES` / `ENCHANT_DESC`,取自 Bedrock `Enchant::Type`:
0 保护 / 9 锋利 / 13 火焰附加 / 27 绑定诅咒 …);表里没有的 id 显示 `附魔#<id>` 且不给说明,不瞎猜。
- 超过 `maxEnchantLines` 条时折叠成 `…还有 N 条附魔`,不丢信息。
- 物品自带的 lore 排在前面,附魔块在后面。
在此之上,**如果库支持**(`containerSetItemEnchanted`,即 HologramLib **API 1.35.0** 起,未发布,还有要更新的东西)
再加一层真附魔:条目按真实附魔物品下发,客户端渲染光效、悬停也能看到附魔名。两层不冲突;
想只要 lore 就把 `CONFIG.preferGlint` 设成 `false`。
[/MD]