末影邮件
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | RandomThings:enderLetter |
| 类 | lumien.randomthings.Items.ItemEnderLetter |
| 堆叠上限 | 1(ItemEnderLetter.java:23) |
| 变体数 | 2(metadata 0 空 / 1 已寄) |
| GUI ID | GuiIds.ENDER_LETTER = 8(GuiIds.java:13) |
| 实现接口 | IItemWithProperties(ItemEnderLetter.java:21) |
| 开关 | Items.EnderLetter(RTConfiguration.java:219) |
功能
末影邮件是一个玩家间物品传递道具:填写收件人后可把物品寄给另一名在线玩家。
状态显示
hasEffect 在 metadata 为 1 时返回 true,使已寄出的邮件发出附魔光效(ItemEnderLetter.java:26-28):
return par1ItemStack.getItemDamage() == 1;
addInformation 读取 NBT 显示寄/收件人(:31 起),语言键见 zh_CN.lang:163-167:
| 键 | 中文 | 触发条件 |
|---|---|---|
text.enderLetter.noReceiver |
尚未收件人 | 收件人为空 |
text.enderLetter.receiver |
收件人: %s | 已填收件人 |
text.enderLetter.sender |
寄件人: %s | 已有寄件人 |
text.enderLetter.invalidreceiver |
你填写了一个无效的收件人 | 收件人无效 |
text.enderLetter.empty |
你不能寄出空的邮件 | 内容为空 |
NBT 键为 RandomThingsNBTKeys.RECEIVER 与 SENDER(ItemEnderLetter.java:33-34)。
GUI 结构
ContainerEnderLetter 继承 ContainerItem,包含 9 个物品槽与 9 个只读输出槽(Container/ContainerEnderLetter.java:22-24):
for (int col = 0; col < 9; ++col) {
addSlotToContainer(new Slot(letterInventory, col, 8 + col * 18, 18));
addSlotToContainer(new SlotOutputOnly(letterInventory, col, 8 + col * 18, 18));
}
即 3×3 网格上排可放入、下排为回执(SlotOutputOnly 只读)。后接玩家 27 + 9 格。
数据持久化
与磁力仪共用世界存档根目录的 RandomThings.dat。LetterHandler 在服务器启动时 readFromNBT()(RandomThings.java:168-169)。读取失败时提示 text.error.nbt,说明"末影邮件及磁力仪等物品将在游戏重启后消失"(zh_CN.lang:156)—— 可见本物品的数据完全依赖该 NBT 文件。
数值
| 数值名 | 值 |
|---|---|
| 堆叠上限 | 1 |
| 物品槽位 | 9(3×3) |
| 回执槽位 | 9(SlotOutputOnly) |
| 状态 metadata | 0 = 未寄出,1 = 已寄出 |
| GUI ID | 8 |
交互
| 触发 | 行为 |
|---|---|
| 右键 | 打开 GUI ID 8 |
| 放入物品 + 填收件人 | 寄出,metadata 置 1,发光效 |
| 收到邮件 | 物品出现在输出槽 |
| 收件人无效 | 提示「你填写了一个无效的收件人」 |
| 内容为空 | 提示「你不能寄出空的邮件」 |
合成配方
fpl
| 字符 | 物品 |
|---|---|
f |
末影碎片(RandomThings:ingredient meta 2) |
p |
纸(Items.paper) |
l |
皮革(Items.leather) |
来源:Library/Recipes.java:350-359,受 ConfigItems.enderLetter 约束。
[!NOTE]
PacketHandler.init()中本物品的封包注册被注释掉了(Network/PacketHandler.java:22-23):// INSTANCE.registerMessage(MessageEnderLetter.class, // MessageEnderLetter.class, 0, Side.SERVER);而
MessageEnderLetter类在本仓库中根本不存在(Network/Messages/下共 13 个文件,无此文件)。因此本物品没有专用网络封包,物品转移走的是RandomThings.datNBT 文件而非封包。