物品显示(FMBE)· LSE¶
itemDetail* 和 itemDisplay* 都只让客户端看到一件物品:服务端不会多出实体,也不写存档。
itemDetailShow在坐标上显示一行自动翻译的物品名(例如「钻石 x64」)。它背后就是一个悬浮字,返回的 id 还能继续用holo*精修。itemDisplay*在坐标上摆一个立体物品 / 方块模型,可以换物品、三轴旋转、缩放、跟随玩家;给它设过判定体积之后还能被点击(点击经ghost*轮询取回)。
两个域都是「创建 + 显示」一步到位,不需要再调显示函数。玩家重连由库自动补发;脚本或服务端重启后这些展示就没了,要自己重新创建。
快速开始¶
const itemDetailShow = ll.import("HologramLib", "itemDetailShow");
const itemDisplayCreate = ll.import("HologramLib", "itemDisplayCreate");
// 1. 一行文字:主世界 (100.5, 65, -200.5) 显示「钻石 x64」
const tip = itemDetailShow(0, 100.5, 65, -200.5, "minecraft:diamond", 0, 64, "");
// 2. 一个立体模型:同一位置上方悬浮一颗钻石
const box = itemDisplayCreate(100.5, 66, -200.5, 0, "minecraft:diamond", 0);
tip 同时是一个悬浮字 id(可以传给 holo* 系列),box 是物品悬浮 id(传给下面所有 itemDisplay* 函数)。
itemDetail* —— 一行自动翻译的物品名¶
显示一行自动翻译的物品名¶
itemDetailShow(dimId, x, y, z, itemId, aux, count, customText)
- 参数:
dimId:Integer
放进哪个维度,0主世界 /1下界 /2末地x:Float
世界坐标 Xy:Float
世界坐标 Yz:Float
世界坐标 ZitemId:String
物品标识符,例如minecraft:diamondaux:Integer
物品附加值(data 值),没有就填0count:Integer
数量;只有大于1才会加上xN后缀customText:String
自定义文本;空串 = 用自动翻译的物品名,非空则完全替代(支持§颜色码与{变量})- 返回值:悬浮字 id(可以继续用
holo*精修);失败返回-1(创建失败或该维度画不出来) - 返回值类型:
Integer -
示例:
删掉显示的那行物品名¶
itemDetailHide(id)
- 参数:
id:IntegeritemDetailShow返回的 id- 返回值:
true= 已删除;id 不存在返回false - 返回值类型:
Boolean -
示例:
itemDisplay 创建¶
创建一个悬浮物品模型¶
itemDisplayCreate(x, y, z, dim, itemId, aux)
- 参数:
x:Float
世界坐标 Xy:Float
世界坐标 Yz:Float
世界坐标 Zdim:Integer
维度 id,0/1/2itemId:String
物品标识符,例如minecraft:diamondaux:Integer
物品附加值(data 值),没有就填0- 返回值:物品悬浮 id;失败返回负数
- 返回值类型:
Integer -
示例:
创建并预设平移、旋转与缩放¶
itemDisplayCreateAdvanced(x, y, z, dim, itemId, aux, offX, offY, offZ, rotX, rotY, rotZ, scale)
- 参数:
x:Float
世界坐标 X,同itemDisplayCreatey:Float
世界坐标 Y,同itemDisplayCreatez:Float
世界坐标 Z,同itemDisplayCreatedim:Integer
维度 id,同itemDisplayCreateitemId:String
物品标识符,同itemDisplayCreateaux:Integer
物品附加值(data 值),同itemDisplayCreateoffX:String
模型单位平移 X,写常量数字或 Molang 表达式字符串offY:String
模型单位平移 Y,写常量数字或 Molang 表达式字符串offZ:String
模型单位平移 Z,写常量数字或 Molang 表达式字符串rotX:String
X 轴旋转(度),写常量数字或 Molang 表达式字符串rotY:String
Y 轴旋转(度),写常量数字或 Molang 表达式字符串rotZ:String
Z 轴旋转(度),写常量数字或 Molang 表达式字符串scale:String
缩放,写常量数字或 Molang 表达式字符串- 返回值:物品悬浮 id;失败返回负数
- 返回值类型:
Integer -
示例:
创建时定好模式、视距与可见玩家¶
itemDisplayCreateSeamless(x, y, z, dim, itemId, aux, offX, offY, offZ, rotX, rotY, rotZ, scale, mode, viewDistance, visiblePlayer)
- 参数:
- 前 13 个参数:同
itemDisplayCreateAdvanced mode:Integer-1= 用默认(自动判断),1= item 平面渲染,2= block 立体渲染viewDistance:Float
可见距离(方块);-1= 用默认,0= 不限距离visiblePlayer:String
只给这一个玩家看;空串 = 全员可见- 返回值:物品悬浮 id;失败返回负数
- 返回值类型:
Integer -
示例:
用随机 id 创建悬浮物品¶
itemDisplayCreateRandom(x, y, z, dim, itemId, aux)
- 参数:同
itemDisplayCreate - 返回值:随机段(
0x10000000起)的物品悬浮 id,不会和自增 id 冲突;失败返回负数 - 返回值类型:
Integer -
示例:
指定 id 创建以恢复展示¶
itemDisplayCreateWithId(x, y, z, dim, itemId, aux, desiredId)
- 参数:
- 前 6 个参数:同
itemDisplayCreate desiredId:Integer
想用的 id,必须大于0且当前没被占用- 返回值:成功就是
desiredId;desiredId <= 0或已被占用返回-2 - 返回值类型:
Integer -
示例:
itemDisplay 属性¶
换掉展示显示的物品¶
itemDisplaySetItem(id, itemId, aux)
- 参数:
id:Integer
物品悬浮 iditemId:String
新的物品标识符aux:Integer
新的物品附加值(data 值)- 返回值:
true= 已改;id 不存在返回false。换物品会一并清掉之前设的附加数据 - 返回值类型:
Boolean -
示例:
换物品并带上附加数据¶
itemDisplaySetItemWithNbt(id, itemId, aux, nbt)
- 参数:
id:Integer
物品悬浮 iditemId:String
新的物品标识符aux:Integer
新的物品附加值(data 值)nbt:String
SNBT 字符串;空串 = 清除附加数据。解析失败按「没有附加数据」处理并打日志- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
开关物品的附魔光效¶
itemDisplaySetGlint(id, on)
- 参数:
id:Integer
物品悬浮 idon:Booleantrue= 加光效,false= 去掉;重复设同一个值不会触发重发- 返回值:
true= 已设;id 不存在返回false - 返回值类型:
Boolean -
示例:
把展示挪到新坐标¶
itemDisplaySetPosition(id, x, y, z, dim)
- 参数:
id:Integer
物品悬浮 idx:Float
新的世界坐标 Xy:Float
新的世界坐标 Yz:Float
新的世界坐标 Zdim:Integer
目标维度;填负数 = 只改坐标、保持原维度- 返回值:
true= 已改;id 不存在返回false。跟随中的展示被手动设位会解除跟随 - 返回值类型:
Boolean -
示例:
调物品在模型里的平移¶
itemDisplaySetOffset(id, ox, oy, oz)
- 参数:
id:Integer
物品悬浮 idox:String
常量数字或 Molang 表达式字符串oy:String
常量数字或 Molang 表达式字符串;物品模式的默认 Y 是"-4"oz:String
常量数字或 Molang 表达式字符串- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
调渲染像素级的基础偏移¶
itemDisplaySetBaseOffset(id, ox, oy, oz)
- 参数:
id:Integer
物品悬浮 idox:String
常量数字或 Molang 表达式字符串;默认是"0"oy:String
常量数字或 Molang 表达式字符串;默认是"0"oz:String
常量数字或 Molang 表达式字符串;默认是"0"- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
设置三轴旋转角度¶
itemDisplaySetRotation(id, rx, ry, rz)
- 参数:
id:Integer
物品悬浮 idrx:String
常量数字或 Molang 表达式字符串(度);物品模式默认rotX是"180"(物品模式下库内会自动补偿朝向)ry:String
常量数字或 Molang 表达式字符串(度);物品模式默认rotY是"0"rz:String
常量数字或 Molang 表达式字符串(度);物品模式默认rotZ是"180"- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
叠加偏航旋转增量¶
itemDisplayRotateY(id, delta)
- 参数:
id:Integer
物品悬浮 iddelta:Float
要叠加的角度(度),正负都行- 返回值:
true= 已叠加;id 不存在返回false - 返回值类型:
Boolean -
示例:
设置展示缩放大小¶
itemDisplaySetScale(id, scale)
- 参数:
id:Integer
物品悬浮 idscale:String
常量数字或 Molang 表达式字符串;物品模式默认"0.375",方块模式建议"0.5"- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
按系数放大或缩小¶
itemDisplayScaleBy(id, factor)
- 参数:
id:Integer
物品悬浮 idfactor:Float
大于1放大,0 < factor < 1缩小;<= 0会被直接拒绝- 返回值:
true= 已改;factor <= 0、id 不存在,或乘完结果不大于0时返回false - 返回值类型:
Boolean -
示例:
一步跳到目标缩放¶
itemDisplayScaleTo(id, targetScale)
- 参数:
id:Integer
物品悬浮 idtargetScale:Float
目标缩放;小于0.01(或不是有限数)会被钳到0.01- 返回值:只有方块渲染路径能用:
mode为1(item 平面)返回false,id 不存在返回false - 返回值类型:
Boolean -
示例:
设置方块模式的二段变换¶
itemDisplaySetExtend(id, scale, rx, ry)
- 参数:
id:Integer
物品悬浮 idscale:String
常量数字或 Molang 表达式字符串;只在方块模式生效,默认"1"rx:String
常量数字或 Molang 表达式字符串;只在方块模式生效,默认"-90"ry:String
常量数字或 Molang 表达式字符串;只在方块模式生效,默认"0"- 返回值:
true= 已改;id 不存在返回false - 返回值类型:
Boolean -
示例:
切换物品的渲染模式¶
itemDisplaySetMode(id, mode)
- 参数:
id:Integer
物品悬浮 idmode:Integer0= auto(默认,按物品自己判断),1= item 平面渲染,2= block 立体渲染- 返回值:
true= 已设;id 不存在返回false。值和当前一样时直接返回true且不重发 - 返回值类型:
Boolean -
示例:
打开或关闭这个展示¶
itemDisplaySetEnabled(id, enabled)
- 参数:
id:Integer
物品悬浮 idenabled:Booleanfalse= 玩家看不到(id 仍然有效,随时可以开回来),true= 恢复显示- 返回值:
true= 已设;id 不存在返回false - 返回值类型:
Boolean -
示例:
设置展示的可见距离¶
itemDisplaySetViewDistance(id, dist)
- 参数:
id:Integer
物品悬浮 iddist:Float
距离,单位方块;<= 0= 不限距离- 返回值:
true= 已设;id 不存在返回false。值和当前一样时不重发 - 返回值类型:
Boolean -
示例:
itemDisplay 可见玩家白名单¶
只让名单里的玩家看到¶
itemDisplaySetVisiblePlayers(id, playerNames)
- 参数:
id:Integer
物品悬浮 idplayerNames:Array<String>
玩家名数组,按 LSE 的realName匹配;空数组 = 清除限制、全员可见- 返回值:
true= 已设;id 不存在返回false。维度与视距条件仍然叠加生效 - 返回值类型:
Boolean -
示例:
白名单只填一个玩家¶
itemDisplaySetVisiblePlayer(id, playerName)
- 参数:
id:Integer
物品悬浮 idplayerName:String
唯一可见的玩家名(realName)- 返回值:
true= 已设;id 不存在返回false - 返回值类型:
Boolean -
示例:
清除白名单恢复全员可见¶
itemDisplayClearVisiblePlayers(id)
- 参数:
id:Integer
物品悬浮 id- 返回值:
true= 已清除(本来就没有限制也算成功);id 不存在返回false - 返回值类型:
Boolean -
示例:
itemDisplay 跟随与点击¶
让展示跟着玩家实时移动¶
itemDisplayFollow(id, playerName, offX, offY, offZ)
- 参数:
id:Integer
物品悬浮 idplayerName:String
目标玩家名(realName)offX:Float
在玩家坐标上叠加的偏移量 XoffY:Float
在玩家坐标上叠加的偏移量 YoffZ:Float
在玩家坐标上叠加的偏移量 Z- 返回值:
true= 已开始跟随;id 不存在返回false。玩家下线会自动解除跟随(展示留在原地),手动itemDisplaySetPosition也会解除 - 返回值类型:
Boolean -
示例:
解除跟随并留在原地¶
itemDisplayUnfollow(id)
- 参数:
id:Integer
物品悬浮 id- 返回值:没有跟随关系也返回
true(可以放心重复调用) - 返回值类型:
Boolean -
示例:
建展示时直接带上物品 NBT / 附魔光效(1.30.0 / 26.51.4 起)¶
itemDisplayCreateFull(x, y, z, dim, itemId, aux, offX, offY, offZ, rotX, rotY, rotZ, scale, nbt, glint)
- 参数:前 13 个与
itemDisplayCreateAdvanced相同,后面两个: nbt:String
物品 SNBT(自定义名 / 附魔等),空串 = 无glint:Booleantrue= 加附魔光效- 返回值:物品悬浮 id;失败返回负数
- 说明:效果等同
itemDisplayCreateAdvanced+itemDisplaySetItemWithNbt+itemDisplaySetGlint, 但不产生那一次"建完再改"的 respawn —— 后者会让刚出现的展示闪一下。 -
示例:
让某玩家把一只已有实体看成 FMBE 模型(1.30.0 起)¶
itemDisplayEmitForEntity(playerName, uniqueId, itemId, aux, offsetY, rotX, rotY, rotZ, scale, nbt, glint)
- 参数:
playerName:String
只对这个玩家生效uniqueId:Integer
已有实体的 uniqueId(掉落物就是它自己的 id)itemId/aux/nbt/glint:要显示成什么物品offsetY/rotX/rotY/rotZ/scale:FMBE 外观参数(rotY传"0"= 用实体当前速度方向)- 返回值:实际渲染模式
1=物品平面2=3D 方块;失败-1 - 说明:一次性发
RemoveActor + AddActor(fox) + MobEquipment + SetActorData + 动画,用调用方给的 id, 不保存任何状态;何时发、发给谁、落地怎么躺平、尺寸多少,全由调用方决定。 -
示例:
给展示加可命中的判定体积¶
itemDisplaySetHitbox(id, width, height)
- 参数:
id:Integer
物品悬浮 idwidth:Float
判定体积的宽height:Float
判定体积的高;两个都填0= 恢复成不可命中(默认行为)- 返回值:
true= 已设;id 不存在返回false。命中后的事件经ghost*轮询取回,域是itemDisplay - 返回值类型:
Boolean -
示例:
itemDisplay 查询与删除¶
查询展示是否还存在¶
itemDisplayExists(id)
- 参数:
id:Integer
物品悬浮 id- 返回值:
true= 存在 - 返回值类型:
Boolean -
示例:
查询 id 是否已被占用¶
itemDisplayIsIdUsed(id)
- 参数:
id:Integer
要查的物品悬浮 id- 返回值:
true= 已被占用(此时itemDisplayCreateWithId会返回-2) - 返回值类型:
Boolean -
示例:
列出所有展示的 id¶
itemDisplayGetAllIds()
- 返回值:所有展示的 id;一个都没有时是空数组
- 返回值类型:
Array<Integer> -
示例:
找同维度里最近的展示¶
itemDisplayFindNearest(x, y, z, dim, maxDist)
- 参数:
x:Float
查找中心的世界坐标 Xy:Float
查找中心的世界坐标 Yz:Float
查找中心的世界坐标 Zdim:Integer
只在哪个维度里找maxDist:Float
搜索半径(方块);<= 0= 不限距离- 返回值:最近的展示 id;这个维度里没有匹配返回
-1 - 返回值类型:
Integer -
示例:
取运行态摘要用于排查¶
itemDisplayGetInfo(id)
- 参数:
id:Integer
物品悬浮 id- 返回值:摘要文本,包含 id、维度、坐标、模式、开关、物品、视距、可见名单与已见玩家数;id 不存在返回
not_found - 返回值类型:
String -
示例:
删掉一个物品悬浮展示¶
itemDisplayDestroy(id)
- 参数:
id:Integer
物品悬浮 id- 返回值:
true= 已删除;id 不存在返回false - 返回值类型:
Boolean -
示例:
删掉全部物品悬浮展示¶
itemDisplayDestroyAll()
- 返回值:没有返回值
- 返回值类型:
Null -
示例:
注意事项¶
- 默认姿态由库给定:物品模式
offsetY是"-4"、rotX与rotZ是"180"、scale是"0.375"(方块模式建议"0.5");默认可见距离是 64 格。 - Molang 表达式:平移 / 旋转 / 缩放参数都可以直接写表达式(例如
"math.sin(query.life_time*90)*360"),动画在客户端算,不需要服务端每 tick 推包。 - 属性变更会合并:同一 tick 里连改多项,只会重建一次(不会反复闪)。但重建会把展示重发一遍,所以「每 tick 跟着东西走」要用
itemDisplayFollow,别在 tick 循环里反复调itemDisplaySetPosition。 itemDisplayScaleTo只做单次跳变:它本身不产生渐变动画,想要缓动效果就自己分几步调用;mode为1(item 平面)时它返回false。- 点击需要判定体积:只有设过
itemDisplaySetHitbox的非零宽高,客户端射线才能命中;命中后的交互/攻击经ghost*轮询取回(条目里domain=itemDisplay)。 - id 不通用:
itemDisplay*的 id 只属于物品悬浮域,不要传给holo*/entity*等其它域。反过来,itemDetailShow返回的 id 才是一个悬浮字 id。 - 库不落盘:脚本或服务端重启后展示就没了,要重新创建;玩家重连不用管,库会自动补发。