/graveadmin 命令
基本信息
| 属性 | 值 |
|---|---|
| 命令名 | graveadmin |
| 别名 | gadm |
| 启用开关 | AMDIConfig.EnableGraveAdminCommand(默认 false) |
| 注册时机 | FMLServerStartingEvent |
| 权限要求 | 必须是 OP(func_152596_g == true)且处于创造模式(capabilities.isCreativeMode) |
| 命令参数 | 必须正好 2 个(<subcommand> <gravefile>) |
| 服务端控制台 | 直接允许(无权限校验) |
| 触发文件前缀 | inventory-(PREFIX 常量) |
子命令
| 子命令 | 简写 | 行为 |
|---|---|---|
info |
i |
打印墓地的文件名、创建时间、是否已放置、坐标、物品种类数;下方提供 4 个 JSON Chat 按钮 [Open] [Teleport] [Export] [DELETE]。 |
show |
s |
通过网络包 GraveContentDisplayMessage 把墓地的 NBT 推送给玩家,然后打开 GUI_GRAVEVIEW(虚拟 108 格物品栏 Ghost Slot GUI)。 |
teleport |
tp |
将管理员传送至墓地 NBT 中记录的 GraveLocation(强行 setPositionAndUpdate,无视碰撞)。 |
delete |
rm |
删除墓地 .dat 文件。返回 true 才视为成功。 |
export |
e |
把墓地内容导出为玩家附近的 Iron Chest(IronChest:BlockIronChest:6,即紫水晶箱 crystal chest)。仅当 Placed == 0 放行。 |
forceexport |
— | 同 export,但允许 Placed != 0(已被认领仍可强制导出)。所有 OP 会收到警告「%s just spawned a grave that was reported to exist in-world」。 |
参数语义
pArgs[1] 接受带或不带 inventory- 前缀、不带 .dat 后缀的文件名;内部 stripFilename 会把两端都剥离再拼回。
传送行为
/graveadmin teleport 直接把玩家传送到 GraveLocation(Vec3)。源码注释建议:Make sure you are in creative, to avoid surprises…。无死亡、无回滚、无确认。
导出行为
exportGraveToChest:
- 读取
GraveFile→ 检查getPlacedFlag():Placed != 0 && !pForce→ 拒绝,并提示/graveadmin forceexport <gravefile>强制。Placed != 0 && pForce→ 给所有 OP 发警告。
- 通过
ItemDescriptor.fromString("IronChest:BlockIronChest:6", true)拿目标方块。 - 从玩家脚下坐标出发,最多 10 次尝试:每次
±5随机偏移找一个Blocks.air位置。 - 找不到空气 → 报错 Unable to find some free space at your current location。
setBlock(x, y, z, BlockIronChest:6)→ 把GraveInventory复制到箱子(截断在getSizeInventory())。- 物品数量超过箱子槽位 → 警告 Too many items in grave. Export truncated。
⚠️ 强依赖 IronChest mod:
GameRegistry找不到IronChest:BlockIronChest时整个命令报错 Unable to find IronChest in the GameRegistry。
Grave Inspector GUI
show 子命令打开的虚拟物品栏:
| 属性 | 值 |
|---|---|
| GUI ID | GUI_GRAVEVIEW = 1 |
| 服务端容器 | ContainerGraveInventory |
| 客户端 GUI | GuiAMDI(纹理 gravefakeintentory.png) |
| 网格 | 9 行 × 12 列 = 108 个槽位(最大行囊规格) |
| Slot 类型 | GhostSlot(拒绝放入、拒绝取出) |
| 大小 | 237×255 像素 |
| 玩家物品栏起点 | (238-162)/2+1, 256 |
| 物品栏交互 | slotClick / transferStackInSlot / mergeItemStack 全部 NO-OP |
参数补全
addTabCompletionOptions:当 args.length == 2 时调用 AMDIForge.GraveHdl.getMatchedDumps(sender.getEntityWorld(), prefix) 返回匹配文件列表(按 inventory- 前缀过滤)。
网络包
| 名称 | 方向 | 用途 |
|---|---|---|
GraveContentDisplayMessage |
服务端 → 客户端 | 把 NBTTagCompound 写入 GuiHandler.PendingGraveNBT,然后在客户端再次 openGui(GUI_GRAVEVIEW)。 |
第三方 mod 集成
- IronChest:唯一硬依赖;
/graveadmin export实际通过该 mod 写入BlockIronChest:6(crystal chest)。 - YAMCore:使用其
PlayerChatHelper、JSONChatText、TabText、ItemDescriptor、PacketDispatcher等基础设施。 - Forge:
MinecraftForge.EVENT_BUS、@Mod注册、IGuiHandler。
已知问题
- 玩家必须同时是 OP 且 创造模式才能用;非创造模式 OP 也无法执行。属刻意设计(防误操作),但与其他管理类命令不一致。
- 传送无视玩家所处维度——管理员在主世界也能
/graveadmin tp <nether_grave>跳到地狱,触发常规跨维度传送副作用。
相关条目
- 生物生成限制器(SpawnLimiter) - 同一 mod 的另一系统
- /gravehelp 命令 - 玩家侧的对称命令