From 54d7a8219f6c3030bc512ce6894b6b683c5d02a2 Mon Sep 17 00:00:00 2001 From: fly6516 Date: Mon, 24 Mar 2025 18:54:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=8A=B1=E7=9B=86?= =?UTF-8?q?=E5=A2=93=E7=A2=91=E4=BA=A4=E4=BA=92=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 SimpleTombstone 类中添加花盆右键事件监听,实现墓碑交互功能 - 修改 TombstoneStorage 类中的日志输出,使用 nbt 而不是 nbt.toString(),提高日志可读性 --- .../com/simpletombstone/SimpleTombstone.java | 53 ++++++++++++++++++- .../com/simpletombstone/TombstoneStorage.java | 2 +- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simpletombstone/SimpleTombstone.java b/src/main/java/com/simpletombstone/SimpleTombstone.java index 909ac80..4a019d5 100644 --- a/src/main/java/com/simpletombstone/SimpleTombstone.java +++ b/src/main/java/com/simpletombstone/SimpleTombstone.java @@ -1,12 +1,14 @@ package com.simpletombstone; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.api.EnvType; import net.minecraft.block.*; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import org.slf4j.Logger; @@ -59,6 +61,42 @@ public class SimpleTombstone implements ModInitializer { } }); + // 注册花盆右键事件监听 + UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { + if (world.isClient()) { + return ActionResult.PASS; // 只在服务器端处理 + } + + BlockPos pos = hitResult.getBlockPos(); + BlockState state = world.getBlockState(pos); + + // 检查玩家是否点击了花盆 + if (state.getBlock() == Blocks.FLOWER_POT) { + TombstoneStorage storage = TombstoneStorage.load((ServerWorld) world); + // 检查是否有墓碑数据 + for (Map.Entry entry : storage.getTombstoneData().entrySet()) { + // 如果点击的花盆与墓碑位置相匹配 + if (entry.getKey().equals(pos)) { + PlayerTombstoneData data = entry.getValue(); + // 将物品恢复给玩家 + for (ItemStack stack : data.items()) { + player.getInventory().offerOrDrop(stack); + } + + // 删除墓碑和数据 + world.removeBlock(pos, false); + storage.removeTombstone(pos); + player.sendMessage(Text.of("你的物品已经从墓碑中恢复!"), false); + LOGGER.info("[SimpleTombstone] 玩家 {} 恢复了物品并删除了墓碑。", player.getName().getString()); + break; + } + } + } + return ActionResult.PASS; + }); + + + LOGGER.info("[SimpleTombstone] 服务器端初始化完成"); } } @@ -141,7 +179,18 @@ public class SimpleTombstone implements ModInitializer { } } } + - record PlayerTombstoneData(UUID playerId, List items) { - } + // 在SimpleTombstone.java中添加 + public record PlayerTombstoneData(UUID playerId, List items) { + public PlayerTombstoneData(UUID playerId, List items) { + this.playerId = playerId; + this.items = new ArrayList<>(items); + } + + @Override + public List items() { + return Collections.unmodifiableList(items); + } + } } diff --git a/src/main/java/com/simpletombstone/TombstoneStorage.java b/src/main/java/com/simpletombstone/TombstoneStorage.java index eec00b2..1be19fe 100644 --- a/src/main/java/com/simpletombstone/TombstoneStorage.java +++ b/src/main/java/com/simpletombstone/TombstoneStorage.java @@ -69,7 +69,7 @@ public class TombstoneStorage extends PersistentState { nbt.put(KEY_TOMBSTONES, tombstoneList); // 打印完整的NBT数据以检查格式 - LOGGER.info("[TombstoneStorage] 写入的 NBT 数据: {}", nbt.toString()); + LOGGER.info("[TombstoneStorage] 写入的 NBT 数据: {}", nbt); LOGGER.info("[TombstoneStorage] NBT 数据写入成功."); return nbt; }