/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:

  1. 读取 GraveFile → 检查 getPlacedFlag():
    • Placed != 0 && !pForce → 拒绝,并提示 /graveadmin forceexport <gravefile> 强制。
    • Placed != 0 && pForce → 给所有 OP 发警告。
  2. 通过 ItemDescriptor.fromString("IronChest:BlockIronChest:6", true) 拿目标方块。
  3. 从玩家脚下坐标出发,最多 10 次尝试:每次 ±5 随机偏移找一个 Blocks.air 位置。
  4. 找不到空气 → 报错 Unable to find some free space at your current location。
  5. setBlock(x, y, z, BlockIronChest:6) → 把 GraveInventory 复制到箱子(截断在 getSizeInventory())。
  6. 物品数量超过箱子槽位 → 警告 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> 跳到地狱,触发常规跨维度传送副作用。

相关条目